44 lines
1.5 KiB
Haskell
44 lines
1.5 KiB
Haskell
{-# LANGUAGE OverloadedStrings #-}
|
|
|
|
module Server where
|
|
|
|
import Config
|
|
import Control.Concurrent (forkIO)
|
|
import Database.MongoDB
|
|
import Network.Wai.Handler.Warp (defaultSettings, setPort)
|
|
import Network.Wai.Handler.WarpTLS (runTLS, tlsSettings)
|
|
import Web.Scotty
|
|
import ZGoBackend
|
|
|
|
main :: IO ()
|
|
main = do
|
|
putStrLn "Reading config..."
|
|
loadedConfig <- loadZGoConfig "zgo.cfg"
|
|
let myTlsSettings =
|
|
if c_useTls loadedConfig
|
|
then Just $
|
|
tlsSettings (c_certificate loadedConfig) (c_key loadedConfig)
|
|
else Nothing
|
|
putStrLn "Starting Server..."
|
|
pipe <- connect $ host (c_dbHost loadedConfig)
|
|
j <-
|
|
access
|
|
pipe
|
|
master
|
|
(c_dbName loadedConfig)
|
|
(auth (c_dbUser loadedConfig) (c_dbPassword loadedConfig))
|
|
if j
|
|
then putStrLn "Connected to MongoDB!"
|
|
else fail "MongoDB connection failed!"
|
|
_ <- forkIO (setInterval 60 (checkZcashPrices pipe (c_dbName loadedConfig)))
|
|
_ <- forkIO (setInterval 75 (scanZcash loadedConfig pipe))
|
|
_ <- forkIO (setInterval 90 (scanPayments loadedConfig pipe))
|
|
_ <- forkIO (setInterval 60 (checkPayments pipe (c_dbName loadedConfig)))
|
|
_ <- forkIO (setInterval 60 (expireOwners pipe (c_dbName loadedConfig)))
|
|
_ <- forkIO (setInterval 60 (updateLogins pipe loadedConfig))
|
|
let appRoutes = routes pipe loadedConfig
|
|
case myTlsSettings of
|
|
Nothing -> scotty (c_port loadedConfig) appRoutes
|
|
Just tls -> do
|
|
apiCore <- scottyApp appRoutes
|
|
runTLS tls (setPort (c_port loadedConfig) defaultSettings) apiCore
|