This commit is contained in:
Lucy Cifferello
2020-08-19 11:21:32 -06:00
parent b29ed6cade
commit 38b65166a9
3 changed files with 17 additions and 15 deletions

View File

@@ -32,7 +32,7 @@ app-compatibility-path: "_env:APP_COMPATIBILITY_CONFIG:/etc/start9/registry/comp
resources-path: "_env:RESOURCES_PATH:/var/www/html/resources" resources-path: "_env:RESOURCES_PATH:/var/www/html/resources"
ssl-path: "_env:SSL_PATH:/var/ssl" ssl-path: "_env:SSL_PATH:/var/ssl"
registry-hostname: "_env:REGISTRY_HOSTNAME:registry.start9labs.com" registry-hostname: "_env:REGISTRY_HOSTNAME:registry.start9labs.com"
enable-tor: "false" tor-port: "_env:TOR_PORT:447"
database: database:
database: "_env:PG_DATABASE:start9_registry" database: "_env:PG_DATABASE:start9_registry"

View File

@@ -34,7 +34,7 @@ import Database.Persist.Postgresql (createPostgresqlPool, pg
import Language.Haskell.TH.Syntax (qLocation) import Language.Haskell.TH.Syntax (qLocation)
import Network.Wai import Network.Wai
import Network.Wai.Handler.Warp (Settings, defaultSettings, defaultShouldDisplayException, import Network.Wai.Handler.Warp (Settings, defaultSettings, defaultShouldDisplayException,
getPort, setHost, setOnException, setPort, run) getPort, setHost, setOnException, setPort, runSettings)
import Network.Wai.Handler.WarpTLS import Network.Wai.Handler.WarpTLS
import Network.Wai.Middleware.AcceptOverride import Network.Wai.Middleware.AcceptOverride
import Network.Wai.Middleware.Autohead import Network.Wai.Middleware.Autohead
@@ -145,9 +145,9 @@ makeAuthWare _ app req res = next
next = app req res next = app req res
-- | Warp settings for the given foundation value. -- | Warp settings for the given foundation value.
warpSettings :: RegistryCtx -> Settings warpSettings :: AppPort -> RegistryCtx -> Settings
warpSettings foundation = warpSettings port foundation =
setPort (fromIntegral . appPort $ appSettings foundation) setPort (fromIntegral port)
$ setHost (appHost $ appSettings foundation) $ setHost (appHost $ appSettings foundation)
$ setOnException (\_req e -> $ setOnException (\_req e ->
when (defaultShouldDisplayException e) $ messageLoggerSource when (defaultShouldDisplayException e) $ messageLoggerSource
@@ -181,7 +181,7 @@ startApp :: RegistryCtx -> IO ()
startApp foundation = do startApp foundation = do
-- set up ssl certificates -- set up ssl certificates
putStrLn @Text "Setting up SSL" putStrLn @Text "Setting up SSL"
_ <- setupSsl $ appSettings foundation -- _ <- setupSsl $ appSettings foundation
putStrLn @Text "SSL Setup Complete" putStrLn @Text "SSL Setup Complete"
-- certbot renew loop -- certbot renew loop
@@ -204,11 +204,11 @@ startWeb foundation = do
startWeb' app = do startWeb' app = do
let AppSettings{..} = appSettings foundation let AppSettings{..} = appSettings foundation
putStrLn @Text $ "Launching Web Server on port " <> show appPort putStrLn @Text $ "Launching Web Server on port " <> show appPort
torAction <- async $ run (fromIntegral appPort) app torAction <- async $ runSettings (warpSettings torPort foundation) app
action <- async $ runTLS (tlsSettings sslCertLocation sslKeyLocation) action <- async $ runTLS (tlsSettings sslCertLocation sslKeyLocation)
(warpSettings foundation) (warpSettings appPort foundation)
app app
let actions = (,) action torAction let actions = (action, torAction)
setWebProcessThreadId (join (***) asyncThreadId actions) foundation setWebProcessThreadId (join (***) asyncThreadId actions) foundation
void $ both waitCatch actions void $ both waitCatch actions
@@ -232,17 +232,16 @@ shutdownAll threadIds = do
shutdownWeb :: RegistryCtx -> IO () shutdownWeb :: RegistryCtx -> IO ()
shutdownWeb RegistryCtx{..} = do shutdownWeb RegistryCtx{..} = do
threadIds <- takeMVar appWebServerThreadId threadIds <- takeMVar appWebServerThreadId
_ <- both killThread threadIds void $ both killThread threadIds
pure ()
-------------------------------------------------------------- --------------------------------------------------------------
-- Functions for DevelMain.hs (a way to run the RegistryCtx from GHCi) -- Functions for DevelMain.hs (a way to run the RegistryCtx from GHCi)
-------------------------------------------------------------- --------------------------------------------------------------
getApplicationRepl :: IO (Int, RegistryCtx, Application) getApplicationRepl :: AppPort -> IO (Int, RegistryCtx, Application)
getApplicationRepl = do getApplicationRepl port = do
foundation <- getAppSettings >>= makeFoundation foundation <- getAppSettings >>= makeFoundation
wsettings <- getDevSettings $ warpSettings foundation wsettings <- getDevSettings $ warpSettings port foundation
app1 <- makeApplication foundation app1 <- makeApplication foundation
return (getPort wsettings, foundation, app1) return (getPort wsettings, foundation, app1)

View File

@@ -31,11 +31,12 @@ import Data.Yaml.Config
-- | Runtime settings to configure this application. These settings can be -- | Runtime settings to configure this application. These settings can be
-- loaded from various sources: defaults, environment variables, config files, -- loaded from various sources: defaults, environment variables, config files,
-- theoretically even a database. -- theoretically even a database.
type AppPort = Word16
data AppSettings = AppSettings data AppSettings = AppSettings
{ appDatabaseConf :: PostgresConf { appDatabaseConf :: PostgresConf
, appHost :: HostPreference , appHost :: HostPreference
-- ^ Host/interface the server should bind to. -- ^ Host/interface the server should bind to.
, appPort :: Word16 , appPort :: AppPort
-- ^ Port to listen on -- ^ Port to listen on
, appIpFromHeader :: Bool , appIpFromHeader :: Bool
-- ^ Get the IP address from the header when logging. Useful when sitting -- ^ Get the IP address from the header when logging. Useful when sitting
@@ -53,6 +54,7 @@ data AppSettings = AppSettings
, sslKeyLocation :: FilePath , sslKeyLocation :: FilePath
, sslCsrLocation :: FilePath , sslCsrLocation :: FilePath
, sslCertLocation :: FilePath , sslCertLocation :: FilePath
, torPort :: AppPort
} }
instance FromJSON AppSettings where instance FromJSON AppSettings where
@@ -67,6 +69,7 @@ instance FromJSON AppSettings where
resourcesDir <- o .: "resources-path" resourcesDir <- o .: "resources-path"
sslPath <- o .: "ssl-path" sslPath <- o .: "ssl-path"
registryHostname <- o .: "registry-hostname" registryHostname <- o .: "registry-hostname"
torPort <- o .: "tor-port"
let sslKeyLocation = sslPath </> "key.pem" let sslKeyLocation = sslPath </> "key.pem"
let sslCsrLocation = sslPath </> "certificate.csr" let sslCsrLocation = sslPath </> "certificate.csr"