contrib/tnitter: intro push notification service to the server
[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 # Avoid executing when running tests
34 if "NIT_TESTING".environ == "true" then exit 0
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 # If we can, we use port 80
47 var interfac
48 if sys.uid == 0 then # Are we root?
49 interfac = "localhost:80"
50 else interfac = "localhost:8080"
51
52 # Setup server
53 var vh = new VirtualHost(interfac)
54 var factory = new HttpFactory.and_libevent
55 factory.config.virtual_hosts.add vh
56
57 # Drop to a low-privileged user
58 var user_group = opts.drop.value
59 if user_group != null then user_group.drop_privileges
60
61 # Complete server config
62 vh.routes.add new Route("/rest/", new TnitterREST)
63 vh.routes.add new Route("/push/", new TnitterPush)
64 vh.routes.add new Route(null, new TnitterWeb)
65
66 # Run
67 print "Launching server on http://{interfac} ..."
68 factory.run