364 |
364 |
365 def _login_from_email(self, login): |
365 def _login_from_email(self, login): |
366 session = self.internal_session() |
366 session = self.internal_session() |
367 try: |
367 try: |
368 rset = session.execute('Any L WHERE U login L, U primary_email M, ' |
368 rset = session.execute('Any L WHERE U login L, U primary_email M, ' |
369 'M address %(login)s', {'login': login}) |
369 'M address %(login)s', {'login': login}, |
|
370 build_descr=False) |
370 if rset.rowcount == 1: |
371 if rset.rowcount == 1: |
371 login = rset[0][0] |
372 login = rset[0][0] |
372 finally: |
373 finally: |
373 session.close() |
374 session.close() |
374 return login |
375 return login |
496 """ |
497 """ |
497 session = self.internal_session() |
498 session = self.internal_session() |
498 # for consistency, keep same error as unique check hook (although not required) |
499 # for consistency, keep same error as unique check hook (although not required) |
499 errmsg = session._('the value "%s" is already used, use another one') |
500 errmsg = session._('the value "%s" is already used, use another one') |
500 try: |
501 try: |
501 if (session.execute('CWUser X WHERE X login %(login)s', {'login': login}) |
502 if (session.execute('CWUser X WHERE X login %(login)s', {'login': login}, |
|
503 build_descr=False) |
502 or session.execute('CWUser X WHERE X use_email C, C address %(login)s', |
504 or session.execute('CWUser X WHERE X use_email C, C address %(login)s', |
503 {'login': login})): |
505 {'login': login}, build_descr=False)): |
504 qname = role_name('login', 'subject') |
506 qname = role_name('login', 'subject') |
505 raise ValidationError(None, {qname: errmsg % login}) |
507 raise ValidationError(None, {qname: errmsg % login}) |
506 # we have to create the user |
508 # we have to create the user |
507 user = self.vreg['etypes'].etype_class('CWUser')(session) |
509 user = self.vreg['etypes'].etype_class('CWUser')(session) |
508 if isinstance(password, unicode): |
510 if isinstance(password, unicode): |
514 self.glob_add_entity(session, user) |
516 self.glob_add_entity(session, user) |
515 session.execute('SET X in_group G WHERE X eid %(x)s, G name "users"', |
517 session.execute('SET X in_group G WHERE X eid %(x)s, G name "users"', |
516 {'x': user.eid}) |
518 {'x': user.eid}) |
517 if email or '@' in login: |
519 if email or '@' in login: |
518 d = {'login': login, 'email': email or login} |
520 d = {'login': login, 'email': email or login} |
519 if session.execute('EmailAddress X WHERE X address %(email)s', d): |
521 if session.execute('EmailAddress X WHERE X address %(email)s', d, |
|
522 build_descr=False): |
520 qname = role_name('address', 'subject') |
523 qname = role_name('address', 'subject') |
521 raise ValidationError(None, {qname: errmsg % d['email']}) |
524 raise ValidationError(None, {qname: errmsg % d['email']}) |
522 session.execute('INSERT EmailAddress X: X address %(email)s, ' |
525 session.execute('INSERT EmailAddress X: X address %(email)s, ' |
523 'U primary_email X, U use_email X ' |
526 'U primary_email X, U use_email X ' |
524 'WHERE U login %(login)s', d) |
527 'WHERE U login %(login)s', d, build_descr=False) |
525 session.commit() |
528 session.commit() |
526 finally: |
529 finally: |
527 session.close() |
530 session.close() |
528 return True |
531 return True |
529 |
532 |