summaryrefslogtreecommitdiff
path: root/web/router.hoon
blob: fdb6c432e875e5b4798330a1324c70ccd5e8b695 (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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/-  sur=zodiac
/+  server, metamask, sr=sortug
/=  login-page  /web/index

|_  [=bowl:gall eyre-id=@ta req=inbound-request:eyre state=versioned-state:sur]  

++  session-timeout  ~d300
++  session-cookie-string
  |=  [session=@uv extend=?]
  ^-  @t
  %-  crip
  =;  max-age=tape
    :: "urbauth-{(scow %p src.bowl)}={(scow %uv session)}; Path=/; Max-Age={max-age}"
    "ucm-{(scow %p src.bowl)}={(scow %uv session)}; Path=/; Max-Age={max-age}"
  %+  scow:parsing:sr  %ud
  ?.  extend  0
  (div (msec:milly session-timeout) 1.000)

++  get-file-at
  |=  [base=path file=path ext=@ta]
  ^-  (unit octs)
  =/  =path
    :*  (scot %p our.bowl)
        q.byk.bowl
        (scot %da now.bowl)
        (snoc (weld base file) ext)
    ==
  ?.  .^(? %cu path)  ~
  %-  some
  %-  as-octs:mimes:html
  .^(@ %cx path)

++  handle-get-request
  |=  [headers=header-list:http request-line:server]
  ^-  simple-payload:http
  ?~  ext  $(ext `%html, site [%index ~])
  ?:  ?=([%zodiac *] site)  $(site +.site)
  ::  serve dynamic session.js
  ::
  ?:  =([/session `%js] [site ext])
    %-  js-response:gen:server
    %-  as-octt:mimes:html
    """
    window.ship = '{(scow %p src.bowl)}';
    """
    =/  file=(unit octs)
      (get-file-at /web site u.ext)
    ?~  file  ~&  "file not found"  not-found:gen:server
    ?+  u.ext  not-found:gen:server
      %html  (html-response:gen:server u.file)
      %js    (js-response:gen:server u.file)
      %css   (css-response:gen:server u.file)
      %png   (png-response:gen:server u.file)
      %woff  (woff-response:gen:server u.file)
      %woff2  (woff2-response:gen:server u.file)
    ==


++  ebail
  ^-  (list card:agent:gall)
  (send-response pbail)
++  egive
  |=  pl=simple-payload:http
  ^-  (list card:agent:gall)
  (send-response pl)
++  pbail
  %-  html-response:gen:server
  %-  manx-to-octs:server
      manx-bail
++  manx-bail  ^-  manx  ;div:"404"
++  manx-payload
  |=  =manx
  ^-  simple-payload:http
  %-  html-response:gen:server
  %-  manx-to-octs:server  manx

++  send-response
  |=  =simple-payload:http
  =/  cookie  ['set-cookie' (session-cookie-string 0vublog .y)]
  =.  headers.response-header.simple-payload
    [cookie headers.response-header.simple-payload]  
  %+  give-simple-payload:app:server  eyre-id  simple-payload  
  

++  route
  =/  metalib  ~(. metamask [sessions.state bowl])
  =/  rl  (parse-request-line:server url.request.req)
  =/  sitepath=path  /[(head site.rl)]
  =/  pat=(pole knot)  site.rl
  ?+  pat  ebail  
    [%zodiac %metamask rest=*]  (serve-metamask-challenge:metalib eyre-id)
    [%zodiac %auth rest=*]      (process-metamask-auth:metalib eyre-id body.request.req)
    [%zodiac ~]                 (send-response (manx-payload (login-page bowl)))
    :: [site=@t *]                 (send-response (handle-get-request header-list.request.req rl))
  ==

++  eyre-binding-card
|=  =path
  ~&  >  adding-binding=[path dap.bowl]
  [%pass /eyre/connect %arvo %e %connect [~ path] dap.bowl]  
--