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))
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
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)
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()
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)
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)