ucm/desk/app/ucm.hoon

330 lines
9.4 KiB
Plaintext
Raw Normal View History

2024-10-06 18:19:22 +00:00
/- sur=ucm, blog-paths, docket
:: XX sss; remove on transition to %4
/+ jon=json, lib=ucm, dbug, *sss, cons=constants, metamask, sr=sortug, apps, web
:: /= router /web/router
::
%- agent:dbug
^- agent:gall
=> |%
+$ versioned-state
$% state-0:sur
==
:: XX move into +* below
+$ card $+(card card:agent:gall)
--
=| versioned-state
=* state -
::
=<
|_ =bowl:gall
+* this .
hd ~(. +> [state bowl])
:: rout ~(. router:router [state bowl])
metalib ~(. metamask [sessions.state bowl])
:: XX sss; remove on transition to state-4
du-paths
=/ du
(du blog-paths ,[%paths ~])
(du pub-paths bowl -:!>(*result:du))
::
++ on-init
^- (quip card _this)
:_ this
:_ ~ (add-eyre-binding [dap.bowl ~])
::
++ on-save
!>(state)
::
++ on-load
|= =vase
^- (quip card _this)
=+ !<(old=versioned-state vase)
?- -.old
%0 :_ this(state old) ~
==
::
++ on-poke
|= [=mark =vase]
=. src.bowl login:metalib
|^
^- (quip card _this)
?+ mark
~|("unexpected poke to {<dap.bowl>} with mark {<mark>}" !!)
::
%noun (handle-poke !<(* vase))
%json (handle-json !<(json vase))
%handle-http-request (serve-http !<([@ta inbound-request:eyre] vase))
== :: end of pokes
++ handle-poke |= a=*
?: ?=([%ui *] a) (handle-ui a)
:: metamask
?: ?=([%meta @] a)
=. sessions (handle-meta:metalib +.a) `this
?: ?=([%auth @p @p @uv] a)
=. sessions (handle-auth:metalib +.a) `this
?: ?=(%sessions a) handle-sess
?: ?=(%chal a) handle-chal
?: ?=([%glob *] a) (handle-glob +.a)
(handle-debug a)
::
++ handle-json |= j=json
=/ =action:sur (de:jon j)
?- -.action
%dash (handle-dash +.action)
%site (handle-site +.action)
==
++ handle-dash |= a=dash-action:sur
?- -.a
%del =. sites (~(del by sites) name.a)
`this
%set
=/ site (~(get by sites) binding.a)
=/ nsite ?~ site *site:sur u.site
=/ ns %= nsite
sitename sitename.a
description description.a
groupname groupname.a
binding binding.a
icon icon.a
home home.a
css css.a
hidden hidden.a
apps apps.a
app-order app-order.a
==
=. sites (~(put by sites) binding.a ns)
:: =/ cards [(add-eyre-binding:hd binding.a) (diff-sites nsite ns)]
=/ cards [(add-eyre-binding:hd binding.a) ~]
[cards this]
==
++ handle-site |= [name=@t a=site-action:sur]
?- -.a
%lol `this
%search `this
==
:: ++ diff-sites |= [sa=site:sur sb=site:sur] ^- (list card)
:: =/ applib ~(. apps [groupname.sb bowl])
:: =, applib
:: =/ a apps.sa =/ b apps.sb
:: %- zing
:: :~ (group-diff sa sb)
:: (blog-diff blog.a blog.b)
:: (chat-diff chat.a chat.b)
:: (forum-diff forum.a forum.b)
:: (radio-diff radio.a radio.b)
:: (wiki-diff wiki.a wiki.b)
:: ==
++ handle-sess
~& >> users.sessions
`this
++ handle-chal
~& >> challenges.sessions
~& "wiping challenges"
=. challenges.sessions *(set @uv)
`this
++ handle-glob |= arg=*
=/ pat (path arg)
=/ ta-now `@ta`(scot %da now.bowl)
:_ this :_ ~
[%pass (weld /glob pat) %arvo %k %fard dap.bowl %make-glob %noun !>(pat)]
::
++ handle-debug |= arg=*
~& debug=arg
=/ applib ~(. apps [%lol bowl])
?: .=(%seed arg)
`this
?: .=(%print arg)
=/ log
=/ l ~(tap by sites)
|- ?~ l ~
=/ site +.i.l
~& site
$(l t.l)
`this
?: .=(%vats arg) ~& show-vats:applib `this
?: .=(%eyre arg) :_ this
=/ cards wipe-eyre-bindings:hd
~& cards=cards
cards
?: .=([%add *] arg)
=/ ssite *site:sur
=/ ms %= ssite
sitename 'My test site'
binding /test1
groupname %my-test-site-3
==
=. sites (~(put by sites) /test1 ms)
`this
?: ?=([%order *] arg)
~& > ordering=arg
=/ pat (path +.arg)
~& > ordering=pat
=/ site (~(get by sites) pat)
~& site
?~ site `this
:: TODO resurrect when wiki is usable
:: =. app-order.u.site ~[%blog %chat %forum %radio %wiki]
=. app-order.u.site ~[%blog %chat %forum %radio]
=. sites (~(put by sites) pat u.site)
`this
?: .=(%wipe-subs arg)
:_ this %+ weld
%+ turn ~(tap by wex.bowl) |= [[=wire =ship =term] [acked=? =path]]
^- card
[%pass wire %agent [ship term] %leave ~]
%+ turn ~(tap by sup.bowl) |= [* p=@p pat=path]
^- card
[%give %kick ~[pat] `p]
:: ?: .=(arg 5)
:: :_ this :_ ~ (add-eyre-binding /test)
:: ?: .=(arg 4)
:: :_ this :_ ~ (remove-eyre-binding /test)
:: ~& >> unrecognized-poke-to-ublog=a
`this
:: UI poke handler
++ handle-ui |= a=*
:: =/ ua ((soft sail-poke:sur) a)
:: ?~ ua `this =/ action action.u.ua
:: =. sites
:: ?+ -.action sites
:: %launch (handle-launch +.action)
:: %delist (handle-delist +.action)
:: %delete (handle-delete +.action)
:: :: %add-app
:: :: %hide-app
:: :: %del-app
:: ==
:: :_ this (redirect:router eyre-id.u.ua "")
`this
:: ++ handle-launch |= [name=@t]
:: ?: =('' name) sites
:: =/ site (~(get by sites) name)
:: ?~ site
:: =/ nsite *site:sur
:: (~(put by sites) name nsite)
:: =. hidden.u.site .n
:: (~(put by sites) name u.site)
:: ++ handle-delist |= name=@t
:: =/ site (~(get by sites) name)
:: ?~ site sites
:: =. hidden.u.site .y
:: (~(put by sites) name u.site)
:: ++ handle-delete |= name=@t
:: (~(del by sites) name)
++ serve-http |= [id=@ta req=inbound-request:eyre]
=/ weblib ~(. web [bowl id req state])
:- route:weblib this
--
::
++ on-peek
|= =path
^- (unit (unit cage))
:: ~& >> "attempting scry on {<path>}"
?+ path ~&("unexpected scry into {<dap.bowl>} on path {<path>}" ~)
[%x %state ~] :- ~ :- ~ :- %json !>
(en:jon sites)
==
++ on-watch
|= =(pole knot)
?+ pole !!
:: dashboard
[%ui ~] :_ this :~(give-state:hd)
:: site
[%ui rest=*]
:_ this :~((give-site-state:hd rest.pole))
[%http-response *] `this
[%proxy app=@t rest=*]
:_ this
:: ~
:_ ~
(proxy-watch:hd rest.pole our.bowl app.pole)
==
::
++ on-arvo
|= [=(pole knot) =sign-arvo]
`this
++ on-agent |= [wire=(pole knot) =sign:agent:gall]
:: ?: ?=(%kick -.sign) :_ this :~((re-watch:hd wire))
?. ?=(%fact -.sign) `this
?+ wire `this
[%ninja-sub app=@t rest=*]
=/ return-path (weld /proxy [app.wire rest.wire])
=/ =mars:clay [p.cage.sign %json]
=/ mars-path /[a.mars]/[b.mars]
:: this is annoyingly ad-hoc but I'm tired
=/ base ?: ?=(?(%tower %tenna) app.wire)
/(scot %p our.bowl)/[%radio]/(scot %da now.bowl)
/(scot %p our.bowl)/[%groups]/(scot %da now.bowl)
=/ scry-path (weld base mars-path)
=/ mark-conversion-gate .^(tube:clay %cc scry-path)
=/ vas (mark-conversion-gate q.cage.sign)
:_ this :_ ~
[%give %fact ~[return-path] %json vas]
==
++ on-leave |~(* [~ this])
++ on-fail |~(* [~ this])
--
|_ [s=versioned-state =bowl:gall]
:: cards
++ add-eyre-binding
|= =path ^- card
[%pass /eyre/connect %arvo %e %connect [~ path] dap.bowl]
++ wipe-eyre-bindings
=/ l .^((list [=binding:eyre duct =action:eyre]) %e /(scot %p our.bowl)/bindings/(scot %da now.bowl))
=/ cards=(list card) [(add-eyre-binding [dap.bowl ~]) ~]
|- ?~ l cards
=/ target action.i.l
?. ?=(%app -.target) $(l t.l)
?. .=(dap.bowl app.target) $(l t.l)
=/ nc (remove-eyre-binding binding.i.l)
=. cards [nc cards]
$(l t.l)
++ remove-eyre-binding |= =binding:eyre ^- card
[%pass /eyre/disconnect %arvo %e %disconnect binding]
++ give-state ^- card
[%give %fact ~ [%json !>((en:jon sites))]]
++ give-site-state |= sitepath=path ^- card
=/ usite (~(get by sites) sitepath)
=/ j=json
?~ usite ~ (en-site:en:jon u.usite)
[%give %fact ~ [%json !>(j)]]
++ proxy-watch |= [=path =ship app=term] ^- card
=/ sub-path (weld /ninja-sub [app path])
[%pass sub-path %agent [ship app] %watch path]
++ re-watch |= wire=(pole knot) ^- card
?. ?=([%ninja-sub app=@t rest=*] wire) !!
[%pass wire %agent [our.bowl app.wire] %watch rest.wire]
:: ++ cache-card
:: |= path=tape ^- card
:: =/ pathc (crip "{base-url:cons}{path}")
:: ~& >> caching=pathc
:: =/ router-path ?~ path '/' pathc
:: =/ pl=simple-payload:http (render:rout router-path)
:: =/ entry=cache-entry:eyre [.n %payload pl]
:: [%pass /root %arvo %e %set-response pathc `entry]
:: ++ uncache-card
:: |= path=tape ^- card
:: =/ pathc (crip "{base-url:cons}{path}")
:: ~& >> uncaching=pathc
:: =/ router-path ?~ path '/' pathc
:: =/ pl=simple-payload:http (render:rout router-path)
:: =/ entry=cache-entry:eyre [.n %payload pl]
:: [%pass /root %arvo %e %set-response pathc ~]
--