ustj/app/ustj.hoon
2024-06-01 15:45:45 +07:00

121 lines
3.3 KiB
Plaintext

/- *forum
/+ dbug, lib=forum, const=constants
/= router /web/router
|%
++ card card:agent:gall
+$ versioned-state
$% state-0
==
--
:: main agent core
%- agent:dbug
=| versioned-state
=* state -
^- agent:gall
=<
::
|_ =bowl:gall
+* this .
hd ~(. +> [state bowl])
++ on-fail |~(* `this)
++ on-leave |~(* `this)
++ on-save !>(state)
++ on-init
^- (quip card _this)
:_ this init-cards:hd
++ on-load |= old=vase
:_ this(state !<(versioned-state old)) ~
++ on-watch
|= =(pole knot)
?+ pole !!
[%http-response id=@ ~] `this
==
++ on-poke
|= [=mark =vase]
|^
?+ mark `this
%handle-http-request serve
%noun (on-poke-noun !<(* vase))
==
++ on-poke-noun
|= a=*
?: ?=(%print a) print
?: ?=(%seed a) seed
`this
++ print
~& > state=state
`this
++ seed
=/ authors=(list @p) :~
~zod
~polwex
~lagrev-nocfep
~lagrev-nocfep
==
=/ titles=(list @t)
:~
'Helldivers 2 has caused over 20k Steam accounts to be banned'
'UI elements with a hand-drawn, sketchy look'
'60 kHz (2022)'
'Show HN: Every mountain, building and tree shadow mapped for any date and time'
'Snowflake breach: Hacker confirms access through infostealer infection'
'Heroku Postgres is now based on AWS Aurora'
'Armor from Mycenaean Greece turns out to have been effective'
'Why is no Laravel/Rails in JavaScript? Will there be one?'
'Moving Beyond Type Systems'
'Japanese \'My Number Card\' Digital IDs Coming to Apple\'s Wallet App'
'How to copy a file from a 30-year-old laptop'
'(some) good corporate engineering blogs are written'
'Debian KDE: Right Linux distribution for professional digital painting in 2024'
'Go: Sentinel errors and errors.Is() slow your code down by 3000%'
'"Moveable Type" to end 17-year run in The New York Times\'s lobby'
'London\'s Evening Standard axes daily print edition'
==
=/ rng ~(. og eny.bowl)
|- ?~ titles `this
=^ r1 rng (rads:rng 1)
~& >> rng=rng
=/ r (rad:rng 3)
=/ =content ?: .=(0 r1)
[%link 'https://urbit.org'] [%text ~]
=/ author (snag r authors)
=/ date (sub now.bowl (mul ~h1 (rad:rng 500)))
=/ ted (build-thread:lib i.titles author date content)
=/ tally (new:si [(? r1) (rad:rng 1.000)])
=. ted ted(votes [tally ~])
=. threads (put:torm threads [author date] ted)
$(titles t.titles)
::
++ serve
^- (quip card _this)
~& eyre-poke=now.bowl
=/ order !<(order:router vase)
=/ address address.req.order
:: ?: (~(has in banned.admin) address) `this
:: ~& >>> malicious-request-alert=req.order `this
:_ this
%- route:router [order state bowl]
--
++ on-peek
|= =(pole knot) ~
++ on-agent
|= [=wire =sign:agent:gall] `this
++ on-arvo
|= [=(pole knot) =sign-arvo] `this
--
:: helper
|_ [s=versioned-state =bowl:gall]
++ cache-card |= [pathc=@t pl=simple-payload:http] ^- card
=/ entry=cache-entry:eyre [.n %payload pl]
[%pass /root %arvo %e %set-response pathc `entry]
++ root-path-card ^- card
[%pass /root %arvo %e %connect [~ /forum] dap.bowl]
++ init-cards ^- (list card)
:~ root-path-card
==
++ schedule-backup-card ^- card
[%pass /backup %arvo %b %wait (add now.bowl ~h6)]
--