factor-work/bonerbonerboner/api/api.factor

60 lines
1.7 KiB
Factor

! Copyright (C) 2020 .
! See http://factorcode.org/license.txt for BSD license.
USING: kernel http.server http.server.responses http.server.dispatchers furnace.actions html.forms accessors namespaces io.servers io.sockets.secure.debug sequences validators ;
USING: bonerbonerboner.services bonerbonerboner.services.slack bonerbonerboner.services.mississippis bonerbonerboner.services.platzisms bonerbonerboner.services.link-logger ;
USING: prettyprint ;
IN: bonerbonerboner.api
TUPLE: bbb < dispatcher ;
: bbb-themes ( -- themes )
{ "bbb" "bones" "float" "hockey" "rocket" "trump" "wakeywakey" } ;
: v-valid-theme ( str -- theme )
dup bbb-themes member? [ "not a valid theme" throw ] unless ;
: validate-theme ( -- )
{
{ "theme" [ v-required v-valid-theme ] }
} validate-params ;
: <theme-action> ( -- action )
<page-action>
[ validate-theme ] >>init
{ bbb "themes" } >>template ;
: <heartbeat-action> ( -- action )
<action> [ "bonerbonerboner" <text-content> ] >>display ;
: <bbb> ( -- responder )
bbb new-dispatcher
<heartbeat-action> "heartbeat" add-responder
<slack-event-action> "slack-events" add-responder
<theme-action> "subdomain" add-responder ;
: add-default-slack-listeners ( -- )
{
[ check-mississippi-request ]
[ check-platz ]
[ check-links ]
} slack-callbacks set-global ;
SYMBOL: current-bbb-server
: <bbb-website-server> ( -- threaded-server )
<http-server>
f >>secure
8069 >>insecure ;
: start-bbb-site ( -- )
add-default-slack-listeners
<bbb> main-responder set-global
<bbb-website-server> start-server wait-for-server ;
MAIN: start-bbb-site