contrib/tnitter: add REST interface
[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
25 redef class OptionContext
26 var drop = new OptionUserAndGroup.for_dropping_privileges
27 var help = new OptionBool("Print this message", "--help", "-h")
28
29 init do add_option(drop, help)
30 end
31
32 # Avoid executing when running tests
33 if "NIT_TESTING".environ == "true" then exit 0
34
35 # Prepare options
36 var opts = new OptionContext
37 opts.parse(args)
38 if not opts.errors.is_empty or opts.help.value then
39 print opts.errors
40 print "Usage: tnitter [Options]"
41 opts.usage
42 exit 1
43 end
44
45 # If we can, we use port 80
46 var interfac
47 if sys.uid == 0 then # Are we root?
48 interfac = "localhost:80"
49 else interfac = "localhost:8080"
50
51 # Setup server
52 var vh = new VirtualHost(interfac)
53 var factory = new HttpFactory.and_libevent
54 factory.config.virtual_hosts.add vh
55
56 # Drop to a low-privileged user
57 var user_group = opts.drop.value
58 if user_group != null then user_group.drop_privileges
59
60 # Complete server config
61 vh.routes.add new Route("/rest/", new TnitterREST)
62 vh.routes.add new Route(null, new TnitterWeb)
63
64 # Run
65 print "Launching server on http://{interfac} ..."
66 factory.run