diff options
Diffstat (limited to 'web/router.hoon')
-rw-r--r-- | web/router.hoon | 159 |
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] -- |