Package: python-moinmoin
Version: 1.5.3-1.1
Severity: wishlist
Tags: patch

The attached patch adds a configuration option for an account-creation
password.  If a wiki specifies an account-creation password, the user creation
form requires this password in order to create an account.  This serves as an
anti-spam measure, as well as a means to limit account creation to users who
have previously contacted another user for the password.

Thanks to Jamey Sharp for testing and feedback on this patch.

- Josh Triplett

-- System Information:
Debian Release: 4.0
  APT prefers unstable
  APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.20-rc6
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
diff -Naur moin-1.5.3.orig/MoinMoin/multiconfig.py moin-1.5.3/MoinMoin/multiconfig.py
--- moin-1.5.3.orig/MoinMoin/multiconfig.py	2006-04-07 11:22:01.000000000 -0700
+++ moin-1.5.3/MoinMoin/multiconfig.py	2007-02-17 17:55:29.000000000 -0800
@@ -163,7 +163,10 @@
 
 class DefaultConfig:
     """ default config values """
-    
+
+    account_creation_password = None
+    account_creation_password_help = ''
+
     # All acl_right lines must use unicode!
     acl_rights_default = u"Trusted:read,write,delete,revert Known:read,write,delete,revert All:read,write"
     acl_rights_before = u""
@@ -418,6 +421,8 @@
         ##('', _('Date format'), [self._dtfmt_select()])
         ##('', _('Preferred language'), [self._lang_select()])
     ]
+    # Need to create this now, since _ gets deleted before __init__
+    account_creation_password_text = _('Account-creation password')
     user_form_defaults = { # key: default
         'name': '',
         'aliasname': '',
@@ -436,7 +441,7 @@
     user_form_remove = []
     
     # attributes we do NOT save to the userpref file
-    user_transient_fields =  ['id', 'valid', 'may', 'auth_username', 'trusted', 'password', 'password2', 'auth_method', 'auth_attribs']
+    user_transient_fields =  ['id', 'valid', 'may', 'auth_username', 'trusted', 'password', 'password2', 'account_creation_password', 'auth_method', 'auth_attribs']
 
     user_homewiki = 'Self' # interwiki name for where user homepages are located
 
@@ -511,6 +516,16 @@
         # check if mail is possible and set flag:
         self.mail_enabled = (self.mail_smarthost is not None or self.mail_sendmail is not None) and self.mail_from
 
+        # If the configuration includes an account-creation password, add the
+        # corresponding form field.
+        if self.account_creation_password is not None:
+                    
+            self.user_form_fields.append(
+                ('account_creation_password',
+                 self.account_creation_password_text, "password", "36",
+                 self.account_creation_password_help))
+            self.user_form_defaults['account_creation_password'] = ''
+
     def _config_check(self):
         """ Check namespace and warn about unknown names
         
diff -Naur moin-1.5.3.orig/MoinMoin/userform.py moin-1.5.3/MoinMoin/userform.py
--- moin-1.5.3.orig/MoinMoin/userform.py	2006-03-26 13:17:26.000000000 -0800
+++ moin-1.5.3/MoinMoin/userform.py	2007-02-17 17:51:00.000000000 -0800
@@ -102,6 +102,15 @@
             except KeyError:
                 return _("Empty user name. Please enter a user name.")
 
+            # Require account-creation password if any
+            if (self.cfg.account_creation_password is not None
+                and (form.get('account_creation_password', [''])[0]
+                     != self.cfg.account_creation_password)):
+                if not form.get('account_creation_password', [''])[0]:
+                    return _("You must specify the account-creation password to create an account.") + self.cfg.account_creation_password_help
+                else:
+                    return _("Incorrect account-creation password.  You must specify the correct account-creation password to create an account.") + self.cfg.account_creation_password_help
+
             # Don't allow users with invalid names
             if not user.isValidName(self.request, theuser.name):
                 return _("""Invalid user name {{{'%s'}}}.
@@ -293,7 +302,8 @@
             already_handled = ['name', 'password', 'password2', 'email',
                                'aliasname', 'edit_rows', 'editor_default',
                                'editor_ui', 'tz_offset', 'datetime_fmt',
-                               'theme_name', 'language']
+                               'theme_name', 'language',
+                               'account_creation_password']
             for field in self.cfg.user_form_fields:
                 key = field[0]
                 if ((key in self.cfg.user_form_disable)
@@ -589,7 +599,8 @@
                 ('cancel', _('Cancel')),
             ]
             for key, label, type, length, textafter in self.cfg.user_form_fields:
-                if key in ('name', 'password', 'password2', 'email'):
+                if key in ('name', 'password', 'password2', 'email',
+                           'account_creation_password'):
                     self.make_row(_(label),
                               [ html.INPUT(type=type, size=length, name=key,
                                            value=''),

Reply via email to