Skip to content

Commit eb00f2f

Browse files
committed
Add hashes to the list of revisions in JSON format
The list of metadata revisions for a package is available at the url /package/:package/revisions/ When rendered in HTML this list includes the revision number, timestamp, uploader, and sha256; but when rendered in JSON the sha256 is missing. This change adds revisions sha256 to the JSON rendering.
1 parent 1cba044 commit eb00f2f

File tree

1 file changed

+7
-3
lines changed
  • src/Distribution/Server/Features

1 file changed

+7
-3
lines changed

src/Distribution/Server/Features/Core.hs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ module Distribution.Server.Features.Core (
2424

2525
-- stdlib
2626
import qualified Codec.Compression.GZip as GZip
27-
import Data.Aeson (Value (..))
27+
import Data.Aeson (Value (..), toJSON)
2828
import qualified Data.Aeson.Key as Key
2929
import qualified Data.Aeson.KeyMap as KeyMap
3030
import Data.ByteString.Lazy (ByteString)
@@ -40,6 +40,7 @@ import Distribution.Server.Prelude
4040
import Distribution.Server.Features.Core.Backup
4141
import Distribution.Server.Features.Core.State
4242
import Distribution.Server.Features.Security.Migration
43+
import Distribution.Server.Features.Security.SHA256 (sha256)
4344
import Distribution.Server.Features.Users
4445
import Distribution.Server.Framework
4546
import qualified Distribution.Server.Framework.BlobStorage as BlobStorage
@@ -728,12 +729,15 @@ coreFeature ServerEnv{serverBlobStore = store} UserFeature{..}
728729
pkginfo <- packageInPath dpath >>= lookupPackageId
729730
users <- queryGetUserDb
730731
let revisions = pkgMetadataRevisions pkginfo
731-
revisionToObj rev (_, (utime, uid)) =
732-
let uname = userIdToName users uid in
732+
revisionToObj rev (cabalFileText, (utime, uid)) =
733+
let uname = userIdToName users uid
734+
hash = sha256 (cabalFileByteString cabalFileText)
735+
in
733736
Object $ KeyMap.fromList
734737
[ (Key.fromString "number", Number (fromIntegral rev))
735738
, (Key.fromString "user", String (Text.pack (display uname)))
736739
, (Key.fromString "time", String (Text.pack (formatTime defaultTimeLocale "%Y-%m-%dT%H:%M:%SZ" utime)))
740+
, (Key.fromString "sha256", toJSON hash)
737741
]
738742
revisionsJson = Array $ Vec.imap revisionToObj revisions
739743
return (toResponse revisionsJson)

0 commit comments

Comments
 (0)