server/repository.py
branchstable
changeset 5073 a9697325cffa
parent 5072 072ae171aeb0
child 5079 e646047f80cb
equal deleted inserted replaced
5072:072ae171aeb0 5073:a9697325cffa
   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