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