1 # This file is part of NIT ( http://www.nitlanguage.org ).
3 # Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
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
9 # http://www.apache.org/licenses/LICENSE-2.0
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.
17 # Web server part of the Tnitter project
26 redef class OptionContext
27 var drop
= new OptionUserAndGroup.for_dropping_privileges
28 var help
= new OptionBool("Print this message", "--help", "-h")
30 init do add_option
(drop
, help
)
33 # Address and port of the listening socket
34 fun tnitter_interface
: String do return "localhost:8080"
36 # Avoid executing when running tests
37 if "NIT_TESTING".environ
== "true" then exit
0
40 var opts
= new OptionContext
42 if not opts
.errors
.is_empty
or opts
.help
.value
then
44 print
"Usage: tnitter [Options]"
50 var vh
= new VirtualHost(tnitter_interface
)
51 var factory
= new HttpFactory.and_libevent
52 factory
.config
.virtual_hosts
.add vh
54 # Drop to a low-privileged user
55 var user_group
= opts
.drop
.value
56 if user_group
!= null then user_group
.drop_privileges
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)
64 print
"Launching server on http://{tnitter_interface} ..."