Use long-form options in scripts for readability
[collab-maint/wiki.debian.org.git] / etc / moin / wikiconfig.py
1 # -*- coding: utf-8 -*-
2
3 import socket
4 import string
5 import sys
6 import re
7
8 from MoinMoin.config.multiconfig import DefaultConfig
9 from MoinMoin.security import Permissions
10
11 if sys.version_info < (2, 6):
12         null_translate_table = ''.join(chr(i) for i in xrange(256))
13 else:
14         null_translate_table = None
15
16 def load_file(path, validator=None):
17     f = open(path)
18     if f:
19         items = {}.fromkeys([item.strip() for item in f.readlines() if item.strip() and (not validator or validator(item.strip()))]).keys()
20         f.close()
21         return items
22     return []
23
24 def is_valid_ipv4_address(address):
25     try:
26         addr = socket.inet_pton(socket.AF_INET, address)
27     except AttributeError:
28         try:
29             addr = socket.inet_aton(address)
30         except socket.error:
31             return False
32     except socket.error:
33         return False
34     return True
35
36 def is_valid_ipv6_address(address):
37     try:
38         addr = socket.inet_pton(socket.AF_INET6, address)
39     except socket.error:
40         return False
41     return True
42
43 def is_valid_ipv4_net(address):
44     if address[-1] != '.':
45         return False
46     return True
47
48 def is_valid_ip(ip):
49     return is_valid_ipv4_address(ip) or is_valid_ipv6_address(ip) or is_valid_ipv4_net(ip)
50
51 def load_ip_blacklists():
52     files = ['/srv/wiki.debian.org/etc/moin/networks_deny',
53              '/srv/wiki.debian.org/etc/moin/hosts_deny',
54              '/srv/wiki.debian.org/etc/moin/hosts_deny_auto']
55     items = []
56     for blfile in files:
57         items.extend(load_file(blfile, is_valid_ip))
58
59     return items
60     
61 def load_spam_usernames():
62     return load_file('/srv/wiki.debian.org/etc/moin/spam_usernames')
63
64 spam_usernames = load_spam_usernames()
65
66 class Config(DefaultConfig):
67     surge_action_limits = None
68
69     # Superusers
70
71     superuser = [u"ErinnClark", u"PaulWise", u"FranklinPiat", u"SteveMcIntyre"]
72
73     log_reverse_dns_lookups = False
74
75     # Wiki identity ----------------------------------------------------
76
77     sitename = u'Debian Wiki'
78
79     interwikiname = None
80     
81     page_front_page = u"FrontPage"
82
83     # Critical setup  ---------------------------------------------------
84
85     data_dir = '/srv/wiki.debian.org/var/moin/data/'
86
87     data_underlay_dir = '/srv/wiki.debian.org/var/moin/underlay/'
88
89     url_prefix_local = '/htdocs'
90     url_prefix_static = '/htdocs'
91
92     shared_intermap = '/usr/share/moin/data/intermap.txt'
93
94     # Security ----------------------------------------------------------
95
96     # Added to mitigate unspecified security issues:
97     # http://moinmo.in/4ct10n/diff/SecurityFixes?action=diff&rev1=42&rev2=43
98     actions_excluded = ['xmlrpc', 'MyPages', 'CopyPage', 'SyncPages', 'twikidraw', 'anywikidraw', ]
99
100     acl_rights_default = "Trusted:read,write,delete,revert \
101                          Known:read,write,delete,revert \
102                          All:read"
103     acl_rights_before = "+ErinnClark,PaulWise,FranklinPiat,SteveMcIntyre:admin,read,write,delete,revert"
104     acl_rights_after = "All:read"
105
106     # Spammers
107     hosts_deny = load_ip_blacklists()
108
109     def password_checker(request, username, passwd):
110         for u in spam_usernames:
111             if username[:len(u)] == u or u in username:
112                 return 'Please choose another username, your choice was spammy'
113         if username[0].islower() and username[1].isupper() and len(str(username).translate(null_translate_table, string.ascii_lowercase+string.digits+string.whitespace)) == 2:
114                 return 'Please choose another username, your choice might be spammy'
115         if username[0].isupper() and username[1].isupper() and len(str(username)) >= 4:
116                 return 'Please choose another username, your choice might be spammy'
117         if re.match(r'[a-z]+_[a-z]+[0-9]+',username):
118                 return 'Please choose another username, your choice might be spammy'
119         return None
120
121     password_checker = staticmethod(password_checker)
122
123     from MoinMoin.security.antispam import SecurityPolicy
124
125     # Mail --------------------------------------------------------------
126
127     mail_smarthost = "localhost"
128
129     mail_from = "Debian Wiki <debian-www@lists.debian.org>"
130
131     mail_login = ""
132
133
134     # User interface ---------------------------------------------------=
135
136     navi_bar = [
137         u'%(page_front_page)s',
138         u'RecentChanges',
139         u'FindPage',
140         u'HelpContents',
141     ]
142
143     theme_default = 'debwiki'
144
145     # Language options --------------------------------------------------
146
147     language_default = 'en'
148
149     # Content options ---------------------------------------------------
150
151     show_hosts = 0
152
153     show_section_numbers = 0
154
155     chart_options = {'width': 600, 'height': 300}   
156
157     show_rename_redirect = True
158
159     # Search options ---------------------------------------------
160     xapian_search = True
161     xapian_stemming = True
162
163     # Site specific options ---------------------------------------------
164
165     # Enable the question mark for non-existing pagelinks by default
166     user_checkbox_defaults = {'show_nonexist_qm': 1}
167
168     # Recaptcha configuration. Used only at account creation time for now
169 #    recaptcha_private_key = load_file('/srv/wiki.debian.org/etc/moin/recaptcha_private.key')[0]
170 #    recaptcha_public_key = load_file('/srv/wiki.debian.org/etc/moin/recaptcha_public.key')[0]
171
172     # Require that new accounts are verified (by clicking on a link in
173     # their email) before they can be used. More anti-spam effort
174     require_email_verification = True
175     
176     # Call out to a script to allow/deny creation of a new
177     # account. Let's stop the spammers...
178     external_creation_check = "/srv/wiki.debian.org/bin/new-account-check"
179
180     # [JT - 2005-09-27]
181     bang_meta = 1
182
183     html_head = '<link rel="shortcut icon" href="/htdocs/favicon.ico">\n<script type="text/javascript" src="/htdocs/bugstatus.js"></script>\n'
184
185     stylesheets = [
186         ('all', '/htdocs/debian-wiki-1.0.css')
187     ]
188
189     history_count = (10000, 100000)
190
191     # The GUI WYSISYG editor is not installed with Debian.
192     # See /usr/share/doc/python-moinmoin/README.Debian for more info
193     editor_force = True
194     editor_default = 'text'  # internal default, just for completeness
195
196 #    log_timing = True
197 #    show_timings = True
198
199     # Page credits
200     page_credits = [
201         # default links
202         '<a href="http://moinmo.in/" title="This site uses the MoinMoin Wiki software.">MoinMoin Powered</a>',
203         '<a href="http://moinmo.in/Python" title="MoinMoin is written in Python.">Python Powered</a>',
204         '<a href="http://validator.w3.org/check?uri=referer" title="Click here to validate this page.">Valid HTML 4.01</a>',
205
206         # Debian related links
207         'Debian Wiki <a href="/Teams/DebianWiki">team</a>, <a href="http://bugs.debian.org/wiki.debian.org">bugs</a> and <a href="http://git.debian.org/?p=collab-maint/wiki.debian.org.git;a=summary">config</a> available.',
208
209         # Thank the sponsors
210         'Hosting provided by <a href="http://www.dg-i.net/">Dembach Goo Informatik GmbH &amp; Co KG</a>'
211         ]
212
213     # Options useful for migration
214 #    page_header1 = """<table><tbody><tr><td style="background:#fff0f0; text-align: center"><span class="anchor" id="line-2"></span><p class="line891">wiki.debian.org is being upgraded or migrated to a new server, please be patient.</td></tr></tbody></table><br/>"""
215 #    acl_rights_default = 'Known:read All:read'
216 #    class SecurityPolicy(Permissions):
217 #        def save(self, editor, newtext, rev, **kw):
218 #            raise editor.SaveError("wiki.debian.org is being upgraded or migrated to a new server, please be patient.")
219 #            return self.request.user.valid