]>
Commit | Line | Data |
---|---|---|
d4e3371b CP |
1 | from zope.interface import implements\r |
2 | \r | |
3 | from twisted.python import usage\r | |
4 | from twisted.internet import task\r | |
5 | from twisted.plugin import IPlugin\r | |
6 | from twisted.application.service import IServiceMaker\r | |
7 | from twisted.application import internet, strports\r | |
8 | from twisted.web import static, server\r | |
9 | \r | |
e1b81267 CP |
10 | from qwebirc import RootSite\r |
11 | \r | |
d4e3371b CP |
12 | class Options(usage.Options):\r |
13 | optParameters = [["port", "p", "9090","Port to start the server on."],\r | |
14 | ["logfile", "l", None, "Path to web CLF (Combined Log Format) log file."],\r | |
15 | ["https", None, None, "Port to listen on for Secure HTTP."],\r | |
16 | ["certificate", "c", "server.pem", "SSL certificate to use for HTTPS. "],\r | |
17 | ["privkey", "k", "server.pem", "SSL certificate to use for HTTPS."],\r | |
e1b81267 | 18 | ["staticpath", "s", "static", "Path to static content"],\r |
d4e3371b CP |
19 | ]\r |
20 | \r | |
21 | optFlags = [["notracebacks", "n", "Display tracebacks in broken web pages. " +\r | |
22 | "Displaying tracebacks to users may be security risk!"],\r | |
23 | ]\r | |
24 | \r | |
25 | zsh_actions = {"logfile" : "_files -g '*.log'", "certificate" : "_files -g '*.pem'",\r | |
26 | "privkey" : "_files -g '*.pem'"} \r | |
27 | \r | |
28 | def postOptions(self):\r | |
29 | if self['https']:\r | |
30 | try:\r | |
31 | from twisted.internet.ssl import DefaultOpenSSLContextFactory\r | |
32 | except ImportError:\r | |
33 | raise usage.UsageError("SSL support not installed")\r | |
34 | \r | |
35 | class QWebIRCServiceMaker(object):\r | |
36 | implements(IServiceMaker, IPlugin)\r | |
37 | tapname = "qwebirc"\r | |
38 | description = "QuakeNet web-based IRC client"\r | |
39 | options = Options\r | |
40 | \r | |
e1b81267 | 41 | \r |
d4e3371b | 42 | def makeService(self, config):\r |
d4e3371b | 43 | if config['logfile']:\r |
e1b81267 | 44 | site = RootSite(config['staticpath'], logPath=config['logfile'])\r |
d4e3371b | 45 | else:\r |
e1b81267 | 46 | site = RootSite(config['staticpath'])\r |
d4e3371b CP |
47 | \r |
48 | \r | |
49 | site.displayTracebacks = not config["notracebacks"]\r | |
50 | if config['https']:\r | |
51 | from twisted.internet.ssl import DefaultOpenSSLContextFactory\r | |
52 | i = internet.SSLServer(int(config['https']), site, DefaultOpenSSLContextFactory(config['privkey'], config['certificate']))\r | |
53 | else:\r | |
54 | i = internet.TCPServer(int(config['port']), site)\r | |
55 | \r | |
56 | return i\r | |
57 | \r | |
58 | serviceMaker = QWebIRCServiceMaker() |