blob: 303089bfe97817a2f61ea4f91784848efed99c53 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
module Fig.Web.Secure
( server
) where
import Fig.Prelude
import qualified Network.Wai as Wai
import qualified Network.Wai.Middleware.Static as Wai.Static
import qualified Network.Wai.Handler.Warp as Warp
import qualified Web.Scotty as Sc
import Fig.Bus.Binary.Client
import Fig.Web.Types
import Fig.Web.Utils
import Fig.Web.Auth
import qualified Fig.Web.DB as DB
import qualified Fig.Web.Module.Exchange as Exchange
import qualified Fig.Web.Module.Redeem as Redeem
allBusEvents :: SecureModuleArgs -> BusEventHandlers
allBusEvents args = busEvents . mconcat $ fmap ($ args)
[
]
server :: SecureOptions -> Config -> (Text, Text) -> IO ()
server options cfg busAddr = do
log $ "Web server running on port " <> tshow cfg.port
log "Connecting to database..."
db <- DB.connect cfg
channels <- newChannels
globals <- newGlobals
busClient busAddr
(\cmds -> do
log "Connected to bus!"
let args = ModuleArgs{..}
subscribeBusEvents cmds $ allBusEvents args
Warp.run cfg.port =<< app args
)
(\cmds ev d -> do
let args = ModuleArgs{..}
handleBusEvent (allBusEvents args) ev d
)
(pure ())
app :: SecureModuleArgs -> IO Wai.Application
app args = do
log "Connected! Secure server active."
Sc.scottyApp do
Sc.middleware . Wai.Static.staticPolicy $ mconcat
[ Wai.Static.isNotAbsolute
, Wai.Static.only
[ ("menu", "menu.html")
, ("throwshade", "throwshade.html")
, ("main.css", "main.css")
, ("main.js", "main.js")
]
Wai.Static.<|> Wai.Static.hasPrefix "assets"
Wai.Static.<|> Wai.Static.hasPrefix "newton"
Wai.Static.<|> Wai.Static.hasPrefix "ranch"
, Wai.Static.addBase args.cfg.assetPath
]
onGet "/" do
respondText "this is the secure endpoint"
onGet "/api/status" do
respondText "this is the secure endpoint"
onGet "/api/info" $ authed args \creds -> do
respondText $ creds.user <> " " <> creds.twitchId
Exchange.secure args
Redeem.secure args
Sc.notFound do
respondText "not found"
|