@@ -24,7 +24,7 @@ module Distribution.Server.Features.Core (
2424
2525-- stdlib
2626import qualified Codec.Compression.GZip as GZip
27- import Data.Aeson (Value (.. ))
27+ import Data.Aeson (Value (.. ), toJSON )
2828import qualified Data.Aeson.Key as Key
2929import qualified Data.Aeson.KeyMap as KeyMap
3030import Data.ByteString.Lazy (ByteString )
@@ -40,6 +40,7 @@ import Distribution.Server.Prelude
4040import Distribution.Server.Features.Core.Backup
4141import Distribution.Server.Features.Core.State
4242import Distribution.Server.Features.Security.Migration
43+ import Distribution.Server.Features.Security.SHA256 (sha256 )
4344import Distribution.Server.Features.Users
4445import Distribution.Server.Framework
4546import 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