contrib: do not check for NIT_TESTING, nitcorn already checks
[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 # Prepare options
37 var opts = new OptionContext
38 opts.parse(args)
39 if not opts.errors.is_empty or opts.help.value then
40 print opts.errors
41 print "Usage: tnitter [Options]"
42 opts.usage
43 exit 1
44 end
45
46 # Setup server
47 var vh = new VirtualHost(tnitter_interface)
48 var factory = new HttpFactory.and_libevent
49 factory.config.virtual_hosts.add vh
50
51 # Drop to a low-privileged user
52 var user_group = opts.drop.value
53 if user_group != null then user_group.drop_privileges
54
55 # Complete server config
56 vh.routes.add new Route("/rest/", new TnitterREST)
57 vh.routes.add new Route("/push/", new TnitterPush)
58 vh.routes.add new Route(null, new TnitterWeb)
59
60 # Run
61 print "Launching server on http://{tnitter_interface} ..."
62 factory.run