git.iko.soy/rowtype-yoga/psfp
on 557f5b0 help sign in
51 lines 1.5 kB history raw
1module Main where
3import Prelude
5import Data.Int (fromString)
6import Data.Maybe (fromMaybe)
7import Effect (Effect)
8import Effect.Class.Console (info)
9import Node.Encoding (Encoding(..))
10import Node.Express.App (App, listenHttp, listenHttps, use)
12import Node.Express.Middleware.Static (static)
13import Node.FS.Sync (readTextFile)
14import Node.HTTP (Server)
15import Node.Process (lookupEnv)
17main ∷ Effect Server
18main = do
19 serverSetup makeApp
21makeApp ∷ App
22makeApp = do
23 use $ static "assets"
24 -- useOnError (errorHandler log)
26data CertificatesToUse
27 = UseLocalCertificates
28 | DoNotUseLocalCertificates
30parseCertificatesToUse :: String -> CertificatesToUse
31parseCertificatesToUse = case _ of
32 "LOCAL" -> UseLocalCertificates
33 _ -> DoNotUseLocalCertificates
35serverSetup ∷ App -> Effect Server
36serverSetup app = do
37 maybePortString <- lookupEnv "PORT"
38 let port = maybePortString >>= fromString # fromMaybe 14188
39 useLocalCertificates <- fromMaybe DoNotUseLocalCertificates <<< map parseCertificatesToUse <$> lookupEnv "CERTS"
40 listen <- case useLocalCertificates of
41 UseLocalCertificates -> do
42 httpsOptions <- makeHttpsOptions
43 pure $ listenHttps app (port ∷ Int) httpsOptions
44 DoNotUseLocalCertificates ->
45 pure $ listenHttp app port
46 listen \_ -> info $ "psfp server started on port " <> show port
47 where
48 makeHttpsOptions = do
49 key <- readTextFile UTF8 "server.key"
50 cert <- readTextFile UTF8 "server.cert"
51 pure { key, cert }