]> gitweb.factorcode.org Git - factor.git/blob - extra/websites/concatenative/concatenative.factor
Squashed commit of the following:
[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
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 IN: websites.concatenative
31
32 : test-db ( -- db ) "resource:test.db" <sqlite-db> ;
33
34 : init-factor-db ( -- )
35     mason-db [ init-mason-db ] with-db
36
37     test-db [
38         init-furnace-tables
39
40         {
41             paste annotation
42             blog posting
43             article revision
44         } ensure-tables
45     ] with-db ;
46
47 TUPLE: factor-website < dispatcher ;
48
49 : <factor-boilerplate> ( responder -- responder' )
50     <boilerplate>
51         { factor-website "page" } >>template ;
52
53 : <login-config> ( responder -- responder' )
54     "Factor website" <login-realm>
55         "Factor website" >>name
56         allow-registration
57         allow-password-recovery
58         allow-edit-profile
59         allow-deactivation ;
60
61 : <factor-recaptcha> ( responder -- responder' )
62     <recaptcha>
63         "concatenative.org" >>domain
64         "6LeJWQgAAAAAAFlYV7SuBClE9uSpGtV_ZS-qVON7" >>public-key
65         "6LeJWQgAAAAAALh-XJgSSQ6xKygRgJ8-029Ip2Xv" >>private-key ;
66
67 : <factor-website> ( -- responder )
68     factor-website new-dispatcher
69         URL" /wiki/view/Front Page" <redirect-responder> "" add-responder ;
70
71 SYMBOL: key-password
72 SYMBOL: key-file
73 SYMBOL: dh-file
74
75 : common-configuration ( -- )
76     "concatenative.org" 25 <inet> smtp-server set-global
77     "noreply@concatenative.org" lost-password-from set-global
78     "website@concatenative.org" insomniac-sender set-global
79     { "slava@factorcode.org" } insomniac-recipients set-global
80     init-factor-db ;
81
82 : init-testing ( -- )
83     "vocab:openssl/test/dh1024.pem" dh-file set-global
84     "vocab:openssl/test/server.pem" key-file set-global
85     "password" key-password set-global
86     common-configuration
87     <factor-website>
88         <wiki> <login-config> <factor-boilerplate> "wiki" add-responder
89         <user-admin> <login-config> <factor-boilerplate> "user-admin" add-responder
90         <pastebin> <factor-recaptcha> <login-config> <factor-boilerplate> "pastebin" add-responder
91         <planet> <login-config> <factor-boilerplate> "planet" add-responder
92         <mason-app> <login-config> <factor-boilerplate> "mason" add-responder
93         "/tmp/docs/" <help-webapp> "docs" add-responder
94     test-db <alloy>
95     main-responder set-global ;
96
97 : <gitweb> ( path -- responder )
98     <dispatcher>
99         swap <static> enable-cgi >>default
100         URL" /gitweb.cgi" <redirect-responder> "" add-responder ;
101
102 : init-production ( -- )
103     common-configuration
104     <vhost-dispatcher>
105         <factor-website>
106             <wiki> "wiki" add-responder
107             <user-admin> "user-admin" add-responder
108         <login-config> <factor-boilerplate> test-db <alloy> "concatenative.org" add-responder
109         <pastebin> <factor-recaptcha> <login-config> <factor-boilerplate> test-db <alloy> "paste.factorcode.org" add-responder
110         <planet> <login-config> <factor-boilerplate> test-db <alloy> "planet.factorcode.org" add-responder
111         <mason-app> <login-config> <factor-boilerplate> test-db <alloy> "builds.factorcode.org" add-responder
112         home "docs" append-path <help-webapp> "docs.factorcode.org" add-responder
113         home "cgi" append-path <gitweb> "gitweb.factorcode.org" add-responder
114     main-responder set-global ;
115
116 : <factor-secure-config> ( -- config )
117     <secure-config>
118         key-file get >>key-file
119         dh-file get >>dh-file
120         key-password get >>password ;
121
122 : <factor-website-server> ( -- threaded-server )
123     <http-server>
124         <factor-secure-config> >>secure-config
125         8080 >>insecure
126         8431 >>secure ;
127
128 : start-website ( -- server )
129     test-db start-expiring
130     test-db start-update-task
131     http-insomniac
132     <factor-website-server> start-server ;