mirror of
https://github.com/Start9Labs/registry.git
synced 2026-04-01 20:44:15 +00:00
filter packages for os compatibility before fetching metadata (#117)
* filter packages for os compatibility before fetching metadata * address PR feedback and add os filtering to get package latest version endpoint * additional test suite data * filter empty version sets * attempt to fix leak Co-authored-by: Keagan McClelland <keagan.mcclelland@gmail.com>
This commit is contained in:
@@ -2,26 +2,54 @@
|
||||
|
||||
module Handler.Package.V0.Manifest where
|
||||
|
||||
import Conduit (awaitForever, (.|))
|
||||
import Data.String.Interpolate.IsString (i)
|
||||
import Conduit (
|
||||
awaitForever,
|
||||
(.|),
|
||||
)
|
||||
import Data.String.Interpolate.IsString (
|
||||
i,
|
||||
)
|
||||
import Foundation (Handler)
|
||||
import Handler.Util (addPackageHeader, getVersionSpecFromQuery, orThrow, versionPriorityFromQueryIsMin)
|
||||
import Handler.Package.V1.Index (getOsVersionQuery)
|
||||
import Handler.Util (
|
||||
addPackageHeader,
|
||||
fetchCompatiblePkgVersions,
|
||||
getVersionSpecFromQuery,
|
||||
orThrow,
|
||||
versionPriorityFromQueryIsMin,
|
||||
)
|
||||
import Lib.Error (S9Error (..))
|
||||
import Lib.PkgRepository (getBestVersion, getManifest)
|
||||
import Lib.PkgRepository (
|
||||
getBestVersion,
|
||||
getManifest,
|
||||
)
|
||||
import Lib.Types.Core (PkgId)
|
||||
import Network.HTTP.Types (status404)
|
||||
import Startlude (show, ($))
|
||||
import Yesod (TypedContent, addHeader, respondSource, sendChunkBS, sendResponseStatus, typeJson)
|
||||
import Startlude (
|
||||
pure,
|
||||
show,
|
||||
($),
|
||||
)
|
||||
import Yesod (
|
||||
TypedContent,
|
||||
addHeader,
|
||||
respondSource,
|
||||
sendChunkBS,
|
||||
sendResponseStatus,
|
||||
typeJson,
|
||||
)
|
||||
|
||||
|
||||
getAppManifestR :: PkgId -> Handler TypedContent
|
||||
getAppManifestR pkg = do
|
||||
osVersion <- getOsVersionQuery
|
||||
osCompatibleVersions <- fetchCompatiblePkgVersions osVersion pkg
|
||||
versionSpec <- getVersionSpecFromQuery
|
||||
preferMin <- versionPriorityFromQueryIsMin
|
||||
version <-
|
||||
getBestVersion pkg versionSpec preferMin
|
||||
(pure $ getBestVersion versionSpec preferMin osCompatibleVersions)
|
||||
`orThrow` sendResponseStatus status404 (NotFoundE [i|#{pkg} satisfying #{versionSpec}|])
|
||||
addPackageHeader pkg version
|
||||
(len, src) <- getManifest pkg version
|
||||
addHeader "Content-Length" (show len)
|
||||
respondSource typeJson $ src .| awaitForever sendChunkBS
|
||||
respondSource typeJson $ src .| awaitForever sendChunkBS
|
||||
|
||||
Reference in New Issue
Block a user