@@ -54,6 +54,8 @@ import Data.Foldable (toList)
5454import Data.Traversable (for )
5555import qualified Data.List as List
5656import Data.Time (UTCTime )
57+ import Distribution.Server.Users.Types (UserName , UserInfo (.. ))
58+ import Distribution.Server.Features.Users (UserFeature (lookupUserInfo ))
5759
5860
5961data PackageInfoJSONFeature = PackageInfoJSONFeature {
@@ -79,10 +81,10 @@ data PackageInfoJSONResource = PackageInfoJSONResource {
7981-- line for a package when it changes
8082initPackageInfoJSONFeature
8183 :: Framework. ServerEnv
82- -> IO (CoreFeature -> Preferred. VersionsFeature -> IO PackageInfoJSONFeature )
84+ -> IO (CoreFeature -> Preferred. VersionsFeature -> UserFeature -> IO PackageInfoJSONFeature )
8385initPackageInfoJSONFeature env = do
8486 packageInfoState <- packageInfoStateComponent False (Framework. serverStateDir env)
85- return $ \ core preferred -> do
87+ return $ \ core preferred userFeature -> do
8688
8789 let coreR = coreResource core
8890 info = " Get basic package information: \
@@ -94,13 +96,13 @@ initPackageInfoJSONFeature env = do
9496 (Framework. extendResource (corePackagePage coreR)) {
9597 Framework. resourceDesc = [(Framework. GET , info)]
9698 , Framework. resourceGet =
97- [(" json" , servePackageBasicDescription coreR
99+ [(" json" , servePackageBasicDescription coreR userFeature
98100 preferred packageInfoState)]
99101 }
100102 , (Framework. extendResource (coreCabalFileRev coreR)) {
101103 Framework. resourceDesc = [(Framework. GET , vInfo)]
102104 , Framework. resourceGet =
103- [(" json" , servePackageBasicDescription coreR
105+ [(" json" , servePackageBasicDescription coreR userFeature
104106 preferred packageInfoState)]
105107 }
106108 ]
@@ -133,14 +135,15 @@ initPackageInfoJSONFeature env = do
133135
134136-- | Pure function for extracting basic package info from a Cabal file
135137getBasicDescription
136- :: UTCTime
138+ :: UserName
139+ -> UTCTime
137140 -- ^ Time of upload
138141 -> CabalFileText
139142 -> Int
140143 -- ^ Metadata revision. This will be added to the resulting
141144 -- @PackageBasicDescription@
142145 -> Either String PackageBasicDescription
143- getBasicDescription uploadedAt (CabalFileText cf) metadataRev =
146+ getBasicDescription uploader uploadedAt (CabalFileText cf) metadataRev =
144147 let parseResult = PkgDescr. parseGenericPackageDescription (BS. toStrict cf)
145148 in case PkgDescr. runParseResult parseResult of
146149 (_, Right pkg) -> let
@@ -154,6 +157,7 @@ getBasicDescription uploadedAt (CabalFileText cf) metadataRev =
154157 pbd_homepage = T. pack . fromShortText $ PkgDescr. homepage pkgd
155158 pbd_metadata_revision = metadataRev
156159 pbd_uploaded_at = uploadedAt
160+ pbd_uploader = uploader
157161 in
158162 return $ PackageBasicDescription {.. }
159163 (_, Left (_, perrs)) ->
@@ -168,12 +172,13 @@ getBasicDescription uploadedAt (CabalFileText cf) metadataRev =
168172-- A listing of versions and their deprecation states
169173servePackageBasicDescription
170174 :: CoreResource
175+ -> UserFeature
171176 -> Preferred. VersionsFeature
172177 -> Framework. StateComponent Framework. AcidState PackageInfoState
173178 -> Framework. DynamicPath
174179 -- ^ URI specifying a package and version `e.g. lens or lens-4.11`
175180 -> Framework. ServerPartE Framework. Response
176- servePackageBasicDescription resource preferred packageInfoState dpath = do
181+ servePackageBasicDescription resource userFeature preferred packageInfoState dpath = do
177182
178183 let metadataRev :: Maybe Int = lookup " revision" dpath >>= Framework. fromReqURI
179184
@@ -220,7 +225,9 @@ servePackageBasicDescription resource preferred packageInfoState dpath = do
220225
221226 let cabalFile = metadataRevs Vector. ! metadataInd
222227 uploadedAt = fst $ uploadInfos Vector. ! metadataInd
223- pkgDescr = getBasicDescription uploadedAt cabalFile metadataInd
228+ uploaderId = snd $ uploadInfos Vector. ! metadataInd
229+ uploader <- userName <$> lookupUserInfo userFeature uploaderId
230+ let pkgDescr = getBasicDescription uploader uploadedAt cabalFile metadataInd
224231 case pkgDescr of
225232 Left e -> Framework. errInternalError [Framework. MText e]
226233 Right d -> return d
0 commit comments