forked from UCL-INGI/INGInious
-
Notifications
You must be signed in to change notification settings - Fork 0
/
inginious-webdav
executable file
·77 lines (63 loc) · 2.96 KB
/
inginious-webdav
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# This file is part of INGInious. See the LICENSE and the COPYRIGHTS files for
# more information about the licensing of this file.
import os
import sys
import argparse
import logging
import web
from inginious.common.log import init_logging, CustomLogMiddleware
from inginious.common.base import load_json_or_yaml
import inginious.frontend.webdav
# Apache wsgi module only set env vars when a request is done
os.environ['INGINIOUS_WEBAPP_CONFIG'] = os.environ.get("INGINIOUS_WEBAPP_CONFIG", "")
os.environ['INGINIOUS_WEBDAV_HOST'] = os.environ.get("INGINIOUS_WEBDAV_HOST", "localhost")
os.environ['INGINIOUS_WEBDAV_PORT'] = os.environ.get("INGINIOUS_WEBDAV_PORT", "8080")
# If INGInious files are not installed in Python path
sys.path.append(os.path.dirname(__file__))
if __name__ == "__main__":
# Parse the paramaters from command line arguments
parser = argparse.ArgumentParser()
parser.add_argument("--config",
help="Path to configuration file. By default: configuration.yaml or configuration.json", default=os.environ["INGINIOUS_WEBAPP_CONFIG"])
parser.add_argument("--host", help="Host to bind to. Default is localhost.", default=os.environ["INGINIOUS_WEBDAV_HOST"])
parser.add_argument("--port", help="Port to listen to. Default is 8080.", type=int, default=os.environ["INGINIOUS_WEBDAV_PORT"])
args = parser.parse_args()
host = args.host
port = args.port
configfile = args.config
else:
# Parse the parameters from environment variables
host = os.environ["INGINIOUS_WEBDAV_HOST"]
port = os.environ["INGINIOUS_WEBDAV_PORT"]
configfile = os.environ["INGINIOUS_WEBAPP_CONFIG"]
if not configfile:
if os.path.isfile("./configuration.yaml"):
configfile = "./configuration.yaml"
elif os.path.isfile("./configuration.json"):
configfile = "./configuration.json"
else:
raise Exception("No configuration file found")
# Load configuration and application (!!! For mod_wsgi, application identifier must be present)
config = load_json_or_yaml(configfile)
application = inginious.frontend.webdav.get_app(config)
# Init logging
init_logging(config.get('log_level', 'INFO'))
logging.getLogger("inginious.webdav").info("http://%s:%d/" % (host, int(port)))
if 'SERVER_SOFTWARE' in os.environ: # cgi
os.environ['FCGI_FORCE_CGI'] = 'Y'
if 'PHP_FCGI_CHILDREN' in os.environ or 'SERVER_SOFTWARE' in os.environ: # lighttpd fastcgi
import flup.server.fcgi as flups
flups.WSGIServer(application, multiplexed=True, bindAddress=None, debug=False).run()
# Launch the integrated websever if app launched in cmd line
if __name__ == "__main__":
# Add static redirection and request log
application = CustomLogMiddleware(application, logging.getLogger("inginious.webdav.requests"))
# Launch the app
server = web.httpserver.WSGIServer((host, int(port)), application)
try:
server.start()
except KeyboardInterrupt:
server.stop()