Beispiel #1
0
    def _signup_create_user(self, values):
        """ create a new user from the template user """
        IrConfigParam = self.env['ir.config_parameter']
        template_user_id = literal_eval(
            IrConfigParam.get_param('auth_signup.template_user_id', 'False'))
        template_user = self.browse(template_user_id)
        assert template_user.exists(), 'Signup: invalid template user'

        # check that uninvited users may sign up
        if 'partner_id' not in values:
            if not literal_eval(
                    IrConfigParam.get_param('auth_signup.allow_uninvited',
                                            'False')):
                raise SignupError('Signup is not allowed for uninvited users')

        assert values.get('login'), "Signup: no login given for new user"
        assert values.get('partner_id') or values.get(
            'name'), "Signup: no name or partner given for new user"

        # create a copy of the template user (attached to a specific partner_id if given)
        values['active'] = False
        try:
            with self.env.cr.savepoint():
                return template_user.with_context(
                    no_reset_password=True).copy(values)
        except Exception, e:
            # copy may failed if asked login is not available.
            raise SignupError(ustr(e))
Beispiel #2
0
 def _signup_with_values(self, token, values):
     login, password = request.env['res.users'].sudo().signup(values, token)
     request.env.cr.commit(
     )  # as authenticate will use its own cursor we need to commit the current transaction
     pre_uid = request.session.authenticate(request.db, login, password)
     if not pre_uid:
         raise SignupError(_('Authentication Failed.'))
    def create_entry(self, values, password, token=None):
        Ldap = self.env['res.company.ldap']
        for conf in Ldap.get_ldap_dicts():

            uid = values['login']
            dn = "uid=%s,%s" % (uid, conf['ldap_base'])
            if token:
                modlist = ldap.modlist.modifyModlist(
                    {
                        'userPassword': '',
                    },
                    {
                        'userPassword': str(password),
                    },
                )
            else:
                name = values.get('name')
                names = name.split(' ') if name else []
                modlist = ldap.modlist.addModlist({
                    'objectClass':
                    str('inetOrgPerson'),
                    'uid':
                    str(uid),
                    'givenName':
                    str(names[0]),
                    'sn':
                    str(names[-1]),
                    'cn':
                    str(name),
                    'description':
                    str('svami.in.ua self reg'),
                    'userPassword':
                    str(password),
                })

            try:

                conn = Ldap.connect(conf)
                ldap_password = conf['ldap_password'] or ''
                ldap_binddn = conf['ldap_binddn'] or ''
                conn.simple_bind_s(ldap_binddn.encode('utf-8'),
                                   ldap_password.encode('utf-8'))
                #                results = conn.search_st(conf['ldap_base'].encode('utf-8'), ldap.SCOPE_SUBTREE, filter,
                #                                        retrieve_attributes, timeout=60)
                if token:
                    conn.modify_s(dn, modlist)
                else:
                    conn.add_s(dn, modlist)
                conn.unbind()
            except ldap.INVALID_CREDENTIALS:
                _logger.error('LDAP bind failed.')
                raise
            except ldap.ALREADY_EXISTS:
                _logger.error('User Exists.')
                raise SignupError()
            except ldap.LDAPError, e:
                _logger.error('An LDAP exception occurred: %s', e)
                raise

            return
Beispiel #4
0
 def register_affiliate(self, **kw):
     ensure_db()
     aff_request = request.env['affiliate.request'].sudo().search([
         ('name', '=', kw.get('login'))
     ])
     if aff_request and kw.get('confirm_password') == kw.get(
             'password') and aff_request.signup_token == kw.get('token'):
         template_user_id = literal_eval(
             request.env['ir.config_parameter'].sudo().get_param(
                 'base.template_portal_user_id', 'False'))
         template_user = request.env['res.users'].sudo().browse(
             template_user_id)
         auto_approve_request = request.env['res.config.settings'].sudo(
         ).website_constant().get('auto_approve_request')
         if not template_user.exists():
             raise SignupError('Invalid template user.')
         data = kw
         redirect_url = "/"
         values = {key: data.get(key) for key in ('login', 'name')}
         values['email'] = data.get('email') or values.get('login')
         values['lang'] = request.lang.code
         values['active'] = True
         no_invitation_mail = True
         values['password'] = data.get('password', "")
         try:
             with request.env.cr.savepoint():
                 user = template_user.with_context(
                     no_reset_password=no_invitation_mail).copy(values)
                 _logger.info('------user.partner--%r-----',
                              user.partner_id)
                 # update phoen no. and comment in res.partner
                 user.partner_id.comment = kw.get('comment')
                 user.partner_id.phone = kw.get('phone')
                 # update affiliate.request with partner and user id and state
                 aff_request.partner_id = user.partner_id.id
                 aff_request.user_id = user.id
                 aff_request.state = 'register'
             request.env.cr.commit()
             # check the config for auto approve the request
             if auto_approve_request:
                 aff_request.action_aproove()
             db = request.env.cr.dbname
             return login_and_redirect(db,
                                       data['login'],
                                       data['password'],
                                       redirect_url='/affiliate')
         except Exception as e:
             _logger.error("Error123: %r" % e)
         return http.redirect_with_hash('/')
     else:
         if kw.get('password') != kw.get('confirm_password'):
             request.session['error'] = "Passwords Does't match."
             return request.redirect(
                 '/affiliate/signup?token=' + kw.get('token'), 303)
         else:
             request.session['error'] = "something went wrong.."
             return request.redirect('/affiliate/', 303)
Beispiel #5
0
 def entry_add_modify(self, uid, modlist, create=True):
     try:
         conf = self.get_ldap_dicts()[0]
         dn = "uid=%s,%s" % (uid, conf['ldap_base'])
         conn = self.connect(conf)
         ldap_password = conf['ldap_password'] or ''
         ldap_binddn = conf['ldap_binddn'] or ''
         conn.simple_bind_s(ldap_binddn.encode('utf-8'), ldap_password.encode('utf-8'))
         if create:
             conn.add_s(dn, modlist)
         else:
             conn.modify_s(dn, modlist)
         conn.unbind()
     except IndexError:
         raise SignupError("LDAP not configured")
     except ldap.ALREADY_EXISTS:
         _logger.error('User Exists.')
         raise SignupError('User Exists.')
     except ldap.LDAPError, e:
         _logger.error('An LDAP exception occurred: %s', e)
         raise SignupError()
Beispiel #6
0
 def get_activation(self, token):
     token = urllib.unquote(token)
     token = token.split('&')
     cen = request.env['personal.center'].sudo().browse(int(token[1]))
     if cen.word and cen.partner_id.signup_expiration >= time_utc(hours=+0):
         password = d64(token[0][5:5+int(cen.word)])
         db = d64(token[2][:3] + token[2][4:])
         cen.user_id.write({'active': True})
         cen.partner_id.write({'active': True, 'signup_token': False, 'signup_type': False, 'signup_expiration': False})
         cen.write({'word': False})
         # return db, cen.user_id.login, password
         return cen.user_id.login
     else:
         raise SignupError("Signup token '%s' is not valid" % token)
Beispiel #7
0
 def _signup_with_values(self, token, values):
     db, login, password = request.env['res.users'].sudo().signup(
         values, token)
     request.env.cr.commit(
     )  # as authenticate will use its own cursor we need to commit the current transaction
     user = request.env['res.users'].sudo().search([('login', 'ilike',
                                                     login)])[0]
     if user.company_id and user.company_id.is_open_2fa and user.require_2FA:
         # user.twoFA_code = pyotp.random_base32()
         template_id = request.env.ref('auth_2FA.user_auth_2fa_email').id
         # request.env['mail.template'].sudo().browse(template_id).send_mail(user.id, force_send=True)
         res = request.render('auth_2FA.2fa_auth', values)
         return res
     else:
         uid = request.session.authenticate(db, login, password)
         if not uid:
             raise SignupError(_('Authentication Failed.'))
 def do_signup(self, qcontext):
     User = request.env["res.users"].sudo().with_context(active_test=False)
     if not qcontext.get("token") and qcontext.get("login") and User.search(
             User._get_login_domain(qcontext.get("login")), limit=1):
         raise SignupError(_('Authentication Failed.'))
     return super(AuthSignupHomeExt, self).do_signup(qcontext)