]> gitweb.factorcode.org Git - factor.git/blob - extra/websites/concatenative/concatenative.factor
e37f7d4c3ffe1776f675169427f647343618bb3e
[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.sockets
4 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 furnace.alloy
12 furnace.auth.login
13 furnace.auth.providers.db
14 furnace.auth.features.edit-profile
15 furnace.auth.features.recover-password
16 furnace.auth.features.registration
17 furnace.auth.features.deactivate-user
18 furnace.boilerplate
19 furnace.redirection
20 webapps.blogs
21 webapps.pastebin
22 webapps.planet
23 webapps.todo
24 webapps.wiki
25 webapps.wee-url
26 webapps.user-admin ;
27 IN: websites.concatenative
28
29 : test-db ( -- params db ) "resource:test.db" sqlite-db ;
30
31 : init-factor-db ( -- )
32     test-db [
33         init-furnace-tables
34
35         {
36             post comment
37             paste annotation
38             blog posting
39             todo
40             short-url
41             article revision
42         } ensure-tables
43     ] with-db ;
44
45 TUPLE: factor-website < dispatcher ;
46
47 : <factor-website> ( -- responder )
48     factor-website new-dispatcher
49         <blogs> "blogs" add-responder
50         <todo-list> "todo" add-responder
51         <pastebin> "pastebin" add-responder
52         <planet> "planet" add-responder
53         <wiki> "wiki" add-responder
54         <wee-url> "wee-url" add-responder
55         <user-admin> "user-admin" add-responder
56         URL" /wiki/view/Front Page" <redirect-responder> "" add-responder
57     "Factor website" <login-realm>
58         "Factor website" >>name
59         allow-registration
60         allow-password-recovery
61         allow-edit-profile
62         allow-deactivation
63     <boilerplate>
64         { factor-website "page" } >>template
65     test-db <alloy> ;
66
67 SYMBOL: key-password
68 SYMBOL: key-file
69 SYMBOL: dh-file
70
71 : common-configuration ( -- )
72     reset-templates
73     "concatenative.org" 25 <inet> smtp-server set-global
74     "noreply@concatenative.org" lost-password-from set-global
75     "website@concatenative.org" insomniac-sender set-global
76     "slava@factorcode.org" insomniac-recipients set-global
77     <factor-website> main-responder set-global
78     init-factor-db ;
79
80 : init-testing ( -- )
81     "resource:basis/openssl/test/dh1024.pem" dh-file set-global
82     "resource:basis/openssl/test/server.pem" key-file set-global
83     "password" key-password set-global
84     common-configuration ;
85
86 : init-production ( -- )
87     f dh-file set-global
88     f key-password set-global
89     "/home/slava/cert/host.pem" key-file set-global
90     common-configuration ;
91
92 : <factor-secure-config> ( -- config )
93     <secure-config>
94         key-file get >>key-file
95         dh-file get >>dh-file
96         key-password get >>password ;
97
98 : <factor-website-server> ( -- threaded-server )
99     <http-server>
100         <factor-secure-config> >>secure-config
101         8080 >>insecure
102         8431 >>secure ;
103
104 : start-website ( -- )
105     test-db start-expiring
106     test-db start-update-task
107     http-insomniac
108     <factor-website-server> start-server ;