From 3990b710c642846c80798f4880c1d919973645f1 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Sun, 25 Oct 2015 10:00:26 +0100 Subject: [PATCH] avoid prindipal IDs with special characters, skipping existing ones if necessary --- locales/de/LC_MESSAGES/loops.mo | Bin 28220 -> 28341 bytes locales/de/LC_MESSAGES/loops.po | 5 ++++- organize/browser/member.py | 3 ++- organize/member.py | 20 ++++++++++++++++---- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/locales/de/LC_MESSAGES/loops.mo b/locales/de/LC_MESSAGES/loops.mo index 2d67f4816909fa7a9950ab4f734e92b54fefec19..1e54dfb525f95f0fcb3cd55cf575780535f8a625 100644 GIT binary patch delta 9880 zcmYk>33yId9>?*UkdVkKAtbUAge1fkVy!Jf>{~L8Jt36X*Q#r2RV`zAZDXpm=%7k# zX=`omTWPITTTM}FEYliHQ_FmR?>**mpXcv$&bjBF`#;Nl>CCRn9^0;X*jGyyU1V{c z_OPsSxFNu@#(G*-gGjYnR+&nc)d9<5RUCxgxY)QHi&0;V#c=}`!EIOqx1&EE#ArN& zLHH0$S(a@Tt!!C7G=!rcRzPyFQcS%GYQVOr0Xv%Z9>@UJAS{iOQ7>A88gGrczX^*` zKWOSFP!qV0#d*JV$22@dJy?h#STwii~2oO z|A(giPg5^ih4=7&%a1}yj6n@h6Me7&YN=YHR;If#7u9b#2IB-&g0szi7wY+y=Kgxr zO6@|8cN#Up>u85jctSw~1+u}KVJxa+3dUhmEQ@&@6wUic*{p%bV?ZkhHMsQ#sr zoJ12){Tg8`W|{U0sBz{dvHm*fYiLkL`%wd&$MSdwN!|)bc4m}@+RIGT7IZ(5R6@z9ei^9evrN4QYJx*B0PQIhv{&=c4?jZf*(MCcZ%{A#9`(Rg)Jok$EumH2 z8L%|!xhkmf>Z8s|Thzq*Vh|2Sjq?^Vu5HaWHP%cieJzEk=StRO{k7!fDCn0e0X2ha7=krXOP7usAPaMG z1P0>|s6GA_wKC5!1Ou3^?#H2)x)!=8h+64vR3iDcSbse*+1yxYZmdEjwiET>5!5L^ zkDA#7)XW~EX8s(Nc(K~f7M4Ku4@1qgx-kv4g3VFmwyMqgtD!p$oF^*>+u|H7iI*@Q z@1tHATE|JO9I8D5wL%hY_KT>$hHqjL zdZzLh4pzrx%*IMM11sQX7=hLbuQlz0iuMAV~ zhoRJmV>(Vpt<*`>9-cuZ{4;8xd#J5^j2h3ko-?sBsQbyN6-mV~Z0@w%Rt^R2QJ&La z4MojxoT;xwy?7mJfQ_jBJ5e(_h?>zk)RJC8ea1hd61{Kg&rmDnljbB8kKX$JlPRcU zZR9UPt2xHtP}CWihh=eC76jytP^SiJ<(U+ zf4=E35_OoyV*<`Z&1fs?bJ~d-=mhdFH0uoN(49y1yNcR^o2VE6fqLO{)N{TKoEHb7 z5)VgPnZ%ohYUn--$oaD}jJEL$R3i6K3A{k}A#LbvS#{*M#md5dI14-A1B}2Xjhuf^ zZTHDdjh$qX8lp$m2B{)YOVH=6d%#;;H_+=F`VH0n%TK_zqtwIcUWEAR;Qbrque z1vPezMD?%InDtl3BpUQ!4J?CcsKeD6^}Y7P_i!PqUsMw((Tb=<>Z4}V5;bsp)XH|k z7MO!6_z`NNXHoqx+7y()byTLeQHSw4YGD7@%x8q|&j__esThteFcEuWG|oYtg-=oa zw;Few_Cu&ceFC+@_B9Hc(GAoCcTod8Le1bQDlzY-&Tn}+RAMzz{TrcXl#Y6?EwbHK z7t~j?088Tr)Wr6q-gg>#-nK4M(4o4Hdf_8ee}VcMf}1&85r?YRKy6Vo)1HG`!NI6R zhNBW0i<;>qRHE}yXKNX1Yd5*?+m`h;1r2-}-CKdV)Ni9^+P1kfKo)AiKB$C8p`M#= z>Ps+^`Z_F!hf#^%K&`|x)OcYnoJ8X!@3$&bP=?8<%u`WI)Ch}WOVsIYgI<`0MX;x7 z?~Cd;6!qLF<3!Z=|F)^mLnXWvwbJX*)&pBihn=RwepEtdQ3+i^oq-#u{)OhgXGl~v1?2AUk$mYVI=B-si@2sqQ3W)s1?|XN^CEB<1y5W zPGOn{zl7MFdT@sO*VyWYdTs%#{|YRQADi|~8LYovw2KDK@Ca%TucCh0o}zx+tF&_V zzA0+yyP^`$Mm?8roP@=xFGQV{<){gKhWZK)p!#1j?Z4R+d}#1$?IaS2$~Xe`KxNcv zZHyYYJ*t0}srN-C_=ahpW}JiC>m{fOuEk!s6}3X4ZJaH!vrSIIWceI{ye z7ok3%g085U zjYR#@%`)|mQT_Iy&dMp{b&R3@2(@yh+d9uDp+3JBsP6sA$nKpnbis4ZH8TH%$biGG4!cpPo* z(J2a=$pzHu{sr~m9pgg`qW%>9(7&TIU^oU+k4K%6+NQlBYP<{#z;38t!aR(@NvH%? zbY%ZEgEchhf!(M~kE53IJjUQ%)QtT*Iqj8EThs`(ryWguK5DBb8C|FqT#H({eWv~s zDxp6*vHnV+WM}6ERWO)(3smOaQ3LijzKQBT50&6r48c996*_I|*HLHS2`a&|U7QuF zjvBWv>W3@cHib-MN36z;ZdekhV<`R&wN)EYFWP3>51~G{OQ!K#M2}|MEsFgW~k-Xpfm4XgKu`Fkx7}Oc4i<)t3EREUb{xEZY2I{k1hI;WAs6%`d zwK6}TR<;n8xJS10VjooEk?5!IKbC?{XEJJlHmHoVQHcyh?fILina{>_T!1-v5p~#7 z|Ke;#HtK~oY69n`Jd+K7=RkE2Zm!FD#6L9 zna;ynxCImOHnzo5WLFvcVG_>9^0)(a7Ov*7{>tbM4NAbHhqGjUs3i?Sy|^N3=ES%C)6)oK58pQqY|8k zdhs&UK&w$R*o4Wr6P4&4RKMR*hwUk9rAm^O&O#jO`2HP-kVfsoNVV)SzJ(Y6cHbnLa^1 z@Z8k>`Z(<&#&9gd{a7rAX{ZFdqY~_g+OjdIADW4#Zlm7w4)Ph=)*RFDp>Z8*1wKbD z(9j(_ z;c-mBs9fiB%0O*F0V=WasF_VgE$s}{*6lFuM^XL1Lw&v%Q7d{E)$buHA}${Lj4ZhLap2j)QkfM zI*CN05=}(4*Bi+CYo_Tm=sTZ@t?@(C;Vu@VUWiK2bC9!l{^&zJ2=zk}j?J+u`r
TOUNi&)e2+({K|Z}52Vw+17iq&Gps7qrxLpMx`sqX z`22<1I--wjeq?mP_p~=79ujp;KZ@?_Jb!AEBVK85NBJggUf7M`9k)*VGT=Qd8D_T{Ee-r;AhL&yQ#bf2GqNQ!a0M1X901`BQBC|EKut zlX?YW4WVloPDA}H*Q8wNnjanF+3f$T{SEE97H}^W{mpZ`DIX`2sXxKFL|Mv5QCE=Z zr?L)dJoQqhZ4~tw%4zsM@q*B`)4}~`0{6@Q(=_xj4~|zS%2BS4F=6(4(>jvYb;L#@ zhqggDpXg5fooH_QeMLEd@>Uhevh%1zfxu(QM#IH1Wm($XQ&~?DHoph?!5!c?>kfi(6wwOCZ z(bJS)GhXBVca)QGoXaCFEOIQhd(`$3{V6v!J*iq9T(#q(2W~el!_>r;Lj5!1zm%tA zWp^w8p-FiL(Tci$Ms?Mu-Ua_n6cB$B5kx~m*9Y9!HHRqf+8r0|@xALxTtwL#w7=oL z!*1db>TeMquHf<^b|p%y30?JxPbg2s--&LfeK|IuuIs32D}kBRkKu64(@m};)VmO4 z2#fd`j^iO5OXzx+dTXcH)7qwv<_dXPz+S{a?kyquQ!b5la5GLKz9C*-J1F-yl_D=2 zagNKQLWun)cfF~tGEdZb<;lLLw;yf)AljMwY06hAx5gx5fob=`4C?)e6_j&PR~`mC zMXM_1Pbfbns_Ad3dNgdNQikxM`~~4lS(pCK`a5-9V~9bny%j=wOrWKOyUqFI8FZv= z8TP`pM9o+3t9X`}M*Hno+7G@`{*dwj?l*F!#D~~FnL7!%hWM5{?-4U7kHQ<~ek;mf z5xQ0rb4_`vyM>cQeWPj1#sRd~B`y*vgg0%Gg#I-$l}M!A(}UlM3@TlT$u!Kyy?BtQ zN4W^LAP!TmK^!CY5SNKEwCf*JNu zvMw+krWn7*^2EQmr|Y_d`_D)G`89EuI7OdvxM_=5rJE&6XAT`Oupp+O&yc*Bf}x{g z`V1aCbZlPkmfJOALcLO|C)KFE#Xr4kpsPZ+D)D&*qw@E!9y}_h^U#9ayb%-f2KLL( cD@cr)kQ~!AIi~B7!F@)L%G=Vr+vTwT0WF6{_5c6? delta 9799 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 F|37gEAAJA- 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()