diff --git a/locales/de/LC_MESSAGES/loops.mo b/locales/de/LC_MESSAGES/loops.mo index 2d67f48..1e54dfb 100644 Binary files a/locales/de/LC_MESSAGES/loops.mo and b/locales/de/LC_MESSAGES/loops.mo differ diff --git a/locales/de/LC_MESSAGES/loops.po b/locales/de/LC_MESSAGES/loops.po index 5c3bd65..c475e64 100644 --- a/locales/de/LC_MESSAGES/loops.po +++ b/locales/de/LC_MESSAGES/loops.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: 0.13.1\n" "POT-Creation-Date: 2007-05-22 12:00 CET\n" -"PO-Revision-Date: 2015-09-22 12:00 CET\n" +"PO-Revision-Date: 2015-10-25 12:00 CET\n" "Last-Translator: Helmut Merz \n" "Language-Team: loops developers \n" "MIME-Version: 1.0\n" @@ -855,6 +855,9 @@ msgstr "Benutzer registrieren" msgid "Register new member" msgstr "Neu registrieren" +msgid "Login name not allowed." +msgstr "Die von Ihnen eingegebene Benutzerkennung enthält Sonderzeichen, z. B. Umlaute." + msgid "Login name already taken." msgstr "Die von Ihnen eingegebene Benutzerkennung ist schon vergeben." diff --git a/organize/browser/member.py b/organize/browser/member.py index 7aabe80..bf6e0b7 100644 --- a/organize/browser/member.py +++ b/organize/browser/member.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2014 Helmut Merz helmutm@cy55.de +# Copyright (c) 2015 Helmut Merz helmutm@cy55.de # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -91,6 +91,7 @@ class BaseMemberRegistration(NodeView): formErrors = dict( confirm_nomatch=FormError(_(u'Password and password confirmation ' u'do not match.')), + illegal_loginname=FormError(_('Login name not allowed.')), duplicate_loginname=FormError(_('Login name already taken.')), ) diff --git a/organize/member.py b/organize/member.py index ab2aded..42f1c0a 100644 --- a/organize/member.py +++ b/organize/member.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2013 Helmut Merz helmutm@cy55.de +# Copyright (c) 2015 Helmut Merz helmutm@cy55.de # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -79,8 +79,10 @@ class MemberRegistrationManager(object): if pfName is None: pfName = options(self.principalfolder_key, (self.default_principalfolder,))[0] - self.createPrincipal(pfName, userId, password, lastName, firstName, - useExisting=useExisting) + rc = self.createPrincipal(pfName, userId, password, + lastName, firstName, useExisting=useExisting) + if rc is not None: + return rc if not groups: groups = options(self.groups_key, ()) self.setGroupsForPrincipal(pfName, userId, groups=groups) @@ -90,6 +92,8 @@ class MemberRegistrationManager(object): def createPrincipal(self, pfName, userId, password, lastName, firstName=u'', groups=[], useExisting=False, overwrite=False, **kw): + if not self.checkPrincipalId(userId): + return dict(fieldName='loginName', error='illegal_loginname') pFolder = getPrincipalFolder(self.context, pfName) if IPersonBasedAuthenticator.providedBy(pFolder): pFolder.setPassword(userId, password) @@ -123,10 +127,18 @@ class MemberRegistrationManager(object): if gFolder is not None: group = gFolder.get(gName) if group is not None: - members = list(group.principals) + members = [p for p in group.principals + if self.checkPrincipalId(p)] members.append(pFolder.prefix + userId) group.principals = members + def checkPrincipalId(self, pid): + try: + pid = str(pid) + return True + except UnicodeEncodeError: + return False + def createPersonForPrincipal(self, pfName, userId, lastName, firstName=u'', useExisting=False, **kw): concepts = self.context.getConceptManager()