hbs2-browser assets

This commit is contained in:
Dmitry Zuikov 2024-03-25 15:21:26 +03:00
parent cb2f795555
commit 90c3ea2bf0
8 changed files with 32 additions and 2 deletions

1
.gitignore vendored
View File

@ -11,3 +11,4 @@ cabal.project.local
.backup/ .backup/
.hbs2-git/state.db .hbs2-git/state.db
bin/

View File

@ -24,7 +24,10 @@ library
-- other-modules: -- other-modules:
-- other-extensions: -- other-extensions:
build-depends: base, file-embed build-depends:
base
, bytestring
, file-embed
hs-source-dirs: lib hs-source-dirs: lib
default-language: GHC2021 default-language: GHC2021

View File

@ -1 +1,11 @@
{-# Language TemplateHaskell #-}
module HBS2.Peer.Browser.Assets where module HBS2.Peer.Browser.Assets where
import Data.FileEmbed
import Data.ByteString
cssDir :: [(FilePath, ByteString)]
cssDir = $(embedDir "assets")

View File

@ -10,11 +10,14 @@ import HBS2.Data.Types.Refs
import HBS2.Merkle import HBS2.Merkle
import HBS2.Peer.Proto import HBS2.Peer.Proto
import HBS2.Peer.Proto.LWWRef import HBS2.Peer.Proto.LWWRef
import HBS2.Peer.Browser.Assets
import HBS2.Net.Auth.Schema import HBS2.Net.Auth.Schema
import HBS2.Data.Types.SignedBox import HBS2.Data.Types.SignedBox
import HBS2.Events import HBS2.Events
import HBS2.Storage.Operations.ByteString import HBS2.Storage.Operations.ByteString
import PeerTypes import PeerTypes
import PeerConfig import PeerConfig
import RefLog ( doRefLogBroadCast ) import RefLog ( doRefLogBroadCast )
@ -24,6 +27,7 @@ import Data.Config.Suckless
import Data.ByteString.Lazy qualified as LBS import Data.ByteString.Lazy qualified as LBS
import Network.HTTP.Types.Status import Network.HTTP.Types.Status
import Network.Wai.Middleware.RequestLogger import Network.Wai.Middleware.RequestLogger
import Network.Wai.Middleware.StaticEmbedded
import Text.InterpolatedString.Perl6 (qc) import Text.InterpolatedString.Perl6 (qc)
import Web.Scotty import Web.Scotty
@ -69,6 +73,7 @@ httpWorker (PeerConfig syn) pmeta e = do
sto <- getStorage sto <- getStorage
let port' = runReader (cfgValue @PeerHttpPortKey) syn <&> fromIntegral let port' = runReader (cfgValue @PeerHttpPortKey) syn <&> fromIntegral
let bro = runReader (cfgValue @PeerBrowser) syn == FeatureOn
penv <- ask penv <- ask
maybe1 port' none $ \port -> liftIO do maybe1 port' none $ \port -> liftIO do
@ -194,6 +199,13 @@ httpWorker (PeerConfig syn) pmeta e = do
get "/metadata" do get "/metadata" do
raw $ serialise $ pmeta raw $ serialise $ pmeta
when bro do
middleware (static cssDir)
get "/browser" do
text "BRO"
status status200
put "/" do put "/" do
-- FIXME: optional-header-based-authorization -- FIXME: optional-header-based-authorization
-- signed nonce + peer key? -- signed nonce + peer key?

View File

@ -38,6 +38,7 @@ data PeerHttpPortKey
data PeerTcpProbeWaitKey data PeerTcpProbeWaitKey
data PeerUseHttpDownload data PeerUseHttpDownload
data PeerBrainsDBPath data PeerBrainsDBPath
data PeerBrowser
instance Monad m => HasConf (ReaderT PeerConfig m) where instance Monad m => HasConf (ReaderT PeerConfig m) where
getConf = asks (\(PeerConfig syn) -> syn) getConf = asks (\(PeerConfig syn) -> syn)
@ -65,6 +66,8 @@ data PeerKnownPeersFile
instance Monad m => HasCfgKey PeerKnownPeersFile (Set String) m where instance Monad m => HasCfgKey PeerKnownPeersFile (Set String) m where
key = "known-peers-file" key = "known-peers-file"
instance Monad m => HasCfgKey PeerBrowser a m where
key = "browser"
instance {-# OVERLAPPABLE #-} (HasConf m, HasCfgKey a b m) => HasCfgValue a FeatureSwitch m where instance {-# OVERLAPPABLE #-} (HasConf m, HasCfgKey a b m) => HasCfgValue a FeatureSwitch m where
cfgValue = lastDef FeatureOff . val <$> getConf cfgValue = lastDef FeatureOff . val <$> getConf

View File

@ -71,6 +71,7 @@ common common-deps
, http-types , http-types
, wai , wai
, wai-extra , wai-extra
, wai-middleware-static-embedded
, unliftio , unliftio
, unliftio-core , unliftio-core
, unix , unix