server/repository.py
branchstable
changeset 5030 5238d9a8dfee
parent 4984 6cb91be7707f
child 5032 e3fa27fc0d9a
equal deleted inserted replaced
5029:f7709d28fb79 5030:5238d9a8dfee
    29 from logilab.common.decorators import cached
    29 from logilab.common.decorators import cached
    30 from logilab.common.compat import any
    30 from logilab.common.compat import any
    31 from logilab.common import flatten
    31 from logilab.common import flatten
    32 
    32 
    33 from yams import BadSchemaDefinition
    33 from yams import BadSchemaDefinition
       
    34 from yams.schema import role_name
    34 from rql import RQLSyntaxError
    35 from rql import RQLSyntaxError
    35 
    36 
    36 from cubicweb import (CW_SOFTWARE_ROOT, CW_MIGRATION_MAP,
    37 from cubicweb import (CW_SOFTWARE_ROOT, CW_MIGRATION_MAP,
    37                       UnknownEid, AuthenticationError, ExecutionError,
    38                       UnknownEid, AuthenticationError, ExecutionError,
    38                       ETypeNotSupportedBySources, MultiSourcesError,
    39                       ETypeNotSupportedBySources, MultiSourcesError,
   517         errmsg = session._('the value "%s" is already used, use another one')
   518         errmsg = session._('the value "%s" is already used, use another one')
   518         try:
   519         try:
   519             if (session.execute('CWUser X WHERE X login %(login)s', {'login': login})
   520             if (session.execute('CWUser X WHERE X login %(login)s', {'login': login})
   520                 or session.execute('CWUser X WHERE X use_email C, C address %(login)s',
   521                 or session.execute('CWUser X WHERE X use_email C, C address %(login)s',
   521                                    {'login': login})):
   522                                    {'login': login})):
   522                 raise ValidationError(None, {'login': errmsg % login})
   523                 qname = role_name('login', 'subject')
       
   524                 raise ValidationError(None, {qname: errmsg % login})
   523             # we have to create the user
   525             # we have to create the user
   524             user = self.vreg['etypes'].etype_class('CWUser')(session, None)
   526             user = self.vreg['etypes'].etype_class('CWUser')(session, None)
   525             if isinstance(password, unicode):
   527             if isinstance(password, unicode):
   526                 # password should *always* be utf8 encoded
   528                 # password should *always* be utf8 encoded
   527                 password = password.encode('UTF8')
   529                 password = password.encode('UTF8')
   532             session.execute('SET X in_group G WHERE X eid %(x)s, G name "users"',
   534             session.execute('SET X in_group G WHERE X eid %(x)s, G name "users"',
   533                             {'x': user.eid})
   535                             {'x': user.eid})
   534             if email or '@' in login:
   536             if email or '@' in login:
   535                 d = {'login': login, 'email': email or login}
   537                 d = {'login': login, 'email': email or login}
   536                 if session.execute('EmailAddress X WHERE X address %(email)s', d):
   538                 if session.execute('EmailAddress X WHERE X address %(email)s', d):
   537                     raise ValidationError(None, {'address': errmsg % d['email']})
   539                     qname = role_name('address', 'subject')
       
   540                     raise ValidationError(None, {qname: errmsg % d['email']})
   538                 session.execute('INSERT EmailAddress X: X address %(email)s, '
   541                 session.execute('INSERT EmailAddress X: X address %(email)s, '
   539                                 'U primary_email X, U use_email X WHERE U login %(login)s', d)
   542                                 'U primary_email X, U use_email X WHERE U login %(login)s', d)
   540             session.commit()
   543             session.commit()
   541         finally:
   544         finally:
   542             session.close()
   545             session.close()