mirror of
https://github.com/Start9Labs/registry.git
synced 2026-04-04 13:49:43 +00:00
base64 encode icon in package response
This commit is contained in:
@@ -14,6 +14,7 @@ default-extensions:
|
|||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
- base >=4.12 && <5
|
- base >=4.12 && <5
|
||||||
|
- base64
|
||||||
- aeson
|
- aeson
|
||||||
- ansi-terminal
|
- ansi-terminal
|
||||||
- attoparsec
|
- attoparsec
|
||||||
|
|||||||
@@ -36,6 +36,8 @@ import Data.Aeson ( decode
|
|||||||
, eitherDecodeStrict
|
, eitherDecodeStrict
|
||||||
)
|
)
|
||||||
import qualified Data.Attoparsec.Text as Atto
|
import qualified Data.Attoparsec.Text as Atto
|
||||||
|
|
||||||
|
import Data.ByteString.Base64
|
||||||
import Data.ByteArray.Encoding ( Base(Base16)
|
import Data.ByteArray.Encoding ( Base(Base16)
|
||||||
, convertToBase
|
, convertToBase
|
||||||
)
|
)
|
||||||
@@ -77,7 +79,7 @@ import Foundation ( Handler
|
|||||||
import Handler.Types.Marketplace
|
import Handler.Types.Marketplace
|
||||||
import Lib.Error ( S9Error(..)
|
import Lib.Error ( S9Error(..)
|
||||||
)
|
)
|
||||||
import Lib.PkgRepository ( getManifest )
|
import Lib.PkgRepository ( getManifest, getIcon, PkgRepo )
|
||||||
import Lib.Types.AppIndex ( PkgId(PkgId)
|
import Lib.Types.AppIndex ( PkgId(PkgId)
|
||||||
)
|
)
|
||||||
import Lib.Types.AppIndex ( )
|
import Lib.Types.AppIndex ( )
|
||||||
@@ -325,14 +327,15 @@ getPackageListR = do
|
|||||||
let compatiblePkgDepInfo = fmap (filterDependencyOsCompatible osPredicate) pkgDepInfoWithVersions
|
let compatiblePkgDepInfo = fmap (filterDependencyOsCompatible osPredicate) pkgDepInfoWithVersions
|
||||||
res <- catMaybes <$> traverse filterDependencyBestVersion compatiblePkgDepInfo
|
res <- catMaybes <$> traverse filterDependencyBestVersion compatiblePkgDepInfo
|
||||||
pure $ (pkgId, pkgCategories', pkgVersions', pkgVersion, res)
|
pure $ (pkgId, pkgCategories', pkgVersions', pkgVersion, res)
|
||||||
constructPackageListApiRes :: (MonadResource m, MonadReader r m, Has AppSettings r) => (Key PkgRecord, [Category], [Version], Version, [(Key PkgRecord, Text, Version)]) -> m PackageRes
|
constructPackageListApiRes :: (MonadResource m, MonadReader r m, Has AppSettings r, Has PkgRepo r) => (Key PkgRecord, [Category], [Version], Version, [(Key PkgRecord, Text, Version)]) -> m PackageRes
|
||||||
constructPackageListApiRes (pkgKey, pkgCategories, pkgVersions, pkgVersion, dependencies) = do
|
constructPackageListApiRes (pkgKey, pkgCategories, pkgVersions, pkgVersion, dependencies) = do
|
||||||
settings <- ask @_ @_ @AppSettings
|
settings <- ask @_ @_ @AppSettings
|
||||||
let pkgId = unPkgRecordKey pkgKey
|
let pkgId = unPkgRecordKey pkgKey
|
||||||
manifest <- flip runReaderT settings $ (snd <$> getManifest pkgId pkgVersion) >>= \bs ->
|
manifest <- flip runReaderT settings $ (snd <$> getManifest pkgId pkgVersion) >>= \bs ->
|
||||||
runConduit $ bs .| CL.foldMap BS.fromStrict
|
runConduit $ bs .| CL.foldMap BS.fromStrict
|
||||||
|
icon <- loadIcon pkgVersion pkgId
|
||||||
pure $ PackageRes
|
pure $ PackageRes
|
||||||
{ packageResIcon = basicRender $ IconsR pkgId
|
{ packageResIcon = encodeBase64 icon
|
||||||
-- pass through raw JSON Value, we have checked its correct parsing above
|
-- pass through raw JSON Value, we have checked its correct parsing above
|
||||||
, packageResManifest = unsafeFromJust . decode $ manifest
|
, packageResManifest = unsafeFromJust . decode $ manifest
|
||||||
, packageResCategories = categoryName <$> pkgCategories
|
, packageResCategories = categoryName <$> pkgCategories
|
||||||
@@ -346,6 +349,10 @@ getPackageListR = do
|
|||||||
constructDependenciesApiRes deps = fmap (\(depKey, depTitle, depVersion) -> do
|
constructDependenciesApiRes deps = fmap (\(depKey, depTitle, depVersion) -> do
|
||||||
let depId = unPkgRecordKey depKey
|
let depId = unPkgRecordKey depKey
|
||||||
(depId, DependencyRes { dependencyResTitle = depTitle, dependencyResIcon = (basicRender $ IconsR depId) <> [i|?spec==#{depVersion}|]})) deps
|
(depId, DependencyRes { dependencyResTitle = depTitle, dependencyResIcon = (basicRender $ IconsR depId) <> [i|?spec==#{depVersion}|]})) deps
|
||||||
|
loadIcon :: (Monad m, MonadResource m, MonadReader r m, Has PkgRepo r) => Version -> PkgId -> m ByteString
|
||||||
|
loadIcon version pkg = do
|
||||||
|
(_, _, src) <- getIcon pkg version
|
||||||
|
runConduit $ src .| CL.foldMap id
|
||||||
|
|
||||||
basicRender :: RenderRoute a => Route a -> Text
|
basicRender :: RenderRoute a => Route a -> Text
|
||||||
basicRender = TL.toStrict
|
basicRender = TL.toStrict
|
||||||
|
|||||||
Reference in New Issue
Block a user