summaryrefslogtreecommitdiff
path: root/web/router.hoon
diff options
context:
space:
mode:
authorpolwex <polwex@sortug.com>2025-06-22 06:14:42 +0700
committerpolwex <polwex@sortug.com>2025-06-22 06:14:42 +0700
commit6dccba9bb5100329209ad01732f9d63f4c4fb43b (patch)
tree140b33d2e25084174fce057056de9dea0e2dcbea /web/router.hoon
metamask login getting there
Diffstat (limited to 'web/router.hoon')
-rw-r--r--web/router.hoon101
1 files changed, 101 insertions, 0 deletions
diff --git a/web/router.hoon b/web/router.hoon
new file mode 100644
index 0000000..fdb6c43
--- /dev/null
+++ b/web/router.hoon
@@ -0,0 +1,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]
+--