server/repository.py
changeset 9607 6942622fd5dc
parent 9604 eba0e1b033ab
child 9609 e7d38148799e
equal deleted inserted replaced
9606:bf0d8df2aefb 9607:6942622fd5dc
   617     def register_user(self, login, password, email=None, **kwargs):
   617     def register_user(self, login, password, email=None, **kwargs):
   618         """check a user with the given login exists, if not create it with the
   618         """check a user with the given login exists, if not create it with the
   619         given password. This method is designed to be used for anonymous
   619         given password. This method is designed to be used for anonymous
   620         registration on public web site.
   620         registration on public web site.
   621         """
   621         """
   622         with self.internal_session() as session:
   622         with self.internal_cnx() as cnx:
   623             # for consistency, keep same error as unique check hook (although not required)
   623             # for consistency, keep same error as unique check hook (although not required)
   624             errmsg = session._('the value "%s" is already used, use another one')
   624             errmsg = cnx._('the value "%s" is already used, use another one')
   625             if (session.execute('CWUser X WHERE X login %(login)s', {'login': login},
   625             if (cnx.execute('CWUser X WHERE X login %(login)s', {'login': login},
   626                                 build_descr=False)
   626                             build_descr=False)
   627                 or session.execute('CWUser X WHERE X use_email C, C address %(login)s',
   627                 or cnx.execute('CWUser X WHERE X use_email C, C address %(login)s',
   628                                    {'login': login}, build_descr=False)):
   628                                {'login': login}, build_descr=False)):
   629                 qname = role_name('login', 'subject')
   629                 qname = role_name('login', 'subject')
   630                 raise ValidationError(None, {qname: errmsg % login})
   630                 raise ValidationError(None, {qname: errmsg % login})
   631             # we have to create the user
   631             # we have to create the user
   632             user = self.vreg['etypes'].etype_class('CWUser')(session)
   632             user = self.vreg['etypes'].etype_class('CWUser')(cnx)
   633             if isinstance(password, unicode):
   633             if isinstance(password, unicode):
   634                 # password should *always* be utf8 encoded
   634                 # password should *always* be utf8 encoded
   635                 password = password.encode('UTF8')
   635                 password = password.encode('UTF8')
   636             kwargs['login'] = login
   636             kwargs['login'] = login
   637             kwargs['upassword'] = password
   637             kwargs['upassword'] = password
   638             self.glob_add_entity(session, EditedEntity(user, **kwargs))
   638             self.glob_add_entity(cnx, EditedEntity(user, **kwargs))
   639             session.execute('SET X in_group G WHERE X eid %(x)s, G name "users"',
   639             cnx.execute('SET X in_group G WHERE X eid %(x)s, G name "users"',
   640                             {'x': user.eid})
   640                         {'x': user.eid})
   641             if email or '@' in login:
   641             if email or '@' in login:
   642                 d = {'login': login, 'email': email or login}
   642                 d = {'login': login, 'email': email or login}
   643                 if session.execute('EmailAddress X WHERE X address %(email)s', d,
   643                 if cnx.execute('EmailAddress X WHERE X address %(email)s', d,
   644                                    build_descr=False):
   644                                build_descr=False):
   645                     qname = role_name('address', 'subject')
   645                     qname = role_name('address', 'subject')
   646                     raise ValidationError(None, {qname: errmsg % d['email']})
   646                     raise ValidationError(None, {qname: errmsg % d['email']})
   647                 session.execute('INSERT EmailAddress X: X address %(email)s, '
   647                 cnx.execute('INSERT EmailAddress X: X address %(email)s, '
   648                                 'U primary_email X, U use_email X '
   648                             'U primary_email X, U use_email X '
   649                                 'WHERE U login %(login)s', d, build_descr=False)
   649                             'WHERE U login %(login)s', d, build_descr=False)
   650             session.commit()
   650             cnx.commit()
   651         return True
   651         return True
   652 
   652 
   653     def find_users(self, fetch_attrs, **query_attrs):
   653     def find_users(self, fetch_attrs, **query_attrs):
   654         """yield user attributes for cwusers matching the given query_attrs
   654         """yield user attributes for cwusers matching the given query_attrs
   655         (the result set cannot survive this method call)
   655         (the result set cannot survive this method call)