@@ -54,6 +54,8 @@ import Data.Foldable (toList)
54
54
import Data.Traversable (for )
55
55
import qualified Data.List as List
56
56
import Data.Time (UTCTime )
57
+ import Distribution.Server.Users.Types (UserName , UserInfo (.. ))
58
+ import Distribution.Server.Features.Users (UserFeature (lookupUserInfo ))
57
59
58
60
59
61
data PackageInfoJSONFeature = PackageInfoJSONFeature {
@@ -79,10 +81,10 @@ data PackageInfoJSONResource = PackageInfoJSONResource {
79
81
-- line for a package when it changes
80
82
initPackageInfoJSONFeature
81
83
:: Framework. ServerEnv
82
- -> IO (CoreFeature -> Preferred. VersionsFeature -> IO PackageInfoJSONFeature )
84
+ -> IO (CoreFeature -> Preferred. VersionsFeature -> UserFeature -> IO PackageInfoJSONFeature )
83
85
initPackageInfoJSONFeature env = do
84
86
packageInfoState <- packageInfoStateComponent False (Framework. serverStateDir env)
85
- return $ \ core preferred -> do
87
+ return $ \ core preferred userFeature -> do
86
88
87
89
let coreR = coreResource core
88
90
info = " Get basic package information: \
@@ -94,13 +96,13 @@ initPackageInfoJSONFeature env = do
94
96
(Framework. extendResource (corePackagePage coreR)) {
95
97
Framework. resourceDesc = [(Framework. GET , info)]
96
98
, Framework. resourceGet =
97
- [(" json" , servePackageBasicDescription coreR
99
+ [(" json" , servePackageBasicDescription coreR userFeature
98
100
preferred packageInfoState)]
99
101
}
100
102
, (Framework. extendResource (coreCabalFileRev coreR)) {
101
103
Framework. resourceDesc = [(Framework. GET , vInfo)]
102
104
, Framework. resourceGet =
103
- [(" json" , servePackageBasicDescription coreR
105
+ [(" json" , servePackageBasicDescription coreR userFeature
104
106
preferred packageInfoState)]
105
107
}
106
108
]
@@ -133,14 +135,15 @@ initPackageInfoJSONFeature env = do
133
135
134
136
-- | Pure function for extracting basic package info from a Cabal file
135
137
getBasicDescription
136
- :: UTCTime
138
+ :: UserName
139
+ -> UTCTime
137
140
-- ^ Time of upload
138
141
-> CabalFileText
139
142
-> Int
140
143
-- ^ Metadata revision. This will be added to the resulting
141
144
-- @PackageBasicDescription@
142
145
-> Either String PackageBasicDescription
143
- getBasicDescription uploadedAt (CabalFileText cf) metadataRev =
146
+ getBasicDescription uploader uploadedAt (CabalFileText cf) metadataRev =
144
147
let parseResult = PkgDescr. parseGenericPackageDescription (BS. toStrict cf)
145
148
in case PkgDescr. runParseResult parseResult of
146
149
(_, Right pkg) -> let
@@ -154,6 +157,7 @@ getBasicDescription uploadedAt (CabalFileText cf) metadataRev =
154
157
pbd_homepage = T. pack . fromShortText $ PkgDescr. homepage pkgd
155
158
pbd_metadata_revision = metadataRev
156
159
pbd_uploaded_at = uploadedAt
160
+ pbd_uploader = uploader
157
161
in
158
162
return $ PackageBasicDescription {.. }
159
163
(_, Left (_, perrs)) ->
@@ -168,12 +172,13 @@ getBasicDescription uploadedAt (CabalFileText cf) metadataRev =
168
172
-- A listing of versions and their deprecation states
169
173
servePackageBasicDescription
170
174
:: CoreResource
175
+ -> UserFeature
171
176
-> Preferred. VersionsFeature
172
177
-> Framework. StateComponent Framework. AcidState PackageInfoState
173
178
-> Framework. DynamicPath
174
179
-- ^ URI specifying a package and version `e.g. lens or lens-4.11`
175
180
-> Framework. ServerPartE Framework. Response
176
- servePackageBasicDescription resource preferred packageInfoState dpath = do
181
+ servePackageBasicDescription resource userFeature preferred packageInfoState dpath = do
177
182
178
183
let metadataRev :: Maybe Int = lookup " revision" dpath >>= Framework. fromReqURI
179
184
@@ -220,7 +225,9 @@ servePackageBasicDescription resource preferred packageInfoState dpath = do
220
225
221
226
let cabalFile = metadataRevs Vector. ! metadataInd
222
227
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
224
231
case pkgDescr of
225
232
Left e -> Framework. errInternalError [Framework. MText e]
226
233
Right d -> return d
0 commit comments