avoid prindipal IDs with special characters, skipping existing ones if necessary

This commit is contained in:
Helmut Merz 2015-10-25 10:00:26 +01:00
parent 1800fe7c9e
commit 3990b710c6
4 changed files with 22 additions and 6 deletions

Binary file not shown.

View file

@ -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 <helmutm@cy55.de>\n"
"Language-Team: loops developers <helmutm@cy55.de>\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."

View file

@ -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.')),
)

View file

@ -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()