summaryrefslogtreecommitdiff
path: root/web/router.hoon
diff options
context:
space:
mode:
Diffstat (limited to 'web/router.hoon')
-rw-r--r--web/router.hoon159
1 files changed, 93 insertions, 66 deletions
diff --git a/web/router.hoon b/web/router.hoon
index f5fc388..c554e41 100644
--- a/web/router.hoon
+++ b/web/router.hoon
@@ -1,22 +1,14 @@
-/- sur=zodiac
-/+ server, metamask, sr=sortug
+/- sur=neyre, coki
+/+ server, metamask, sr=sortug, cokil=coki
/= login-page /web/login
/= index-page /web/index
/= sigil-html /web/sigil/sigil
-|_ [=bowl:gall eyre-id=@ta req=inbound-request:eyre state=versioned-state:sur]
-+* metalib ~(. metamask [sessions.state bowl])
-++ 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)
+=+ base-path=`path`/coki
+|_ [=bowl:gall eyre-id=@ta req=inbound-request:eyre state=versioned-state:sur =sessions:coki]
+
++* cokilib ~(. cokil [sessions bowl])
+ metalib ~(. metamask [sessions bowl])
++ get-file-at
|= [base=path file=path ext=@ta]
@@ -32,30 +24,14 @@
%- 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)
- ==
+
+ ++ serve-json |= jon=json
+ (send-response (json-response:gen:server jon))
+++ serve-error |= [status=@ud msg=@t]
+ =/ octs (as-octs:mimes:html msg)
+ =/ headers=header-list:http [['content-type' 'text/plain'] ~]
+ =/ sp=simple-payload:http [[status headers] `octs]
+ (send-response sp)
++ ebail
@@ -78,17 +54,14 @@
++ 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
++ validate-coki
=/ coki (get-header:http 'cookie' header-list.request.req)
?~ coki ~
- (validate-coki:metalib u.coki)
+ (validate-coki:cokilib u.coki)
-++ login-ajax
+++ login-ajax |= base-slug=@tas
=/ referer (get-header:http 'referer' header-list.request.req)
~& referer=referer
?~ referer .n
@@ -96,33 +69,88 @@
?~ parsed .n
=/ =path q.q.u.parsed
~& login-ajax=path
- ?= [%zodiac %login ~] path
-++ route
+ ?~ path .n
+ =/ hd i.path =/ tl t.path
+ ~& >> [slug=base-slug hd tl]
+ =/ same-base .=(i.path base-slug)
+ ?& same-base ?=([%login ~] tl) ==
+
+++ route ^- (list card:agent:gall)
+ =. base-path ?: ?=([%coki ~] base-path) /[dap.bowl] base-path
+ =/ bpath (spat base-path)
+
+ =/ base-slug =/ bp `(list @t)`base-path ?~ bp dap.bowl i.bp
+ =/ subpaths /[base-slug]
=/ rl (parse-request-line:server url.request.req)
- =/ sitepath=path /[(head site.rl)]
+ =. site.rl ?~ site.rl site.rl ?: .=(base-slug i.site.rl) t.site.rl site.rl
=/ pat=(pole knot) site.rl
- ?: ?=([%zodiac %login ~] pat) serve-login-page
- ?: login-ajax (serve-unauthed pat)
+ ~& > pat=pat
+ ~& [url.request.req base-path base-slug bpath pat subpaths src.bowl]
+
+ |^
+ ?: ?=([%login ~] pat) serve-login-page
+ ?: (login-ajax base-slug) serve-unauthed
=/ muser validate-coki
- ?~ muser redirect-to-login
+ ~& >>> muser=muser
+ ?~ muser (redirect (weld subpaths /login))
=. src.bowl u.muser
+ serve-authed
+
+ ++ serve-authed
?+ pat ebail
- [%zodiac %logout *] (logout:metalib eyre-id (need (get-header:http 'cookie' header-list.request.req)))
- [%zodiac ~] serve-root
+ [%logout *] (logout:cokilib eyre-id (need (get-header:http 'cookie' header-list.request.req)) bpath)
+ :: [~] serve-root
+ ~ serve-root
:: [site=@t *] (send-response (handle-get-request header-list.request.req rl))
+ ::
+ [%poke *] ~& >> bowl=bowl (redirect base-path)
+ ==
+ ++ serve-unauthed
+ ?+ pat ebail
+ [%sigil point=@ ~] (serve-sigil point.pat)
+ [%metamask *] (serve-metamask-challenge:metalib eyre-id)
+ [%auth *]
+ =/ res (process-metamask-auth:metalib eyre-id body.request.req bpath base-slug)
+ ?- -.res %& +.res %| (serve-error +.res) ==
+
==
-++ serve-unauthed |= pat=(pole knot)
-?+ pat ebail
- [%zodiac %metamask rest=*] (serve-metamask-challenge:metalib eyre-id)
- [%zodiac %auth rest=*] (process-metamask-auth:metalib eyre-id body.request.req)
- [%zodiac %sigil point=@ ~] (serve-sigil point.pat)
-==
-++ redirect-to-login
- (send-response (redirect:gen:server '/zodiac/login'))
-++ serve-root
- (send-response (manx-payload (index-page bowl)))
+ ++ redirect |= =path
+ (send-response (redirect:gen:server (spat path)))
+ ++ serve-root
+ (send-response (manx-payload (index-page bowl (trip base-slug))))
+
+ ++ serve-login-page
+ (send-response (manx-payload (login-page bowl (trip base-slug) (trip (spat base-path)))))
+
+ ++ handle-get-request
+ |= [headers=header-list:http request-line:server]
+ ^- simple-payload:http
+ ?~ ext $(ext `%html, site [%index ~])
+ =/ pat `(pole knot)`site
+ ?: ?&(?=([slug=@t *] pat) .=(slug.pat base-slug)) $(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)
+ ==
+
+
+ --
::
-++ serve-login-page (send-response (manx-payload (login-page bowl)))
++ serve-sigil |= param=@t
=/ sip (slaw:parsing:sr %ud param)
?~ sip ebail
@@ -130,9 +158,8 @@
(send-response (manx-payload sigil-div))
-++ eyre-binding-card
-|= =path
- ~& > adding-binding=[path dap.bowl]
+++ eyre-binding-card |= =path
+ ~& >> adding-binding=[path dap.bowl]
[%pass /eyre/connect %arvo %e %connect [~ path] dap.bowl]
--