]> gitweb.factorcode.org Git - factor.git/blob - extra/websites/concatenative/concatenative.factor
webapps.help: changing <alloy> to only apply to search responder (for performance).
[factor.git] / extra / websites / concatenative / concatenative.factor
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
7 html.templates.chloe
8 http.server
9 http.server.dispatchers
10 http.server.redirection
11 http.server.static
12 http.server.cgi
13 furnace.alloy
14 furnace.auth.login
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
20 furnace.boilerplate
21 furnace.redirection
22 furnace.recaptcha
23 webapps.pastebin
24 webapps.planet
25 webapps.wiki
26 webapps.user-admin
27 webapps.help
28 webapps.mason
29 webapps.mason.backend
30 webapps.mason.backend.watchdog
31 websites.factorcode ;
32 IN: websites.concatenative
33
34 : website-db ( -- db ) home "website.db" append-path <sqlite-db> ;
35
36 : init-factor-db ( -- )
37     mason-db [ init-mason-db ] with-db
38
39     website-db [
40         init-furnace-tables
41
42         {
43             paste annotation
44             blog posting
45             article revision
46         } ensure-tables
47     ] with-db ;
48
49 TUPLE: concatenative-website < dispatcher ;
50
51 : <factor-boilerplate> ( responder -- responder' )
52     <boilerplate>
53         { concatenative-website "page" } >>template ;
54
55 : <login-config> ( responder -- responder' )
56     "Factor website" <login-realm>
57         "Factor website" >>name
58         allow-registration
59         allow-password-recovery
60         allow-edit-profile
61         allow-deactivation ;
62
63 SYMBOLS: factor-recaptcha-public-key factor-recaptcha-private-key ;
64
65 : <factor-recaptcha> ( responder -- responder' )
66     <recaptcha>
67         "concatenative.org" >>domain
68         factor-recaptcha-public-key get >>public-key
69         factor-recaptcha-private-key get >>private-key ;
70
71 : <concatenative-website> ( -- responder )
72     concatenative-website new-dispatcher
73         URL" /wiki/view/Front Page" <redirect-responder> "" add-responder ;
74
75 SYMBOLS: key-password key-file dh-file ;
76
77 : common-configuration ( -- )
78     "noreply@concatenative.org" lost-password-from set-global
79     init-factor-db ;
80
81 : init-testing ( -- )
82     "vocab:openssl/test/dh1024.pem" dh-file set-global
83     "vocab:openssl/test/server.pem" key-file set-global
84     "password" key-password set-global
85     common-configuration
86     <concatenative-website>
87         <wiki> <factor-recaptcha> <login-config> <factor-boilerplate> "wiki" add-responder
88         <user-admin> <login-config> <factor-boilerplate> "user-admin" add-responder
89         <pastebin> <factor-recaptcha> <login-config> <factor-boilerplate> "pastebin" add-responder
90         <planet> <login-config> <factor-boilerplate> "planet" add-responder
91         <mason-app> <login-config> <factor-boilerplate> "mason" add-responder
92         "/tmp/docs/" f <help-webapp> "docs" add-responder
93     website-db <alloy>
94     main-responder set-global ;
95
96 : <gitweb> ( path -- responder )
97     <dispatcher>
98         swap <static> enable-cgi >>default
99         URL" /gitweb.cgi" <redirect-responder> "" add-responder ;
100
101 : init-production ( -- )
102     common-configuration
103     <vhost-dispatcher>
104         <concatenative-website>
105             <wiki> <factor-recaptcha> "wiki" add-responder
106             <user-admin> "user-admin" add-responder
107         <login-config> <factor-boilerplate> website-db <alloy> "concatenative.org" add-responder
108         <pastebin> <factor-recaptcha> <login-config> <factor-boilerplate> website-db <alloy> "paste.factorcode.org" add-responder
109         <planet> <login-config> <factor-boilerplate> website-db <alloy> "planet.factorcode.org" add-responder
110         <mason-app> <login-config> <factor-boilerplate> website-db <alloy> "builds.factorcode.org" add-responder
111         home "docs" append-path website-db <help-webapp> "docs.factorcode.org" add-responder
112         home "cgi" append-path <gitweb> "gitweb.factorcode.org" add-responder
113     main-responder set-global ;
114
115 : <factor-secure-config> ( -- config )
116     <secure-config>
117         key-file get >>key-file
118         dh-file get >>dh-file
119         key-password get >>password ;
120
121 : <concatenative-website-server> ( -- threaded-server )
122     <http-server>
123         <factor-secure-config> >>secure-config
124         8080 >>insecure
125         8431 >>secure ;
126
127 : start-watchdog ( -- )
128     [ check-builders ] 6 hours every drop ;
129
130 : start-website ( -- server )
131     website-db start-expiring
132     website-db start-update-task
133     http-insomniac
134     start-watchdog
135     <concatenative-website-server> start-server ;