1 ! Copyright (c) 2008, 2010 Slava Pestov
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors kernel sequences assocs io.files io.pathnames
4 io.sockets io.sockets.secure io.servers
5 namespaces db db.tuples db.sqlite smtp urls
6 logging.insomniac calendar timers
9 http.server.dispatchers
10 http.server.redirection
15 furnace.auth.providers.db
16 furnace.auth.features.edit-profile
17 furnace.auth.features.recover-password
18 furnace.auth.features.registration
19 furnace.auth.features.deactivate-user
30 webapps.mason.backend.watchdog
32 IN: websites.concatenative
34 : website-db ( -- db ) "~/website.db" <sqlite-db> ;
36 : init-factor-db ( -- )
37 mason-db [ init-mason-db ] with-db
43 paste-state annotation
49 TUPLE: concatenative-website < dispatcher ;
51 : <factor-boilerplate> ( responder -- responder' )
53 { concatenative-website "page" } >>template ;
55 : <login-config> ( responder -- responder' )
56 "Factor website" <login-realm>
58 allow-password-recovery
62 SYMBOLS: factor-recaptcha-site-key factor-recaptcha-secret-key ;
64 : <factor-recaptcha> ( responder -- responder' )
66 "concatenative.org" >>domain
67 factor-recaptcha-site-key get >>site-key
68 factor-recaptcha-secret-key get >>secret-key ;
70 : <concatenative-website> ( -- responder )
71 concatenative-website new-dispatcher
72 URL" /wiki/view/Front Page" <redirect-responder> "" add-responder ;
74 SYMBOLS: key-password key-file dh-file ;
76 : common-configuration ( -- )
77 "noreply@concatenative.org" lost-password-from set-global
81 "vocab:openssl/test/dh1024.pem" dh-file set-global
82 "vocab:openssl/test/server.pem" key-file set-global
83 "password" key-password set-global
85 <concatenative-website>
86 <wiki> <factor-recaptcha> <login-config> <factor-boilerplate> "wiki" add-responder
87 <user-admin> <login-config> <factor-boilerplate> "user-admin" add-responder
88 <pastebin> <factor-recaptcha> <login-config> <factor-boilerplate> "pastebin" add-responder
89 <planet> <login-config> <factor-boilerplate> "planet" add-responder
90 <mason-app> <login-config> <factor-boilerplate> "mason" add-responder
91 "/tmp/docs/" <help-webapp> "docs" add-responder
93 main-responder set-global ;
95 : <gitweb> ( path -- responder )
97 swap <static> enable-cgi >>default
98 URL" /gitweb.cgi" <redirect-responder> "" add-responder
99 URL" /github-sync.cgi" <redirect-responder> "github-sync" add-responder ;
101 TUPLE: cgit < file-responder cgi ;
103 : <cgit> ( root cgi -- responder )
107 [ (serve-static) ] >>hook
108 H{ } clone >>special ;
110 M: cgit call-responder*
111 dup file-responder set
112 over [ f ] [ "/" join serving-path file-exists? ] if-empty [
116 rot "/" join "url" set-query-param
117 "cgit.cgi" >>path drop
121 : init-production ( -- )
124 <concatenative-website>
125 <wiki> <factor-recaptcha> "wiki" add-responder
126 <user-admin> "user-admin" add-responder
127 <login-config> <factor-boilerplate> website-db <alloy> "concatenative.org" add-responder
128 <pastebin> <factor-recaptcha> <login-config> <factor-boilerplate> website-db <alloy> "paste.factorcode.org" add-responder
129 <planet> <login-config> <factor-boilerplate> website-db <alloy> "planet.factorcode.org" add-responder
130 <mason-app> <login-config> <factor-boilerplate> website-db <alloy> "builds.factorcode.org" add-responder
131 "~/docs" <help-webapp> "docs.factorcode.org" add-responder
132 "~/gitweb" <gitweb> "gitweb.factorcode.org" add-responder
133 "/usr/share/cgit" "/usr/lib/cgit/cgit.cgi" <cgit> "cgit.factorcode.org" add-responder
134 "~/irclogs" <static> t >>allow-listings "irclogs.factorcode.org" add-responder
135 main-responder set-global ;
137 : <factor-secure-config> ( -- config )
139 key-file get >>key-file
140 dh-file get >>dh-file
141 key-password get >>password ;
143 : <concatenative-website-server> ( -- threaded-server )
145 <factor-secure-config> >>secure-config
149 : start-watchdog ( -- )
150 [ check-builders ] 6 hours every drop ;
152 : start-website ( -- server )
153 website-db start-expiring
154 website-db start-update-task
157 <concatenative-website-server> start-server ;