/- sur=neyre, coki /+ server, metamask, sr=sortug, cokil=coki /= login-page /web/login /= index-page /web/index /= sigil-html /web/sigil/sigil =+ 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] ^- (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) ++ 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 ^- (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 %+ give-simple-payload:app:server eyre-id simple-payload ++ validate-coki =/ coki (get-header:http 'cookie' header-list.request.req) ?~ coki ~ (validate-coki:cokilib u.coki) ++ login-ajax |= base-slug=@tas =/ 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 ?~ 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) =. site.rl ?~ site.rl site.rl ?: .=(base-slug i.site.rl) t.site.rl site.rl =/ pat=(pole knot) site.rl ~& > 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=muser ?~ muser (redirect (weld subpaths /login)) =. src.bowl u.muser serve-authed ++ serve-authed ?+ pat ebail [%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) == == ++ 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-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] --