contrib/tnitter: refactor to set the server interface at compilation
[nit.git] / contrib / tnitter / src / tnitter.nit
1 # This file is part of NIT ( http://www.nitlanguage.org ).
2 #
3 # Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
8 #
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16
17 # Web server part of the Tnitter project
18 module tnitter
19
20 import privileges
21
22 import model
23 import action
24 import push
25
26 redef class OptionContext
27 var drop = new OptionUserAndGroup.for_dropping_privileges
28 var help = new OptionBool("Print this message", "--help", "-h")
29
30 init do add_option(drop, help)
31 end
32
33 # Address and port of the listening socket
34 fun tnitter_interface: String do return "localhost:8080"
35
36 # Avoid executing when running tests
37 if "NIT_TESTING".environ == "true" then exit 0
38
39 # Prepare options
40 var opts = new OptionContext
41 opts.parse(args)
42 if not opts.errors.is_empty or opts.help.value then
43 print opts.errors
44 print "Usage: tnitter [Options]"
45 opts.usage
46 exit 1
47 end
48
49 # Setup server
50 var vh = new VirtualHost(tnitter_interface)
51 var factory = new HttpFactory.and_libevent
52 factory.config.virtual_hosts.add vh
53
54 # Drop to a low-privileged user
55 var user_group = opts.drop.value
56 if user_group != null then user_group.drop_privileges
57
58 # Complete server config
59 vh.routes.add new Route("/rest/", new TnitterREST)
60 vh.routes.add new Route("/push/", new TnitterPush)
61 vh.routes.add new Route(null, new TnitterWeb)
62
63 # Run
64 print "Launching server on http://{tnitter_interface} ..."
65 factory.run