def oauth_register(account_info, form_data=None): """Register user if possible.""" from invenio_accounts.models import User email = account_info.get("email") if form_data and form_data.get("email"): email = form_data.get("email") if email: note = '1' if cfg['CFG_ACCESS_CONTROL_NOTIFY_USER_ABOUT_NEW_ACCOUNT']: note = '2' if not User.query.filter_by(email=email).first(): # Email does not already exists. so we can proceed to register # user. u = User(nickname=account_info.get('nickname', ''), email=email, password=None, note=note) try: db.session.add(u) db.session.commit() except Exception: current_app.logger.exception("Cannot create user") return None # verify the email if note == '2': u.verify_email() return UserInfo(u.id) return None
def oauth_register(account_info, form_data=None): """Register user if possible.""" from invenio_accounts.models import User email = account_info.get("email") if form_data and form_data.get("email"): email = form_data.get("email") if email: if not User.query.filter_by(email=email).first(): # Email does not already exists. so we can proceed to register # user. u = User( nickname=account_info.get('nickname', ''), email=email, password=None, # email has to be validated note='2', ) try: db.session.add(u) db.session.commit() except Exception: current_app.logger.exception("Cannot create user") return None # verify the email if cfg['CFG_ACCESS_CONTROL_NOTIFY_USER_ABOUT_NEW_ACCOUNT']: u.verify_email() return UserInfo(u.id) return None
def test_verify_email_works_with_numbers_and_strings(self): from invenio_accounts.models import User u = User(email="*****@*****.**", password="") u.note = 2 self.assertTrue(u.verify_email()) u2 = User(email="*****@*****.**", password="") u2.note = "2" self.assertTrue(u2.verify_email())
def registerUser(req, email, passw, nickname, register_without_nickname=False, login_method=None, ln=CFG_SITE_LANG): """Register user with the desired values of NICKNAME, EMAIL and PASSW. If REGISTER_WITHOUT_NICKNAME is set to True, then ignore desired NICKNAME and do not set any. This is suitable for external authentications so that people can login without having to register an internal account first. Return 0 if the registration is successful, 1 if email is not valid, 2 if nickname is not valid, 3 if email is already in the database, 4 if nickname is already in the database, 5 when users cannot register themselves because of the site policy, 6 when the site is having problem contacting the user. If login_method is None or is equal to the key corresponding to local authentication, then CFG_ACCESS_CONTROL_LEVEL_ACCOUNTS is taken in account for deciding the behaviour about registering. """ # is email valid? email = email.lower() if not email_valid_p(email): return 1 _ = gettext_set_language(ln) # is email already taken? res = run_sql("""SELECT email FROM "user" WHERE email=%s""", (email,)) if len(res) > 0: return 3 if register_without_nickname: # ignore desired nick and use default empty string one: nickname = "" else: # is nickname valid? if not nickname_valid_p(nickname): return 2 # is nickname already taken? res = run_sql("""SELECT nickname FROM "user" WHERE nickname=%s""", (nickname,)) if len(res) > 0: return 4 activated = 1 # By default activated if not login_method or not CFG_EXTERNAL_AUTHENTICATION[login_method]: # local login if CFG_ACCESS_CONTROL_LEVEL_ACCOUNTS >= 2: return 5 elif CFG_ACCESS_CONTROL_NOTIFY_USER_ABOUT_NEW_ACCOUNT: activated = 2 # Email confirmation required elif CFG_ACCESS_CONTROL_LEVEL_ACCOUNTS >= 1: activated = 0 # Administrator confirmation required # okay, go on and register the user: FIXME user = User(nickname=nickname, email=email, password=passw, note=activated, last_login=datetime.datetime.now()) if CFG_ACCESS_CONTROL_NOTIFY_USER_ABOUT_NEW_ACCOUNT: user.verify_email() try: db.session.add(user) db.session.commit() except Exception: current_app.logger.exception("Could not store user.") db.session.rollback() return 7 if activated == 1: # Ok we consider the user as logged in :-) setUid(req, uid) return 0