/- sur=zodiac /+ server, metamask, sr=sortug /= 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) ++ 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 ++ validate-coki =/ coki (get-header:http 'cookie' header-list.request.req) ?~ coki ~ (validate-coki:metalib u.coki) ++ login-ajax =/ referer (get-header:http 'referer' header-list.request.req) ~& referer=referer ?~ referer .n =/ parsed=(unit purl:eyre) (rush u.referer link:parsing:sr) ?~ parsed .n =/ =path q.q.u.parsed ~& login-ajax=path ?= [%zodiac %login ~] path ++ route =/ rl (parse-request-line:server url.request.req) =/ sitepath=path /[(head site.rl)] =/ pat=(pole knot) site.rl ?: ?=([%zodiac %login ~] pat) serve-login-page ?: login-ajax (serve-unauthed pat) =/ muser validate-coki ?~ muser redirect-to-login =. src.bowl u.muser ?+ pat ebail [%zodiac %logout *] (logout:metalib eyre-id (need (get-header:http 'cookie' header-list.request.req))) [%zodiac ~] serve-root :: [site=@t *] (send-response (handle-get-request header-list.request.req rl)) == ++ 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))) :: ++ serve-login-page (send-response (manx-payload (login-page bowl))) ++ serve-sigil |= param=@t =/ sip (slaw:parsing:sr %ud param) ?~ sip ebail =/ sigil-div (sigil-html u.sip) (send-response (manx-payload sigil-div)) ++ eyre-binding-card |= =path ~& > adding-binding=[path dap.bowl] [%pass /eyre/connect %arvo %e %connect [~ path] dap.bowl] --