mirror of
https://github.com/Start9Labs/registry.git
synced 2026-03-26 02:11:53 +00:00
account for icon types
This commit is contained in:
committed by
Keagan McClelland
parent
eca229116b
commit
72bc7e01ae
@@ -118,6 +118,7 @@ makeApplication foundation = do
|
|||||||
|
|
||||||
dynamicCorsResourcePolicy :: Request -> Maybe CorsResourcePolicy
|
dynamicCorsResourcePolicy :: Request -> Maybe CorsResourcePolicy
|
||||||
dynamicCorsResourcePolicy req = Just . policy . lookup hOrigin $ requestHeaders req
|
dynamicCorsResourcePolicy req = Just . policy . lookup hOrigin $ requestHeaders req
|
||||||
|
$logInfo $ show $ requestHeaders req
|
||||||
where
|
where
|
||||||
policy o = simpleCorsResourcePolicy
|
policy o = simpleCorsResourcePolicy
|
||||||
{ corsOrigins = (\o' -> ([o'], True)) <$> o
|
{ corsOrigins = (\o' -> ([o'], True)) <$> o
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ searchServices category pageItems offset' query = select $ do
|
|||||||
`innerJoin` table @ServiceCategory
|
`innerJoin` table @ServiceCategory
|
||||||
`on` (\(s :& sc) ->
|
`on` (\(s :& sc) ->
|
||||||
sc ^. ServiceCategoryServiceId ==. s ^. SAppId)
|
sc ^. ServiceCategoryServiceId ==. s ^. SAppId)
|
||||||
|
-- if there is a cateogry, only search in category
|
||||||
|
-- weight title, short, long (bitcoin should equal Bitcoin Core)
|
||||||
where_ $ sc ^. ServiceCategoryCategoryName ==. val category
|
where_ $ sc ^. ServiceCategoryCategoryName ==. val category
|
||||||
&&. ((service ^. SAppDescShort `ilike` (%) ++. val query ++. (%))
|
&&. ((service ^. SAppDescShort `ilike` (%) ++. val query ++. (%))
|
||||||
||. (service ^. SAppDescLong `ilike` (%) ++. val query ++. (%))
|
||. (service ^. SAppDescLong `ilike` (%) ++. val query ++. (%))
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
{-# LANGUAGE TypeApplications #-}
|
{-# LANGUAGE TypeApplications #-}
|
||||||
{-# LANGUAGE RecordWildCards #-}
|
{-# LANGUAGE RecordWildCards #-}
|
||||||
{-# LANGUAGE TemplateHaskell #-}
|
{-# LANGUAGE TemplateHaskell #-}
|
||||||
|
{-# LANGUAGE DeriveGeneric #-}
|
||||||
|
{-# LANGUAGE ScopedTypeVariables #-}
|
||||||
|
|
||||||
module Handler.Icons where
|
module Handler.Icons where
|
||||||
|
|
||||||
@@ -24,6 +26,18 @@ import Conduit
|
|||||||
import qualified Data.ByteString.Lazy as BS
|
import qualified Data.ByteString.Lazy as BS
|
||||||
import Network.HTTP.Types
|
import Network.HTTP.Types
|
||||||
import Lib.Types.AppIndex
|
import Lib.Types.AppIndex
|
||||||
|
import Data.Aeson
|
||||||
|
import System.FilePath.Posix
|
||||||
|
|
||||||
|
data IconType = PNG | JPG | JPEG | SVG
|
||||||
|
deriving (Eq, Show, Generic, Read)
|
||||||
|
instance ToJSON IconType
|
||||||
|
instance FromJSON IconType
|
||||||
|
|
||||||
|
-- >>> readMaybe $ ixt :: Maybe IconType
|
||||||
|
-- Just PNG
|
||||||
|
ixt :: Text
|
||||||
|
ixt = toS $ toUpper <$> drop 1 ".png"
|
||||||
|
|
||||||
getIconsR :: AppIdentifier -> Handler TypedContent
|
getIconsR :: AppIdentifier -> Handler TypedContent
|
||||||
getIconsR appId = do
|
getIconsR appId = do
|
||||||
@@ -39,7 +53,28 @@ getIconsR appId = do
|
|||||||
-- (_, Just hout, _, _) <- liftIO (createProcess $ iconBs { std_out = CreatePipe })
|
-- (_, Just hout, _, _) <- liftIO (createProcess $ iconBs { std_out = CreatePipe })
|
||||||
-- respondSource typePlain (runConduit $ yieldMany () [iconBs])
|
-- respondSource typePlain (runConduit $ yieldMany () [iconBs])
|
||||||
-- respondSource typePlain $ sourceHandle hout .| awaitForever sendChunkBS
|
-- respondSource typePlain $ sourceHandle hout .| awaitForever sendChunkBS
|
||||||
respondSource typePlain (sendChunkBS =<< handleS9ErrT (getIcon appMgrDir p ext))
|
manifest' <- handleS9ErrT $ getManifest appMgrDir appsDir ext
|
||||||
|
manifest <- case eitherDecode $ BS.fromStrict manifest' of
|
||||||
|
Left e -> do
|
||||||
|
$logError "could not parse service manifest!"
|
||||||
|
$logError (show e)
|
||||||
|
sendResponseStatus status500 ("Internal Server Error" :: Text)
|
||||||
|
Right a -> pure a
|
||||||
|
mimeType <- case serviceManifestIcon manifest of
|
||||||
|
Nothing -> pure typePng
|
||||||
|
Just a -> do
|
||||||
|
let (_, iconExt) = splitExtension $ toS a
|
||||||
|
let x = toUpper <$> drop 1 iconExt
|
||||||
|
case readMaybe $ toS x of
|
||||||
|
Nothing -> do
|
||||||
|
$logInfo $ "unknown icon extension type: " <> show x <> ". Sending back typePlain."
|
||||||
|
pure typePlain
|
||||||
|
Just iconType -> case iconType of
|
||||||
|
PNG -> pure typePng
|
||||||
|
SVG -> pure typeSvg
|
||||||
|
JPG -> pure typeJpeg
|
||||||
|
JPEG -> pure typeJpeg
|
||||||
|
respondSource mimeType (sendChunkBS =<< handleS9ErrT (getIcon appMgrDir p ext))
|
||||||
where ext = Extension (toS appId) :: Extension "s9pk"
|
where ext = Extension (toS appId) :: Extension "s9pk"
|
||||||
|
|
||||||
getLicenseR :: AppIdentifier -> Handler TypedContent
|
getLicenseR :: AppIdentifier -> Handler TypedContent
|
||||||
|
|||||||
@@ -167,6 +167,7 @@ data ServiceManifest = ServiceManifest
|
|||||||
, serviceManifestDescriptionLong :: Text
|
, serviceManifestDescriptionLong :: Text
|
||||||
, serviceManifestDescriptionShort :: Text
|
, serviceManifestDescriptionShort :: Text
|
||||||
, serviceManifestReleaseNotes :: Text
|
, serviceManifestReleaseNotes :: Text
|
||||||
|
, serviceManifestIcon :: Maybe Text
|
||||||
, serviceManifestAlerts :: HM.HashMap ServiceAlert (Maybe Text)
|
, serviceManifestAlerts :: HM.HashMap ServiceAlert (Maybe Text)
|
||||||
, serviceManifestDependencies :: HM.HashMap AppIdentifier ServiceDependencyInfo
|
, serviceManifestDependencies :: HM.HashMap AppIdentifier ServiceDependencyInfo
|
||||||
} deriving (Show)
|
} deriving (Show)
|
||||||
@@ -177,6 +178,7 @@ instance FromJSON ServiceManifest where
|
|||||||
serviceManifestVersion <- o .: "version"
|
serviceManifestVersion <- o .: "version"
|
||||||
serviceManifestDescriptionLong <- o .: "description" >>= (.: "long")
|
serviceManifestDescriptionLong <- o .: "description" >>= (.: "long")
|
||||||
serviceManifestDescriptionShort <- o .: "description" >>= (.: "short")
|
serviceManifestDescriptionShort <- o .: "description" >>= (.: "short")
|
||||||
|
serviceManifestIcon <- o .: "assets" >>= (.: "icon")
|
||||||
serviceManifestReleaseNotes <- o .: "release-notes"
|
serviceManifestReleaseNotes <- o .: "release-notes"
|
||||||
alerts <- o .: "alerts"
|
alerts <- o .: "alerts"
|
||||||
a <- for (HM.toList alerts) $ \(key, value) -> do
|
a <- for (HM.toList alerts) $ \(key, value) -> do
|
||||||
@@ -200,7 +202,7 @@ instance ToJSON ServiceManifest where
|
|||||||
]
|
]
|
||||||
|
|
||||||
-- >>> eitherDecode testManifest :: Either String ServiceManifest
|
-- >>> eitherDecode testManifest :: Either String ServiceManifest
|
||||||
-- Right (ServiceManifest {serviceManifestId = "embassy-pages", serviceManifestTitle = "Embassy Pages", serviceManifestVersion = 0.1.3, serviceManifestDescriptionLong = "Embassy Pages is a simple web server that uses directories inside File Browser to serve Tor websites.", serviceManifestDescriptionShort = "Create Tor websites, hosted on your Embassy.", serviceManifestReleaseNotes = "Upgrade to EmbassyOS v0.3.0", serviceManifestAlerts = fromList [(INSTALL,Nothing),(UNINSTALL,Nothing),(STOP,Nothing),(RESTORE,Nothing),(START,Nothing)], serviceManifestDependencies = fromList [("filebrowser",ServiceDependencyInfo {serviceDependencyInfoOptional = Nothing, serviceDependencyInfoVersion = >=2.14.1.1 <3.0.0, serviceDependencyInfoDescription = Just "Used to upload files to serve.", serviceDependencyInfoCritical = False})]})
|
-- Right (ServiceManifest {serviceManifestId = "embassy-pages", serviceManifestTitle = "Embassy Pages", serviceManifestVersion = 0.1.3, serviceManifestDescriptionLong = "Embassy Pages is a simple web server that uses directories inside File Browser to serve Tor websites.", serviceManifestDescriptionShort = "Create Tor websites, hosted on your Embassy.", serviceManifestReleaseNotes = "Upgrade to EmbassyOS v0.3.0", serviceManifestIcon = Just "icon.png", serviceManifestAlerts = fromList [(INSTALL,Nothing),(UNINSTALL,Nothing),(STOP,Nothing),(RESTORE,Nothing),(START,Nothing)], serviceManifestDependencies = fromList [("filebrowser",ServiceDependencyInfo {serviceDependencyInfoOptional = Nothing, serviceDependencyInfoVersion = >=2.14.1.1 <3.0.0, serviceDependencyInfoDescription = Just "Used to upload files to serve.", serviceDependencyInfoCritical = False})]})
|
||||||
testManifest :: BS.ByteString
|
testManifest :: BS.ByteString
|
||||||
testManifest = [i|{
|
testManifest = [i|{
|
||||||
"id": "embassy-pages",
|
"id": "embassy-pages",
|
||||||
|
|||||||
Reference in New Issue
Block a user