annotate roundup/scripts/roundup_server.py @ 7064:3359dc1dabb0

Add OAuth authentication to the mailgw script Now IMAPS can be used with OAuth as required by several large cloud providers. Move command line processing of the mailgw script to ``argparse``. Note that the command line options of the mailgw have changed, see upgrading.txt for details.
author Ralf Schlatterbeck <rsc@runtux.com>
date Wed, 23 Nov 2022 10:13:48 +0100
parents 8e4028669d2a
children c0d030bd472e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
1 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
2 # This module is free software, and you may redistribute it and/or modify
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
3 # under the same terms as Python, so long as this copyright message and
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
4 # disclaimer are retained in their original form.
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
5 #
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
6 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
7 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
8 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
9 # POSSIBILITY OF SUCH DAMAGE.
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
10 #
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
11 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
12 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
13 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
14 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
15 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
16 #
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1953
diff changeset
17
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1953
diff changeset
18 """Command-line script that runs a server over roundup.cgi.client.
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
19 """
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
20 from __future__ import print_function
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1953
diff changeset
21 __docformat__ = 'restructuredtext'
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
22
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
23 import base64 # decode icon
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
24 import errno
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
25 import getopt
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
26 import io
5323
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
27 import logging
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
28 import os
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
29 import socket
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
30 import sys # modify sys.path when running in source tree
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
31 import time
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
32 import traceback
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
33 import zlib # decompress icon
5410
d0816d50ee8f Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5409
diff changeset
34
d0816d50ee8f Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5409
diff changeset
35 try:
d0816d50ee8f Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5409
diff changeset
36 # Python 3.
d0816d50ee8f Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5409
diff changeset
37 import socketserver
d0816d50ee8f Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5409
diff changeset
38 except ImportError:
d0816d50ee8f Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5409
diff changeset
39 # Python 2.
d0816d50ee8f Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5409
diff changeset
40 import SocketServer as socketserver
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
41
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
42 try:
5405
56cc58d20add Python 3 preparation: use imp.reload instead of reload as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5403
diff changeset
43 # Python 2.
56cc58d20add Python 3 preparation: use imp.reload instead of reload as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5403
diff changeset
44 reload
56cc58d20add Python 3 preparation: use imp.reload instead of reload as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5403
diff changeset
45 except NameError:
56cc58d20add Python 3 preparation: use imp.reload instead of reload as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5403
diff changeset
46 # Python 3.
6322
ff6580ee3882 Remove import of reload from imp (deprecated module), use importlib
John Rouillard <rouilj@ieee.org>
parents: 6295
diff changeset
47 from importlib import reload
5405
56cc58d20add Python 3 preparation: use imp.reload instead of reload as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5403
diff changeset
48
56cc58d20add Python 3 preparation: use imp.reload instead of reload as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5403
diff changeset
49 try:
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
50 from OpenSSL import SSL
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
51 except ImportError:
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
52 SSL = None
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
53
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
54 # --- patch sys.path to make sure 'import roundup' finds correct version
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
55 import os.path as osp
5800
1a835db41674 Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents: 5712
diff changeset
56
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
57 thisdir = osp.dirname(osp.abspath(__file__))
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
58 rootdir = osp.dirname(osp.dirname(thisdir))
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
59 if (osp.exists(thisdir + '/__init__.py') and
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
60 osp.exists(rootdir + '/roundup/__init__.py')):
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
61 # the script is located inside roundup source code
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
62 sys.path.insert(0, rootdir)
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
63 # --/
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
64
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
65 import roundup.instance # noqa: E402
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
66
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
67 # python version_check raises exception if imported for wrong python version
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
68 from roundup import configuration, version_check # noqa: F401,E402
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
69 from roundup import __version__ as roundup_version # noqa: E402
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
70 # Roundup modules of use here
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
71 from roundup.anypy import http_, urllib_ # noqa: E402
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
72 from roundup.anypy.html import html_escape # noqa: E402
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
73 from roundup.anypy.strings import s2b, StringIO # noqa: E402
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
74 from roundup.cgi import cgitb, client # noqa: E402
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
75 from roundup.cgi.PageTemplates.PageTemplate import PageTemplate # noqa: E402
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
76 from roundup.i18n import _ # noqa: E402
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
77
2181
740102dfad1d favicon generation stuff
Richard Jones <richard@users.sourceforge.net>
parents: 2180
diff changeset
78 # "default" favicon.ico
740102dfad1d favicon generation stuff
Richard Jones <richard@users.sourceforge.net>
parents: 2180
diff changeset
79 # generate by using "icotool" and tools/base64
6295
bc2b00afa980 Replace depricated base64.decodestring with base64.b64decode.
John Rouillard <rouilj@ieee.org>
parents: 6133
diff changeset
80 favico = zlib.decompress(base64.b64decode(b'''
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
81 eJztjr1PmlEUh59XgVoshdYPWorFIhaRFq0t9pNq37b60lYSTRzcTFw6GAfj5gDYaF0dTB0MxMSE
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
82 gQQd3FzKJiEC0UCIUUN1M41pV2JCXySg/0ITn5tfzvmdc+85FwT56HSc81UJjXJsk1UsNcsSqCk1
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
83 BS64lK+vr7OyssLJyQl2ux2j0cjU1BQajYZIJEIwGMRms+H3+zEYDExOTjI2Nsbm5iZWqxWv18vW
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
84 1hZDQ0Ok02kmJiY4Ojpienqa3d1dxsfHUSqVeDwe5ufnyeVyrK6u4nK5ODs7Y3FxEYfDwdzcHCaT
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
85 icPDQ5LJJIIgMDIyQj6fZ39/n+3tbdbW1pAkiYWFBWZmZtjb2yMejzM8PEwgEMDn85HNZonFYqjV
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
86 asLhMMvLy2QyGfR6PaOjowwODmKxWDg+PkalUhEKhSgUCiwtLWE2m9nZ2UGhULCxscHp6SmpVIpo
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
87 NMrs7CwHBwdotVoSiQRXXPG/IzY7RHtt922xjFRb01H1XhKfPBNbi/7my7rrLXJ88eppvxwEfV3f
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
88 NY3Y6exofVdsV3+2wnPFDdPjB83n7xuVpcFvygPbGwxF31LZIKrQDfR2Xvh7lmrX654L/7bvlnng
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
89 bn3Zuj8M9Hepux6VfZtW1yA6K7cfGqVu8TL325u+fHTb71QKbk+7TZQ+lTc6RcnpqW8qmVQBoj/g
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
90 23eo0sr/NIGvB37K+lOWXMvJ+uWFeKGU/03Cb7n3D4M3wxI=
1611
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
91 '''.strip()))
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
92
2637
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
93 DEFAULT_PORT = 8080
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
94
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
95 # See what types of multiprocess server are available
2848
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
96 # Note: the order is important. Preferred multiprocess type
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
97 # is the last element of this list.
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
98 # "debug" means "none" + no tracker/template cache
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
99 MULTIPROCESS_TYPES = ["debug", "none"]
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
100 try:
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
101 import threading # noqa: F401
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
102 except ImportError:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
103 pass
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
104 else:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
105 MULTIPROCESS_TYPES.append("thread")
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
106 if hasattr(os, 'fork'):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
107 MULTIPROCESS_TYPES.append("fork")
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
108 DEFAULT_MULTIPROCESS = MULTIPROCESS_TYPES[-1]
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
109
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
110
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
111 def auto_ssl():
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
112 print(_('WARNING: generating temporary SSL certificate'))
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
113 import OpenSSL, random # noqa: E401
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
114 pkey = OpenSSL.crypto.PKey()
6420
5d6b6e948e17 Upgrade SSL params for roundup-server
John Rouillard <rouilj@ieee.org>
parents: 6322
diff changeset
115 pkey.generate_key(OpenSSL.crypto.TYPE_RSA, 2048)
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
116 cert = OpenSSL.crypto.X509()
5386
fc97f1f4a7e3 Python 3 preparation: use sys.maxsize instead of sys.maxint.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5381
diff changeset
117 cert.set_serial_number(random.randint(0, sys.maxsize))
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
118 cert.gmtime_adj_notBefore(0)
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
119 cert.gmtime_adj_notAfter(60 * 60 * 24 * 365) # one year
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
120 cert.get_subject().CN = '*'
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
121 cert.get_subject().O = 'Roundup Dummy Certificate' # noqa: E741
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
122 cert.get_issuer().CN = 'Roundup Dummy Certificate Authority'
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
123 cert.get_issuer().O = 'Self-Signed' # noqa: E741
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
124 cert.set_pubkey(pkey)
6420
5d6b6e948e17 Upgrade SSL params for roundup-server
John Rouillard <rouilj@ieee.org>
parents: 6322
diff changeset
125 cert.sign(pkey, 'sha512')
6502
7fb13dc67a41 roundup-server native SSL support only TLS 1.2.
John Rouillard <rouilj@ieee.org>
parents: 6436
diff changeset
126 ctx = SSL.Context(OpenSSL.SSL.TLSv1_2_METHOD)
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
127 ctx.use_privatekey(pkey)
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
128 ctx.use_certificate(cert)
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
129
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
130 return ctx
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
131
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
132
5409
277e91bf7936 Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5405
diff changeset
133 class SecureHTTPServer(http_.server.HTTPServer):
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
134 def __init__(self, server_address, HandlerClass, ssl_pem=None):
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
135 assert SSL, "pyopenssl not installed"
5409
277e91bf7936 Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5405
diff changeset
136 http_.server.HTTPServer.__init__(self, server_address, HandlerClass)
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
137 self.socket = socket.socket(self.address_family, self.socket_type)
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
138 if ssl_pem:
6502
7fb13dc67a41 roundup-server native SSL support only TLS 1.2.
John Rouillard <rouilj@ieee.org>
parents: 6436
diff changeset
139 ctx = SSL.Context(SSL.TLSv1_2_METHOD)
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
140 ctx.use_privatekey_file(ssl_pem)
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
141 ctx.use_certificate_file(ssl_pem)
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
142 else:
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
143 ctx = auto_ssl()
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
144 self.ssl_context = ctx
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
145 self.socket = SSL.Connection(ctx, self.socket)
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
146 self.server_bind()
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
147 self.server_activate()
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
148
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
149 def get_request(self):
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
150 (conn, info) = self.socket.accept()
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
151 if self.ssl_context:
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
152
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
153 class RetryingFile(object):
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
154 """ SSL.Connection objects can return Want__Error
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
155 on recv/write, meaning "try again". We'll handle
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
156 the try looping here """
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
157 def __init__(self, fileobj):
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
158 self.__fileobj = fileobj
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
159
3891
410cae6ab7dd need to pass arguments to wrapper readline for SSL servers
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3890
diff changeset
160 def readline(self, *args):
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
161 """ SSL.Connection can return WantRead """
4273
0a684518d609 More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4258
diff changeset
162 while True:
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
163 try:
4273
0a684518d609 More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4258
diff changeset
164 return self.__fileobj.readline(*args)
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
165 except SSL.WantReadError:
4276
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
166 time.sleep(.1)
6834
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
167 except SSL.ZeroReturnError:
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
168 # Raised here on every request.
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
169 # SSL connection has been closed.
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
170 # But maybe not the underlying socket.
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
171 # FIXME: Does this lead to a socket leak??
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
172 # if so how to fix?
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
173 pass
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
174
4258
6432c9bfd385 Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3919
diff changeset
175 def read(self, *args):
6432c9bfd385 Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3919
diff changeset
176 """ SSL.Connection can return WantRead """
6432c9bfd385 Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3919
diff changeset
177 while True:
6432c9bfd385 Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3919
diff changeset
178 try:
6432c9bfd385 Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3919
diff changeset
179 return self.__fileobj.read(*args)
6432c9bfd385 Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3919
diff changeset
180 except SSL.WantReadError:
4276
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
181 time.sleep(.1)
6834
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
182 except SSL.ZeroReturnError:
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
183 # Put here to match readline() handling above.
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
184 # Even though this never was the source of the
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
185 # exception logged during use.
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
186 # SSL connection has been closed.
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
187 # But maybe not the underlying socket.
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
188 # FIXME: Does this lead to a socket leak??
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
189 # if so how to fix?
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
190 pass
4258
6432c9bfd385 Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3919
diff changeset
191
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
192 def __getattr__(self, attrib):
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
193 return getattr(self.__fileobj, attrib)
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
194
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
195 class ConnFixer(object):
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
196 """ wraps an SSL socket so that it implements makefile
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
197 which the HTTP handlers require """
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
198 def __init__(self, conn):
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
199 self.__conn = conn
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
200
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
201 def makefile(self, mode, bufsize):
6834
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
202 fo = None
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
203 try:
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
204 # see below of url used for this
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
205 fo = socket.SocketIO(self.__conn, mode)
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
206 except AttributeError:
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
207 # python 2 in use
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
208 buffer = socket._fileobject(self.__conn, mode, bufsize)
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
209
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
210 if fo:
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
211 # python3 set up buffering
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
212 # verify mode is rb and bufsize is -1
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
213 # implement subset of socket::makefile
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
214 # https://bugs.launchpad.net/python-glanceclient/+bug/1812525
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
215 if mode == 'rb' and bufsize == -1:
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
216 buffering = io.DEFAULT_BUFFER_SIZE
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
217 buffer = io.BufferedReader(fo, buffering)
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
218 else:
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
219 buffer = fo
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
220
5129fc03dc1f issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents: 6743
diff changeset
221 return RetryingFile(buffer)
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
222
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
223 def __getattr__(self, attrib):
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
224 return getattr(self.__conn, attrib)
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
225
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
226 conn = ConnFixer(conn)
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
227 return (conn, info)
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
228
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
229
5409
277e91bf7936 Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5405
diff changeset
230 class RoundupRequestHandler(http_.server.BaseHTTPRequestHandler):
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
231 TRACKER_HOMES = {}
2848
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
232 TRACKERS = None
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
233 LOG_IPADDRESS = 1
3277
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
234 DEBUG_MODE = False
3438
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
235 CONFIG = None
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
236
2848
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
237 def get_tracker(self, name):
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
238 """Return a tracker instance for given tracker name"""
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
239 # Note: try/except KeyError works faster that has_key() check
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
240 # if the key is usually found in the dictionary
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
241 #
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
242 # Return cached tracker instance if we have a tracker cache
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
243 if self.TRACKERS:
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
244 try:
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
245 return self.TRACKERS[name]
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
246 except KeyError:
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
247 pass
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
248 # No cached tracker. Look for home path.
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
249 try:
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
250 tracker_home = self.TRACKER_HOMES[name]
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
251 except KeyError:
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
252 raise client.NotFound
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
253 # open the instance
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
254 tracker = roundup.instance.open(tracker_home)
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
255 # and cache it if we have a tracker cache
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
256 if self.TRACKERS:
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
257 self.TRACKERS[name] = tracker
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
258 return tracker
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
259
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
260 def run_cgi(self):
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
261 """ Execute the CGI command. Wrap an innner call in an error
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
262 handler so all errors can be caught.
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
263 """
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
264 try:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
265 self.inner_run_cgi()
992
6003d6fa02a5 new CGI frontend support
Richard Jones <richard@users.sourceforge.net>
parents: 661
diff changeset
266 except client.NotFound:
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
267 self.send_error(404, self.path)
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5201
diff changeset
268 except client.Unauthorised as message:
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
269 self.send_error(403, '%s (%s)' % (self.path, message))
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
270 except Exception:
1939
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
271 exc, val, tb = sys.exc_info()
2191
f7f6b6981a13 sqlite backend uses the global lock again
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
272 if hasattr(socket, 'timeout') and isinstance(val, socket.timeout):
2200
25b95aa44d60 socket timeout error logging can fail
Richard Jones <richard@users.sourceforge.net>
parents: 2191
diff changeset
273 self.log_error('timeout')
1939
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
274 else:
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
275 # it'd be nice to be able to detect if these are going to have
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
276 # any effect...
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
277 self.send_response(400)
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
278 self.send_header('Content-Type', 'text/html')
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
279 self.end_headers()
3277
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
280 if self.DEBUG_MODE:
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
281 try:
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
282 reload(cgitb)
5431
4c724ad7b849 Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5426
diff changeset
283 self.wfile.write(s2b(cgitb.breaker()))
4c724ad7b849 Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5426
diff changeset
284 self.wfile.write(s2b(cgitb.html()))
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
285 except Exception:
5418
55f09ca366c4 Python 3 preparation: StringIO.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5410
diff changeset
286 s = StringIO()
3277
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
287 traceback.print_exc(None, s)
5431
4c724ad7b849 Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5426
diff changeset
288 self.wfile.write(b"<pre>")
5800
1a835db41674 Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents: 5712
diff changeset
289 self.wfile.write(s2b(html_escape(s.getvalue())))
5431
4c724ad7b849 Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5426
diff changeset
290 self.wfile.write(b"</pre>\n")
3277
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
291 else:
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
292 # user feedback
5431
4c724ad7b849 Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5426
diff changeset
293 self.wfile.write(s2b(cgitb.breaker()))
3277
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
294 ts = time.ctime()
5431
4c724ad7b849 Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5426
diff changeset
295 self.wfile.write(s2b('''<p>%s: An error occurred. Please check
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
296 the server log for more information.</p>''' % ts))
3277
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
297 # out to the logfile
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
298 print('EXCEPTION AT', ts)
3277
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
299 traceback.print_exc()
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
300
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
301 do_GET = do_POST = do_HEAD = do_PUT = do_DELETE = \
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
302 do_PATCH = do_OPTIONS = run_cgi
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
303
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
304 def index(self):
1251
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
305 ''' Print up an index of the available trackers
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
306 '''
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5386
diff changeset
307 keys = list(self.TRACKER_HOMES.keys())
3205
dbd6ba721943 if there is only one tracker, redirect from trackers list to the tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3112
diff changeset
308 if len(keys) == 1:
dbd6ba721943 if there is only one tracker, redirect from trackers list to the tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3112
diff changeset
309 self.send_response(302)
5402
88dbacd11cd1 Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5398
diff changeset
310 self.send_header('Location', urllib_.quote(keys[0]) + '/index')
3849
9d37a6779530 End headers when redirecting to tracker. Closes [SF#1706114].
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3787
diff changeset
311 self.end_headers()
3205
dbd6ba721943 if there is only one tracker, redirect from trackers list to the tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3112
diff changeset
312 else:
dbd6ba721943 if there is only one tracker, redirect from trackers list to the tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3112
diff changeset
313 self.send_response(200)
3880
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
314
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
315 self.send_header('Content-Type', 'text/html')
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
316 self.end_headers()
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
317 w = self.wfile.write
3880
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
318
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
319 if self.CONFIG and self.CONFIG['TEMPLATE']:
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
320 template = open(self.CONFIG['TEMPLATE']).read()
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
321 pt = PageTemplate()
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
322 pt.write(template)
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
323 extra = {'trackers': self.TRACKERS,
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
324 'nothing': None,
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
325 'true': 1,
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
326 'false': 0}
5431
4c724ad7b849 Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5426
diff changeset
327 w(s2b(pt.pt_render(extra_context=extra)))
3880
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
328 else:
5431
4c724ad7b849 Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5426
diff changeset
329 w(s2b(_('<html><head><title>Roundup trackers index</title></head>\n'
4c724ad7b849 Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5426
diff changeset
330 '<body><h1>Roundup trackers index</h1><ol>\n')))
3880
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
331 keys.sort()
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
332 for tracker in keys:
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
333 w(s2b('<li><a href="%(tracker_url)s/index">%(tracker_name)s</a>\n' % {
5402
88dbacd11cd1 Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5398
diff changeset
334 'tracker_url': urllib_.quote(tracker),
5800
1a835db41674 Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents: 5712
diff changeset
335 'tracker_name': html_escape(tracker)}))
5431
4c724ad7b849 Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5426
diff changeset
336 w(b'</ol></body></html>')
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
337
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
338 def inner_run_cgi(self):
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
339 ''' This is the inner part of the CGI handling
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
340 '''
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
341
4912
a0a7a6ca1586 roundup_server: Code untangle - init `rest` variable when necessary
anatoly techtonik <techtonik@gmail.com>
parents: 4911
diff changeset
342 # self.path is /some/path?with&all=stuff
a0a7a6ca1586 roundup_server: Code untangle - init `rest` variable when necessary
anatoly techtonik <techtonik@gmail.com>
parents: 4911
diff changeset
343 if self.path == '/favicon.ico':
4911
0997d4d8e76c roundup_server: Code cleanup - move favicon object into its section
anatoly techtonik <techtonik@gmail.com>
parents: 4769
diff changeset
344 # file-like object for the favicon.ico file information
0997d4d8e76c roundup_server: Code cleanup - move favicon object into its section
anatoly techtonik <techtonik@gmail.com>
parents: 4769
diff changeset
345 favicon_fileobj = None
3438
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
346
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
347 # check to see if a custom favicon was specified, and set
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
348 # favicon_fileobj to the input file
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
349 if self.CONFIG is not None:
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
350 favicon_filepath = os.path.abspath(self.CONFIG['FAVICON'])
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
351
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
352 if os.access(favicon_filepath, os.R_OK):
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
353 favicon_fileobj = open(favicon_filepath, 'rb')
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
354
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
355 if favicon_fileobj is None:
5418
55f09ca366c4 Python 3 preparation: StringIO.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5410
diff changeset
356 favicon_fileobj = io.BytesIO(favico)
3438
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
357
2176
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
358 self.send_response(200)
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
359 self.send_header('Content-Type', 'image/x-icon')
6528
6cf050b43eaf Send content-length for /favico.ico
John Rouillard <rouilj@ieee.org>
parents: 6514
diff changeset
360 self.send_header('Content-Length', len(favico))
6529
c3dfc4977ec6 Cache /favicon.ico
John Rouillard <rouilj@ieee.org>
parents: 6528
diff changeset
361 self.send_header('Cache-Control', "public, max-age=86400")
2176
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
362 self.end_headers()
3438
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
363
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
364 # this bufsize is completely arbitrary, I picked 4K because
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
365 # it sounded good. if someone knows of a better buffer size,
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
366 # feel free to plug it in.
3438
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
367 bufsize = 4 * 1024
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
368 Processing = True
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
369 while Processing:
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
370 data = favicon_fileobj.read(bufsize)
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
371 if len(data) > 0:
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
372 self.wfile.write(data)
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
373 else:
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
374 Processing = False
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
375
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
376 favicon_fileobj.close()
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
377
2176
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
378 return
1611
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
379
4912
a0a7a6ca1586 roundup_server: Code untangle - init `rest` variable when necessary
anatoly techtonik <techtonik@gmail.com>
parents: 4911
diff changeset
380 i = self.path.rfind('?')
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
381 if i >= 0:
4912
a0a7a6ca1586 roundup_server: Code untangle - init `rest` variable when necessary
anatoly techtonik <techtonik@gmail.com>
parents: 4911
diff changeset
382 # rest starts with /, query is without ?
a0a7a6ca1586 roundup_server: Code untangle - init `rest` variable when necessary
anatoly techtonik <techtonik@gmail.com>
parents: 4911
diff changeset
383 rest, query = self.path[:i], self.path[i+1:]
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
384 else:
4912
a0a7a6ca1586 roundup_server: Code untangle - init `rest` variable when necessary
anatoly techtonik <techtonik@gmail.com>
parents: 4911
diff changeset
385 rest = self.path
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
386 query = ''
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
387
1473
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
388 # no tracker - spit out the index
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
389 if rest == '/':
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
390 self.index()
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
391 return
1473
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
392
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
393 # figure the tracker
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
394 l_path = rest.split('/')
5402
88dbacd11cd1 Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5398
diff changeset
395 tracker_name = urllib_.unquote(l_path[1]).lower()
1473
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
396
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
397 # handle missing trailing '/'
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
398 if len(l_path) == 2:
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
399 self.send_response(301)
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
400 # redirect - XXX https??
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
401 protocol = 'http'
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
402 url = '%s://%s%s/' % (protocol, self.headers['host'], rest)
4913
8f6cfe824c9f roundup_server: Fix endless redirect on http://localhost:8917/demo?anything
anatoly techtonik <techtonik@gmail.com>
parents: 4912
diff changeset
403 if query:
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
404 url += '?' + query
1473
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
405 self.send_header('Location', url)
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
406 self.end_headers()
5431
4c724ad7b849 Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5426
diff changeset
407 self.wfile.write(b'Moved Permanently')
1473
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
408 return
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
409
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
410 # figure out what the rest of the path is
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
411 if len(l_path) > 2:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
412 rest = '/'.join(l_path[2:])
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
413 else:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
414 rest = '/'
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
415
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
416 # Set up the CGI environment
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
417 env = {}
1251
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
418 env['TRACKER_NAME'] = tracker_name
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
419 env['REQUEST_METHOD'] = self.command
5402
88dbacd11cd1 Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5398
diff changeset
420 env['PATH_INFO'] = urllib_.unquote(rest)
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
421 if query:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
422 env['QUERY_STRING'] = query
5432
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
423 if hasattr(self.headers, 'get_content_type'):
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
424 # Python 3. We need the raw header contents.
5667
5ad31de777a8 Prevent env['CONTENT_TYPE'] from being None. FieldStorage's content
John Rouillard <rouilj@ieee.org>
parents: 5624
diff changeset
425 content_type = self.headers.get('content-type')
5432
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
426 elif self.headers.typeheader is None:
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
427 # Python 2.
5667
5ad31de777a8 Prevent env['CONTENT_TYPE'] from being None. FieldStorage's content
John Rouillard <rouilj@ieee.org>
parents: 5624
diff changeset
428 content_type = self.headers.type
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
429 else:
5432
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
430 # Python 2.
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
431 content_type = self.headers.typeheader
5667
5ad31de777a8 Prevent env['CONTENT_TYPE'] from being None. FieldStorage's content
John Rouillard <rouilj@ieee.org>
parents: 5624
diff changeset
432 if content_type:
5ad31de777a8 Prevent env['CONTENT_TYPE'] from being None. FieldStorage's content
John Rouillard <rouilj@ieee.org>
parents: 5624
diff changeset
433 env['CONTENT_TYPE'] = content_type
5432
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
434 length = self.headers.get('content-length')
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
435 if length:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
436 env['CONTENT_LENGTH'] = length
5432
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
437 if hasattr(self.headers, 'get_all'):
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
438 # Python 3.
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
439 ch = self.headers.get_all('cookie', [])
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
440 else:
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
441 # Python 2.
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
442 ch = self.headers.getheaders('cookie')
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
443 co = list(filter(None, ch))
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
444 if co:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
445 env['HTTP_COOKIE'] = ', '.join(co)
5432
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
446 env['HTTP_AUTHORIZATION'] = self.headers.get('authorization')
6436
1f2f7c0b8968 issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents: 6420
diff changeset
447 # self.CONFIG['INCLUDE_HEADERS'] is a list.
1f2f7c0b8968 issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents: 6420
diff changeset
448 for h in self.CONFIG['INCLUDE_HEADERS']:
1f2f7c0b8968 issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents: 6420
diff changeset
449 env[h] = self.headers.get(h, None)
1f2f7c0b8968 issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents: 6420
diff changeset
450 # if header is MISSING
1f2f7c0b8968 issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents: 6420
diff changeset
451 if env[h] is None:
1f2f7c0b8968 issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents: 6420
diff changeset
452 del(env[h])
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
453 env['SCRIPT_NAME'] = ''
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
454 env['SERVER_NAME'] = self.server.server_name
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
455 env['SERVER_PORT'] = str(self.server.server_port)
4290
236939e4137b - small typo
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4276
diff changeset
456 try:
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
457 env['HTTP_HOST'] = self.headers['host']
4290
236939e4137b - small typo
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4276
diff changeset
458 except KeyError:
236939e4137b - small typo
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4276
diff changeset
459 env['HTTP_HOST'] = ''
5303
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
460 # https://tools.ietf.org/html/draft-ietf-appsawg-http-forwarded-10
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
461 # headers.
5432
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
462 xfh = self.headers.get('X-Forwarded-Host', None)
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5102
diff changeset
463 if xfh:
5303
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
464 # If behind a proxy, this is the hostname supplied
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
465 # via the Host header to the proxy. Used by core code.
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
466 # Controlled by the CSRF settings.
5624
b3618882f906 issue2551023: Fix CSRF headers for use with wsgi and cgi. The
John Rouillard <rouilj@ieee.org>
parents: 5608
diff changeset
467 env['HTTP_X_FORWARDED_HOST'] = xfh
5432
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
468 xff = self.headers.get('X-Forwarded-For', None)
5303
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
469 if xff:
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
470 # xff is a list of ip addresses for original client/proxies:
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
471 # X-Forwarded-For: clientIP, proxy1IP, proxy2IP
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
472 # May not be trustworthy. Do not use in core without
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
473 # config option to control its use.
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
474 # Made available for extensions if the user trusts it.
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
475 # E.g. you may wish to disable recaptcha validation extension
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
476 # if the ip of the client matches 172.16.0.0.
5624
b3618882f906 issue2551023: Fix CSRF headers for use with wsgi and cgi. The
John Rouillard <rouilj@ieee.org>
parents: 5608
diff changeset
477 env['HTTP_X_FORWARDED_FOR'] = xff
5432
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
478 xfp = self.headers.get('X-Forwarded-Proto', None)
5303
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
479 if xfp:
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
480 # xfp is the protocol (http/https) seen by proxies in the
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
481 # path of the request. I am not sure if there is only
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
482 # one value or multiple, but I suspect multiple
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
483 # is possible so:
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
484 # X-Forwarded-Proto: https, http
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
485 # is expected if the path is:
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
486 # client -> proxy1 -> proxy2 -> back end server
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
487 # an proxy1 is an SSL terminator.
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
488 # May not be trustworthy. Do not use in core without
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
489 # config option to control its use.
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
490 # Made available for extensions if the user trusts it.
5624
b3618882f906 issue2551023: Fix CSRF headers for use with wsgi and cgi. The
John Rouillard <rouilj@ieee.org>
parents: 5608
diff changeset
491 env['HTTP_X_FORWARDED_PROTO'] = xfp
5381
0942fe89e82e Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents: 5378
diff changeset
492 if 'CGI_SHOW_TIMING' in os.environ:
2943
996e2bab8d8a propagate CGI_SHOW_TIMING from os.environ to request environment
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2852
diff changeset
493 env['CGI_SHOW_TIMING'] = os.environ['CGI_SHOW_TIMING']
3574
7bf2b4523b75 fix failure with browsers not sending "Accept-Language" header [SF#1435335]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3438
diff changeset
494 env['HTTP_ACCEPT_LANGUAGE'] = self.headers.get('accept-language')
5201
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5102
diff changeset
495 referer = self.headers.get('Referer')
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5102
diff changeset
496 if referer:
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5102
diff changeset
497 env['HTTP_REFERER'] = referer
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5102
diff changeset
498 origin = self.headers.get('Origin')
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5102
diff changeset
499 if origin:
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5102
diff changeset
500 env['HTTP_ORIGIN'] = origin
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5102
diff changeset
501 xrw = self.headers.get('x-requested-with')
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5102
diff changeset
502 if xrw:
5624
b3618882f906 issue2551023: Fix CSRF headers for use with wsgi and cgi. The
John Rouillard <rouilj@ieee.org>
parents: 5608
diff changeset
503 env['HTTP_X_REQUESTED_WITH'] = xrw
5432
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
504 range = self.headers.get('range')
4475
207499c0a3ed Range support in roundup-server so large files can be served...
Bernhard Reiter <Bernhard.Reiter@intevation.de>
parents: 4344
diff changeset
505 if range:
207499c0a3ed Range support in roundup-server so large files can be served...
Bernhard Reiter <Bernhard.Reiter@intevation.de>
parents: 4344
diff changeset
506 env['HTTP_RANGE'] = range
6646
98a9df71e24c If-Range doesn't work with roundup-server.
John Rouillard <rouilj@ieee.org>
parents: 6529
diff changeset
507 if_range = self.headers.get('if-range')
98a9df71e24c If-Range doesn't work with roundup-server.
John Rouillard <rouilj@ieee.org>
parents: 6529
diff changeset
508 if range:
98a9df71e24c If-Range doesn't work with roundup-server.
John Rouillard <rouilj@ieee.org>
parents: 6529
diff changeset
509 env['HTTP_IF_RANGE'] = if_range
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
510
2848
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
511 # do the roundup thing
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
512 tracker = self.get_tracker(tracker_name)
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
513 tracker.Client(tracker, self, env).main()
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
514
1735
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
515 def address_string(self):
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
516 if self.LOG_IPADDRESS:
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
517 return self.client_address[0]
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
518 else:
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
519 host, port = self.client_address
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
520 return socket.getfqdn(host)
1632
eb4d04a9d647 added Windows Service mode for roundup-server...
Richard Jones <richard@users.sourceforge.net>
parents: 1611
diff changeset
521
2021
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
522 def log_message(self, format, *args):
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
523 ''' Try to *safely* log to stderr.
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
524 '''
5323
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
525 if self.CONFIG['LOGHTTPVIALOGGER']:
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
526 logger = logging.getLogger('roundup.http')
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
527
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
528 logger.info("%s - - [%s] %s" %
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
529 (self.client_address[0],
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
530 self.log_date_time_string(),
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
531 format % args))
5323
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
532 else:
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
533 try:
5409
277e91bf7936 Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5405
diff changeset
534 http_.server.BaseHTTPRequestHandler.log_message(self,
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
535 format, *args)
5323
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
536 except IOError:
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
537 # stderr is no longer viable
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
538 pass
2021
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
539
3736
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents: 3733
diff changeset
540 def start_response(self, headers, response):
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents: 3733
diff changeset
541 self.send_response(response)
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents: 3733
diff changeset
542 for key, value in headers:
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents: 3733
diff changeset
543 self.send_header(key, value)
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents: 3733
diff changeset
544 self.end_headers()
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents: 3733
diff changeset
545
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
546
1871
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
547 def error():
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
548 exc_type, exc_value = sys.exc_info()[:2]
6133
e7cb0147e6fe Make format strings use named placeholders rather than %s/%r
John Rouillard <rouilj@ieee.org>
parents: 6081
diff changeset
549 return _('Error: %(type)s: %(value)s' % {'type': exc_type,
e7cb0147e6fe Make format strings use named placeholders rather than %s/%r
John Rouillard <rouilj@ieee.org>
parents: 6081
diff changeset
550 'value': exc_value})
1871
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
551
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
552
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
553 def setgid(group):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
554 if group is None:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
555 return
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
556 if not hasattr(os, 'setgid'):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
557 return
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
558
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
559 # if root, setgid to the running user
3279
6e7462bbafde fix setgid typo [SF#1171346]
Richard Jones <richard@users.sourceforge.net>
parents: 3277
diff changeset
560 if os.getuid():
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
561 print(_('WARNING: ignoring "-g" argument, not root'))
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
562 return
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
563
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
564 try:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
565 import grp
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
566 except ImportError:
5378
35ea9b1efc14 Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5376
diff changeset
567 raise ValueError(_("Can't change groups - no grp module"))
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
568 try:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
569 try:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
570 gid = int(group)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
571 except ValueError:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
572 gid = grp.getgrnam(group)[2]
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
573 else:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
574 grp.getgrgid(gid)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
575 except KeyError:
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
576 raise ValueError(_("Group %(group)s doesn't exist") % locals())
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
577 os.setgid(gid)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
578
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
579
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
580 def setuid(user):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
581 if not hasattr(os, 'getuid'):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
582 return
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
583
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
584 # People can remove this check if they're really determined
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
585 if user is None:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
586 if os.getuid():
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
587 return
5378
35ea9b1efc14 Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5376
diff changeset
588 raise ValueError(_("Can't run as root!"))
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
589
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
590 if os.getuid():
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
591 print(_('WARNING: ignoring "-u" argument, not root'))
3733
2addec69757a fix: setuid called when run by non-root
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
592 return
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
593
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
594 try:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
595 import pwd
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
596 except ImportError:
5378
35ea9b1efc14 Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5376
diff changeset
597 raise ValueError(_("Can't change users - no pwd module"))
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
598 try:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
599 try:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
600 uid = int(user)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
601 except ValueError:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
602 uid = pwd.getpwnam(user)[2]
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
603 else:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
604 pwd.getpwuid(uid)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
605 except KeyError:
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
606 raise ValueError(_("User %(user)s doesn't exist") % locals())
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
607 os.setuid(uid)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
608
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
609
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
610 class TrackerHomeOption(configuration.FilePathOption):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
611
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
612 # Tracker homes do not need any description strings
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
613 def format(self):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
614 return "%(name)s = %(value)s\n" % {
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
615 "name": self.setting,
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
616 "value": self.value2str(self._value),
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
617 }
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
618
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
619
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
620 class ServerConfig(configuration.Config):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
621
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
622 SETTINGS = (
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
623 ("main", (
4489
47bd330e3d17 Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4475
diff changeset
624 (configuration.Option, "host", "localhost",
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
625 "Host name of the Roundup web server instance.\n"
4489
47bd330e3d17 Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4475
diff changeset
626 "If left unconfigured (no 'host' setting) the default\n"
47bd330e3d17 Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4475
diff changeset
627 "will be used.\n"
47bd330e3d17 Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4475
diff changeset
628 "If empty, listen on all network interfaces.\n"
47bd330e3d17 Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4475
diff changeset
629 "If you want to explicitly listen on all\n"
47bd330e3d17 Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4475
diff changeset
630 "network interfaces, the address 0.0.0.0 is a more\n"
47bd330e3d17 Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4475
diff changeset
631 "explicit way to achieve this, the use of an empty\n"
47bd330e3d17 Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4475
diff changeset
632 "string for this purpose is deprecated and will go away\n"
47bd330e3d17 Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4475
diff changeset
633 "in a future release."),
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
634 (configuration.IntegerNumberOption, "port", DEFAULT_PORT,
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
635 "Port to listen on."),
3438
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
636 (configuration.NullableFilePathOption, "favicon", "favicon.ico",
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
637 "Path to favicon.ico image file."
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
638 " If unset, built-in favicon.ico is used."),
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
639 (configuration.NullableOption, "user", "",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
640 "User ID as which the server will answer requests.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
641 "In order to use this option, "
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
642 "the server must be run initially as root.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
643 "Availability: Unix."),
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
644 (configuration.NullableOption, "group", "",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
645 "Group ID as which the server will answer requests.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
646 "In order to use this option, "
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
647 "the server must be run initially as root.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
648 "Availability: Unix."),
3787
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
649 (configuration.BooleanOption, "nodaemon", "no",
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
650 "don't fork (this overrides the pidfile mechanism)'"),
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
651 (configuration.BooleanOption, "log_hostnames", "no",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
652 "Log client machine names instead of IP addresses "
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
653 "(much slower)"),
5323
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
654 (configuration.BooleanOption, "loghttpvialogger", "no",
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
655 "Have http(s) request logging done via python logger module.\n"
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
656 "If set to yes the python logging module is used with "
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
657 "qualname\n'roundup.http'. Otherwise logging is done to "
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
658 "stderr or the file\nspecified using the -l/logfile option."),
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
659 (configuration.NullableFilePathOption, "pidfile", "",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
660 "File to which the server records "
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
661 "the process id of the daemon.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
662 "If this option is not set, "
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
663 "the server will run in foreground\n"),
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
664 (configuration.NullableFilePathOption, "logfile", "",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
665 "Log file path. If unset, log to stderr."),
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
666 (configuration.Option, "multiprocess", DEFAULT_MULTIPROCESS,
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
667 "Set processing of each request in separate subprocess.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
668 "Allowed values: %s." % ", ".join(MULTIPROCESS_TYPES)),
3880
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
669 (configuration.NullableFilePathOption, "template", "",
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
670 "Tracker index template. If unset, built-in will be used."),
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
671 (configuration.BooleanOption, "ssl", "no",
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
672 "Enable SSL support (requires pyopenssl)"),
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
673 (configuration.NullableFilePathOption, "pem", "",
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
674 "PEM file used for SSL. A temporary self-signed certificate\n"
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
675 "will be used if left blank."),
6436
1f2f7c0b8968 issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents: 6420
diff changeset
676 (configuration.WordListOption, "include_headers", "",
1f2f7c0b8968 issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents: 6420
diff changeset
677 "Comma separated list of extra headers that should\n"
1f2f7c0b8968 issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents: 6420
diff changeset
678 "be copied into the CGI environment.\n"
6514
a036712c96f4 Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents: 6502
diff changeset
679 "E.G. if you want to access the REMOTE_USER and\n"
6436
1f2f7c0b8968 issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents: 6420
diff changeset
680 "X-Proxy-User headers in the back end,\n"
1f2f7c0b8968 issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents: 6420
diff changeset
681 "set to the value REMOTE_USER,X-Proxy-User."),
6514
a036712c96f4 Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents: 6502
diff changeset
682 (configuration.HttpVersionOption, "http_version", "HTTP/1.1",
a036712c96f4 Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents: 6502
diff changeset
683 "Change to HTTP/1.0 if needed. This disables keepalive."),
a036712c96f4 Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents: 6502
diff changeset
684
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
685 )),
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
686 ("trackers", (), "Roundup trackers to serve.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
687 "Each option in this section defines single Roundup tracker.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
688 "Option name identifies the tracker and will appear in the URL.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
689 "Option value is tracker home directory path.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
690 "The path may be either absolute or relative\n"
5102
96dc9f07340a issue2161722: oudated docs
John Rouillard <rouilj@ieee.org>
parents: 4913
diff changeset
691 "to the directory containing this config file."),
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
692 )
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
693
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
694 # options recognized by config
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
695 OPTIONS = {
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
696 "host": "n:",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
697 "port": "p:",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
698 "group": "g:",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
699 "user": "u:",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
700 "logfile": "l:",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
701 "pidfile": "d:",
3784
93dfda74a763 allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents: 3736
diff changeset
702 "nodaemon": "D",
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
703 "log_hostnames": "N",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
704 "multiprocess": "t:",
3884
1165f2204542 Ooops...not sure where those tabs came from. Making them spaces.
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3883
diff changeset
705 "template": "i:",
5323
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
706 "loghttpvialogger": 'L',
3884
1165f2204542 Ooops...not sure where those tabs came from. Making them spaces.
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3883
diff changeset
707 "ssl": "s",
1165f2204542 Ooops...not sure where those tabs came from. Making them spaces.
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3883
diff changeset
708 "pem": "e:",
6436
1f2f7c0b8968 issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents: 6420
diff changeset
709 "include_headers": "I:",
6514
a036712c96f4 Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents: 6502
diff changeset
710 "http_version": 'V:',
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
711 }
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
712
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
713 def __init__(self, config_file=None):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
714 configuration.Config.__init__(self, config_file, self.SETTINGS)
3022
9523de67ecad merge from maint-0-8
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2943
diff changeset
715 self.sections.append("trackers")
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
716
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
717 def _adjust_options(self, config):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
718 """Add options for tracker homes"""
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
719 # return early if there are no tracker definitions.
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
720 # trackers must be specified on the command line.
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
721 if not config.has_section("trackers"):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
722 return
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
723 # config defaults appear in all sections.
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
724 # filter them out.
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5386
diff changeset
725 defaults = list(config.defaults().keys())
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
726 for name in config.options("trackers"):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
727 if name not in defaults:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
728 self.add_option(TrackerHomeOption(self, "trackers", name))
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
729
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
730 def getopt(self, args, short_options="", long_options=(),
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
731 config_load_options=("C", "config"), **options):
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
732 options.update(self.OPTIONS)
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
733 return configuration.Config.getopt(
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
734 self, args, short_options, long_options,
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
735 config_load_options, **options)
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
736
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
737 def _get_name(self):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
738 return "Roundup server"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
739
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
740 def trackers(self):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
741 """Return tracker definitions as a list of (name, home) pairs"""
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
742 trackers = []
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
743 for option in self._get_section_options("trackers"):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
744 trackers.append((option, os.path.abspath(
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
745 self["TRACKERS_" + option.upper()])))
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
746 return trackers
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
747
3112
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
748 def set_logging(self):
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
749 """Initialise logging to the configured file, if any."""
5523
fb9abb842f36 Fix roundup-server logging for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5432
diff changeset
750 # appending, line-buffered (Python 3 does not allow unbuffered
fb9abb842f36 Fix roundup-server logging for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5432
diff changeset
751 # text files)
fb9abb842f36 Fix roundup-server logging for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5432
diff changeset
752 sys.stdout = sys.stderr = open(self["LOGFILE"], 'a', 1)
3112
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
753
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
754 def get_server(self):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
755 """Return HTTP server object to run"""
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
756 # we don't want the cgi module interpreting the command-line args ;)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
757 sys.argv = sys.argv[:1]
3277
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
758
2848
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
759 # preload all trackers unless we are in "debug" mode
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
760 tracker_homes = self.trackers()
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
761 if self["MULTIPROCESS"] == "debug":
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
762 trackers = None
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
763 else:
2852
37e6ebd5ba29 when preloading trackers (not running in 'debug' mode)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2848
diff changeset
764 trackers = dict([(name, roundup.instance.open(home, optimize=1))
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
765 for (name, home) in tracker_homes])
3277
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
766
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
767 # build customized request handler class
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
768 class RequestHandler(RoundupRequestHandler):
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
769 LOG_IPADDRESS = not self["LOG_HOSTNAMES"]
2848
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
770 TRACKER_HOMES = dict(tracker_homes)
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
771 TRACKERS = trackers
3277
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
772 DEBUG_MODE = self["MULTIPROCESS"] == "debug"
3438
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
773 CONFIG = self
3277
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
774
4276
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
775 def setup(self):
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
776 if self.CONFIG["SSL"]:
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
777 # perform initial ssl handshake. This will set
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
778 # internal state correctly so that later closing SSL
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
779 # socket works (with SSL end-handshake started)
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
780 self.request.do_handshake()
6514
a036712c96f4 Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents: 6502
diff changeset
781 RoundupRequestHandler.protocol_version = \
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
782 self.CONFIG["HTTP_VERSION"]
4276
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
783 RoundupRequestHandler.setup(self)
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
784
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
785 def finish(self):
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
786 RoundupRequestHandler.finish(self)
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
787 if self.CONFIG["SSL"]:
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
788 self.request.shutdown()
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
789 self.request.close()
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
790
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
791 if self["SSL"]:
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
792 base_server = SecureHTTPServer
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
793 else:
4273
0a684518d609 More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4258
diff changeset
794 # time out after a minute if we can
0a684518d609 More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4258
diff changeset
795 # This sets the socket to non-blocking. SSL needs a blocking
0a684518d609 More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4258
diff changeset
796 # socket, so we do this only for non-SSL connections.
0a684518d609 More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4258
diff changeset
797 if hasattr(socket, 'setdefaulttimeout'):
0a684518d609 More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4258
diff changeset
798 socket.setdefaulttimeout(60)
5409
277e91bf7936 Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5405
diff changeset
799 base_server = http_.server.HTTPServer
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
800
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
801 # obtain request server class
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
802 if self["MULTIPROCESS"] not in MULTIPROCESS_TYPES:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
803 print(_("Multiprocess mode \"%s\" is not available, "
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
804 "switching to single-process") % self["MULTIPROCESS"])
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
805 self["MULTIPROCESS"] = "none"
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
806 server_class = base_server
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
807 elif self["MULTIPROCESS"] == "fork":
5410
d0816d50ee8f Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5409
diff changeset
808 class ForkingServer(socketserver.ForkingMixIn,
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
809 base_server):
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
810 pass
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
811 server_class = ForkingServer
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
812 elif self["MULTIPROCESS"] == "thread":
5410
d0816d50ee8f Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5409
diff changeset
813 class ThreadingServer(socketserver.ThreadingMixIn,
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
814 base_server):
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
815 pass
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
816 server_class = ThreadingServer
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
817 else:
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
818 server_class = base_server
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
819
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
820 # obtain server before changing user id - allows to
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
821 # use port < 1024 if started as root
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
822 try:
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
823 args = ((self["HOST"], self["PORT"]), RequestHandler)
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
824 kwargs = {}
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
825 if self["SSL"]:
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
826 kwargs['ssl_pem'] = self["PEM"]
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
827 httpd = server_class(*args, **kwargs)
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5201
diff changeset
828 except socket.error as e:
5712
320a1692a473 Fix exception handling code for case where port already in use.
John Rouillard <rouilj@ieee.org>
parents: 5667
diff changeset
829 if e.args[0] == errno.EADDRINUSE:
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
830 raise socket.error(_("Unable to bind to port %s, "
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
831 "port already in use.") % self["PORT"])
6743
d659cfa8439c Make roundup-server EACCES errors clearer
John Rouillard <rouilj@ieee.org>
parents: 6718
diff changeset
832 if e.args[0] == errno.EACCES:
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
833 raise socket.error(_(
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
834 "Unable to bind to port %(port)s, "
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
835 "access not allowed, "
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
836 "errno: %(errno)s %(msg)s" % {
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
837 "port": self["PORT"],
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
838 "errno": e.args[0],
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
839 "msg": e.args[1]}
6743
d659cfa8439c Make roundup-server EACCES errors clearer
John Rouillard <rouilj@ieee.org>
parents: 6718
diff changeset
840 ))
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
841
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
842 raise
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
843 # change user and/or group
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
844 setgid(self["GROUP"])
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
845 setuid(self["USER"])
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
846 # return the server
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
847 return httpd
2230
ca2664e095be disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents: 2200
diff changeset
848
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
849
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
850 try:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
851 import win32serviceutil
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
852 except ImportError:
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
853 RoundupService = None
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
854 else:
2230
ca2664e095be disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents: 2200
diff changeset
855
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
856 # allow the win32
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
857 import win32service
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
858
5266
e9158c0a6eba Python 2 and 3 support. Convert Exception to BaseException scripts.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
859 class SvcShutdown(BaseException):
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
860 pass
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
861
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
862 class RoundupService(win32serviceutil.ServiceFramework):
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
863
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
864 _svc_name_ = "roundup"
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
865 _svc_display_name_ = "Roundup Bug Tracker"
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
866
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
867 running = 0
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
868 server = None
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
869
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
870 def SvcDoRun(self):
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
871 import servicemanager
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
872 self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
873 config = ServerConfig()
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
874 (optlist, args) = config.getopt(sys.argv[1:])
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
875 if not config["LOGFILE"]:
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
876 servicemanager.LogMsg(
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
877 servicemanager.EVENTLOG_ERROR_TYPE,
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
878 servicemanager.PYS_SERVICE_STOPPED,
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
879 (self._svc_display_name_, "\r\nMissing logfile option"))
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
880 self.ReportServiceStatus(win32service.SERVICE_STOPPED)
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
881 return
3112
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
882 config.set_logging()
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
883 self.server = config.get_server()
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
884 self.running = 1
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
885 self.ReportServiceStatus(win32service.SERVICE_RUNNING)
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
886 servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
887 servicemanager.PYS_SERVICE_STARTED,
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
888 (self._svc_display_name_,
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
889 " at %s:%s" % (config["HOST"],
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
890 config["PORT"])))
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
891 while self.running:
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
892 self.server.handle_request()
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
893 servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
894 servicemanager.PYS_SERVICE_STOPPED,
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
895 (self._svc_display_name_, ""))
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
896 self.ReportServiceStatus(win32service.SERVICE_STOPPED)
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
897
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
898 def SvcStop(self):
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
899 self.running = 0
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
900 # make dummy connection to self to terminate blocking accept()
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
901 addr = self.server.socket.getsockname()
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
902 if addr[0] == "0.0.0.0":
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
903 addr = ("127.0.0.1", addr[1])
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
904 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
905 sock.connect(addr)
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
906 sock.close()
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
907 self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
908
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
909
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
910 def usage(message=''):
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
911 if RoundupService:
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
912 os_part = \
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
913 ""''' -c <Command> Windows Service options.
2521
8822780fa519 mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2483
diff changeset
914 If you want to run the server as a Windows Service, you
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
915 must use configuration file to specify tracker homes.
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
916 Logfile option is required to run Roundup Tracker service.
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
917 Typing "roundup-server -c help" shows Windows Services
2521
8822780fa519 mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2483
diff changeset
918 specifics.'''
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
919 else:
2521
8822780fa519 mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2483
diff changeset
920 os_part = ""''' -u <UID> runs the Roundup web server as this UID
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
921 -g <GID> runs the Roundup web server as this GID
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
922 -d <PIDfile> run the server in the background and write the server's PID
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
923 to the file indicated by PIDfile. The -l option *must* be
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
924 specified if -d is used.'''
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
925 if message:
6514
a036712c96f4 Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents: 6502
diff changeset
926 message += '\n\n'
a036712c96f4 Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents: 6502
diff changeset
927 print(_('''\n%(message)sUsage: roundup-server [options] [name=tracker home]*
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
928
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
929 Options:
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
930 -v print the Roundup version number and exit
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
931 -h print this text and exit
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
932 -S create or update configuration file and exit
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
933 -C <fname> use configuration file <fname>
4489
47bd330e3d17 Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4475
diff changeset
934 -n <name> set the host name of the Roundup web server instance,
47bd330e3d17 Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4475
diff changeset
935 specifies on which network interfaces to listen for
47bd330e3d17 Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4475
diff changeset
936 connections, defaults to localhost, use 0.0.0.0 to bind
47bd330e3d17 Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4475
diff changeset
937 to all network interfaces
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
938 -p <port> set the port to listen on (default: %(port)s)
6436
1f2f7c0b8968 issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents: 6420
diff changeset
939 -I <header1[,header2]*> list of headers to pass to the backend
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
940 -l <fname> log to the file indicated by fname instead of stderr/stdout
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
941 -N log client machine names instead of IP addresses (much slower)
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
942 -i <fname> set tracker index template
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
943 -s enable SSL
5323
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
944 -L http request logging uses python logging (roundup.http)
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
945 -e <fname> PEM file containing SSL key and certificate
2843
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
946 -t <mode> multiprocess mode (default: %(mp_def)s).
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
947 Allowed values: %(mp_types)s.
6514
a036712c96f4 Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents: 6502
diff changeset
948 -V <version> set HTTP version (default: HTTP/1.1).
a036712c96f4 Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents: 6502
diff changeset
949 Allowed values: HTTP/1.0, HTTP/1.1.
a036712c96f4 Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents: 6502
diff changeset
950
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
951 %(os_part)s
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
952
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
953 Long options:
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
954 --version print the Roundup version number and exit
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
955 --help print this text and exit
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
956 --save-config create or update configuration file and exit
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
957 --config <fname> use configuration file <fname>
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
958 All settings of the [main] section of the configuration file
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
959 also may be specified in form --<name>=<value>
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
960
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
961 Examples:
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
962
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
963 roundup-server -S -C /opt/roundup/etc/roundup-server.ini \\
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
964 -n localhost -p 8917 -l /var/log/roundup.log \\
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
965 support=/var/spool/roundup-trackers/support
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
966
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
967 roundup-server -C /opt/roundup/etc/roundup-server.ini
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
968
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
969 roundup-server support=/var/spool/roundup-trackers/support
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
970
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
971 roundup-server -d /var/run/roundup.pid -l /var/log/roundup.log \\
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
972 support=/var/spool/roundup-trackers/support
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
973
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
974 Configuration file format:
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
975 Roundup Server configuration file has common .ini file format.
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
976 Configuration file created with 'roundup-server -S' contains
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
977 detailed explanations for each option. Please see that file
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
978 for option descriptions.
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
979
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
980 How to use "name=tracker home":
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
981 These arguments set the tracker home(s) to use. The name is how the
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
982 tracker is identified in the URL (it's the first part of the URL path).
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
983 The tracker home is the directory that was identified when you did
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
984 "roundup-admin init". You may specify any number of these name=home
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
985 pairs on the command-line. Make sure the name part doesn't include
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
986 any url-unsafe characters like spaces, as these confuse IE.
2843
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
987 ''') % {
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
988 "message": message,
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
989 "os_part": os_part,
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
990 "port": DEFAULT_PORT,
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
991 "mp_def": DEFAULT_MULTIPROCESS,
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
992 "mp_types": ", ".join(MULTIPROCESS_TYPES),
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
993 })
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
994
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
995
3784
93dfda74a763 allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents: 3736
diff changeset
996 def writepidfile(pidfile):
93dfda74a763 allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents: 3736
diff changeset
997 ''' Write a pidfile (only). Do not daemonize. '''
93dfda74a763 allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents: 3736
diff changeset
998 pid = os.getpid()
93dfda74a763 allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents: 3736
diff changeset
999 if pid:
3787
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
1000 pidfile = open(pidfile, 'w')
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
1001 pidfile.write(str(pid))
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
1002 pidfile.close()
3784
93dfda74a763 allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents: 3736
diff changeset
1003
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1004
1072
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1005 def daemonize(pidfile):
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1006 ''' Turn this process into a daemon.
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1007 - make sure the sys.std(in|out|err) are completely cut off
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1008 - make our parent PID 1
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1009
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1010 Write our new PID to the pidfile.
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1011
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1012 From A.M. Kuuchling (possibly originally Greg Ward) with
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1013 modification from Oren Tirosh, and finally a small mod from me.
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1014 '''
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1015 # Fork once
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1016 if os.fork() != 0:
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1017 os._exit(0)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1018
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1019 # Create new session
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1020 os.setsid()
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1021
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1022 # Second fork to force PPID=1
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1023 pid = os.fork()
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1024 if pid:
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1025 pidfile = open(pidfile, 'w')
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1026 pidfile.write(str(pid))
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1027 pidfile.close()
2186
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2181
diff changeset
1028 os._exit(0)
1072
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1029
2186
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2181
diff changeset
1030 os.chdir("/")
1072
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1031
3112
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
1032 # close off std(in|out|err), redirect to devnull so the file
1072
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1033 # descriptors can't be used again
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1034 devnull = os.open('/dev/null', 0)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1035 os.dup2(devnull, 0)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1036 os.dup2(devnull, 1)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1037 os.dup2(devnull, 2)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1038
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1039
2637
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1040 undefined = []
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1041
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1042
2637
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1043 def run(port=undefined, success_message=None):
1249
6c24a86a12ae Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
1044 ''' Script entry point - handle args and figure out what to to.
6c24a86a12ae Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
1045 '''
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1046 config = ServerConfig()
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
1047 # additional options
5957
f822a91b3778 Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
1048 short_options = "hvSc"
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
1049 try:
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1050 (optlist, args) = config.getopt(sys.argv[1:],
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1051 short_options,
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1052 ("help", "version", "save-config",))
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5201
diff changeset
1053 except (getopt.GetoptError, configuration.ConfigurationError) as e:
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1054 usage(str(e))
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1055 return
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
1056
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1057 # if running in windows service mode, don't do any other stuff
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1058 if ("-c", "") in optlist:
5957
f822a91b3778 Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
1059 global RoundupService
f822a91b3778 Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
1060 if not RoundupService:
f822a91b3778 Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
1061 RoundupService = True # make sure usage displays -c help text
f822a91b3778 Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
1062 error_m = """
f822a91b3778 Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
1063 ERROR: -c is not available because roundup couldn't import
f822a91b3778 Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
1064 win32serviceutil from pywin32. See Installation docs
f822a91b3778 Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
1065 for pywin32 details.
f822a91b3778 Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
1066 """
f822a91b3778 Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
1067 usage(error_m)
f822a91b3778 Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
1068 return
f822a91b3778 Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
1069
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1070 # acquire command line options recognized by service
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
1071 short_options = "cC:"
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1072 long_options = ["config"]
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1073 for (long_name, short_name) in config.OPTIONS.items():
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1074 short_options += short_name
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1075 long_name = long_name.lower().replace("_", "-")
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1076 if short_name[-1] == ":":
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1077 long_name += "="
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1078 long_options.append(long_name)
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1079 optlist = getopt.getopt(sys.argv[1:], short_options, long_options)[0]
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1080 svc_args = []
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1081 for (opt, arg) in optlist:
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1082 if opt in ("-C", "-l"):
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1083 # make sure file name is absolute
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1084 svc_args.extend((opt, os.path.abspath(arg)))
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1085 elif opt in ("--config", "--logfile"):
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1086 # ditto, for long options
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1087 svc_args.append("=".join(opt, os.path.abspath(arg)))
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1088 elif opt != "-c":
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1089 svc_args.extend(opt)
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1090 RoundupService._exe_args_ = " ".join(svc_args)
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1091 # pass the control to serviceutil
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
1092 win32serviceutil.HandleCommandLine(RoundupService,
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1093 argv=sys.argv[:1] + args)
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
1094 return
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
1095
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1096 # add tracker names from command line.
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1097 # this is done early to let '--save-config' handle the trackers.
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1098 if args:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1099 for arg in args:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1100 try:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1101 name, home = arg.split('=')
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1102 except ValueError:
5378
35ea9b1efc14 Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5376
diff changeset
1103 raise ValueError(_("Instances must be name=home"))
2772
52460ff89e10 fix: tracker definitions from the command line...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2771
diff changeset
1104 config.add_option(TrackerHomeOption(config, "trackers", name))
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1105 config["TRACKERS_" + name.upper()] = home
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
1106
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1107 # handle remaining options
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1108 if optlist:
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1109 for (opt, _arg) in optlist:
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1110 if opt in ("-h", "--help"):
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1111 usage()
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1112 elif opt in ("-v", "--version"):
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
1113 print('%s (python %s)' % (roundup_version,
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1114 sys.version.split()[0]))
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1115 elif opt in ("-S", "--save-config"):
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1116 config.save()
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
1117 print(_("Configuration saved to %s") % config.filepath)
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1118 # any of the above options prevent server from running
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1119 return
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1120
2774
22c381f3f448 respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2773
diff changeset
1121 # port number in function arguments overrides config and command line
22c381f3f448 respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2773
diff changeset
1122 if port is not undefined:
22c381f3f448 respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2773
diff changeset
1123 config.PORT = port
22c381f3f448 respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2773
diff changeset
1124
3112
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
1125 if config["LOGFILE"]:
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
1126 config["LOGFILE"] = os.path.abspath(config["LOGFILE"])
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
1127 # switch logging from stderr/stdout to logfile
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
1128 config.set_logging()
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
1129 if config["PIDFILE"]:
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
1130 config["PIDFILE"] = os.path.abspath(config["PIDFILE"])
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
1131
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
1132 # fork the server from our parent if a pidfile is specified
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
1133 if config["PIDFILE"]:
1843
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
1134 if not hasattr(os, 'fork'):
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
1135 print(_("Sorry, you can't run the server as a daemon"
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1136 " on this Operating System"))
1409
8dc60d87ab42 Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents: 1367
diff changeset
1137 sys.exit(0)
1632
eb4d04a9d647 added Windows Service mode for roundup-server...
Richard Jones <richard@users.sourceforge.net>
parents: 1611
diff changeset
1138 else:
3787
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
1139 if config['NODAEMON']:
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
1140 writepidfile(config["PIDFILE"])
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
1141 else:
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
1142 daemonize(config["PIDFILE"])
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
1143
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
1144 # create the server
5712
320a1692a473 Fix exception handling code for case where port already in use.
John Rouillard <rouilj@ieee.org>
parents: 5667
diff changeset
1145 try:
320a1692a473 Fix exception handling code for case where port already in use.
John Rouillard <rouilj@ieee.org>
parents: 5667
diff changeset
1146 httpd = config.get_server()
320a1692a473 Fix exception handling code for case where port already in use.
John Rouillard <rouilj@ieee.org>
parents: 5667
diff changeset
1147 except Exception as e:
320a1692a473 Fix exception handling code for case where port already in use.
John Rouillard <rouilj@ieee.org>
parents: 5667
diff changeset
1148 # capture all exceptions and pretty print them
320a1692a473 Fix exception handling code for case where port already in use.
John Rouillard <rouilj@ieee.org>
parents: 5667
diff changeset
1149 print(e)
320a1692a473 Fix exception handling code for case where port already in use.
John Rouillard <rouilj@ieee.org>
parents: 5667
diff changeset
1150 sys.exit(2)
1047
1890c611de08 add daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 992
diff changeset
1151
1868
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1867
diff changeset
1152 if success_message:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
1153 print(success_message)
1868
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1867
diff changeset
1154 else:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
1155 print(_('Roundup server started on %(HOST)s:%(PORT)s')
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
1156 % config)
1868
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1867
diff changeset
1157
1311
7c9fda4a6692 handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents: 1299
diff changeset
1158 try:
7c9fda4a6692 handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents: 1299
diff changeset
1159 httpd.serve_forever()
7c9fda4a6692 handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents: 1299
diff changeset
1160 except KeyboardInterrupt:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
1161 print('Keyboard Interrupt: exiting')
6718
06d750efbc50 Fix ResourceWarning error due to unclosed socket on exit from roundup_server.
John Rouillard <rouilj@ieee.org>
parents: 6646
diff changeset
1162 httpd.socket.close()
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
1163
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1164
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
1165 if __name__ == '__main__':
593
2256f81293c1 Conversion to generated script stubs
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 592
diff changeset
1166 run()
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
1167
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
1168 # vim: sts=4 sw=4 et si

Roundup Issue Tracker: http://roundup-tracker.org/