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
25 redef class OptionContext
26 var drop
= new OptionUserAndGroup.for_dropping_privileges
27 var help
= new OptionBool("Print this message", "--help", "-h")
29 init do add_option
(drop
, help
)
32 # Avoid executing when running tests
33 if "NIT_TESTING".environ
== "true" then exit
0
36 var opts
= new OptionContext
38 if not opts
.errors
.is_empty
or opts
.help
.value
then
40 print
"Usage: tnitter [Options]"
45 # If we can, we use port 80
47 if sys
.uid
== 0 then # Are we root?
48 interfac
= "localhost:80"
49 else interfac
= "localhost:8080"
52 var vh
= new VirtualHost(interfac
)
53 var factory
= new HttpFactory.and_libevent
54 factory
.config
.virtual_hosts
.add vh
56 # Drop to a low-privileged user
57 var user_group
= opts
.drop
.value
58 if user_group
!= null then user_group
.drop_privileges
60 # Complete server config
61 vh
.routes
.add
new Route(null, new Tnitter)
64 print
"Launching server on http://{interfac} ..."