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