def add_user(mdb_user): """ 初始化root用户角色, 管理员, 管理员基本资料 :return: """ from werkzeug.security import generate_password_hash from apps.utils.validation.str_format import email_format_ver, password_format_ver from apps.modules.user.models.user import user_model print(' * [User] add') is_continue = False while True: username = input("Input username:"******"[\.\*#\?]+", username): print( "[Warning]: The name format is not correct,You can't use '.','*','#','?'\n") else: break while not is_continue: email = input("Input email:") s, r = email_format_ver(email) if not s: print("[Warning]: {}".format(r)) else: break while not is_continue: password = getpass("Input password(Password at least 8 characters):") s, r = password_format_ver(password) if not s: print("[Warning]: {}\n".format(r)) else: break try: mdb_user.db.create_collection("role") print(' * Created role collection') except BaseException: pass try: mdb_user.db.create_collection("user") print(' * Created user collection') except BaseException: pass # 初始化角色 root_per = SUPER_PER role_root = mdb_user.db.role.find_one({"permissions": root_per}) if not role_root: print(" * Create root role...") r = mdb_user.db.role.insert_one({"name": "Root", "default": 0, "permissions": root_per, "instructions": 'Root'}) if r.inserted_id: print("Create root user role successfully") else: print("[Error] Failed to create superuser role") sys.exit(-1) root_id = r.inserted_id else: root_id = role_root['_id'] password_hash = generate_password_hash(password) user = get_one_user_mfilter(username=username, email=email, op="or") if user: update_one_user(user_id=str(user["_id"]), updata={"$set": {"password": password_hash, "role_id": str(root_id)}}) print(" * This user already exists, updated password.") else: print(' * Create root user...') user = user_model( username=username, email=email, password=password, custom_domain=-1, role_id=str(root_id), active=True) r = insert_one_user(updata=user) if r.inserted_id: print(" * Create a root user role successfully") else: print(" * [Error] Failed to create a root user role") sys.exit(-1) # To create the average user role average_user = mdb_user.db.role.find_one({"permissions": 1}) if not average_user: print(" * Create the average user role...") r = mdb_user.db.role.insert_one({ "name": "User", "default": 1, "permissions": 1, "instructions": 'The average user', }) if r.inserted_id: print(" * Create a generic user role successfully") else: print(" * Failed to create a generic user role") role = mdb_user.db.role.find_one({"_id": root_id}) hidden_password = "******".format(password[0:2], password[6:]) print('The basic information is as follows') print('Username: {}\nEmail: {}\nUser role: {}\nPassword: {}'.format( username, email, role["name"], hidden_password)) print('End')
def p_sign_up(username, password, password2, code, email=None, mobile_phone_number=None): ''' 普通用户注册函数 :return: ''' data = {} if current_user.is_authenticated: data['msg'] = gettext("Is logged in") data["msg_type"] = "s" data["http_status"] = 201 data['to_url'] = request.argget.all('next') or get_config("login_manager", "LOGIN_IN_TO") return data # 用户名格式验证 s1, r1 = short_str_verifi(username, project="username") # 密码格式验证 s2, r2 = password_format_ver(password) if not s1: data = {'msg':r1, 'msg_type':"e", "http_status":422} elif mdb_user.db.user.find_one({"username": username}): # 是否存在用户名 data = {'msg': gettext("Name has been used"), 'msg_type': "w", "http_status": 403} elif not s2: data = {'msg': r2, 'msg_type': "e", "http_status": 400} return data elif password2 != password: # 检验两次密码 data = {'msg': gettext("The two passwords don't match"), 'msg_type': "e", "http_status": 400} if data: return data if email: # 邮件注册 # 邮箱格式验证 s, r = email_format_ver(email) if not s: data = {'msg':r, 'msg_type':"e", "http_status":422} elif mdb_user.db.user.find_one({"email": email}): # 邮箱是否注册过 data = {'msg': gettext("This email has been registered in the site oh, please login directly."), 'msg_type': "w", "http_status": 403} if data: return data # 检验验证码 r = verify_code(code=code, email=email) if not r: data = {'msg': gettext("Verification code error"), 'msg_type': "e", "http_status": 401} return data elif mobile_phone_number: # 手机注册 s, r = mobile_phone_format_ver(mobile_phone_number) if not s: data = {'msg': r, 'msg_type': "e", "http_status": 422} elif mdb_user.db.user.find_one({"mphone_num": mobile_phone_number}): # 手机是否注册过 data = {'msg': gettext("This number has been registered in the site oh, please login directly."), 'msg_type': "w", "http_status": 403} if data: return data # 检验验证码 r = verify_code(code=code, tel_number=True) if not r: data = {'msg': gettext("Verification code error"), 'msg_type': "e", "http_status": 401} return data if not data: # 用户基本信息 role_id = mdb_user.db.role.find_one({"default":{"$in":[True, 1]}})["_id"] user = user_model(username=username, email=email, mphone_num = mobile_phone_number, password=password, custom_domain=-1, role_id=str(role_id), active=True) r = mdb_user.db.user.insert_one(user) if r.inserted_id: if email: # 发送邮件 subject = gettext("Registration success notification") body = "Welcome to register <b>{}</b>.<br><a>{}</a> registered the account successfully.".format( get_config("site_config", "APP_NAME"), email ) data = {"title": subject, "body": body, "other_info": gettext("End"), } html = get_email_html(data) send_email(subject=subject, recipients=[email], html_msg=html) elif mobile_phone_number: # 发送短信 content = "[{}] Successful registration account.".format( get_config("site_config", "APP_NAME")) send_mobile_msg(mobile_phone_number, content) data = {'msg':gettext('Registered successfully'), 'to_url':'/sign-in', 'msg_type':'s',"http_status":201} else: data = {'msg': gettext('Data saved incorrectly, please try again'), 'msg_type': 'e', "http_status": 201} return data return data
def add_user(): email = request.argget.all('email') mobile_phone_number = str_to_num( request.argget.all('mobile_phone_number', 0)) username = request.argget.all('username', '').strip() password = request.argget.all('password', '').strip() password2 = request.argget.all('password2', '').strip() data = {} # 用户名格式验证 s1, r1 = short_str_verifi(username, project="username") # 密码格式验证 s2, r2 = password_format_ver(password) if not s1: data = {'msg': r1, 'msg_type': "e", "custom_status": 422} elif mdbs["user"].db.user.find_one({"username": username}): # 是否存在用户名 data = { 'msg': gettext("Name has been used"), 'msg_type': "w", "custom_status": 403 } elif not s2: data = {'msg': r2, 'msg_type': "e", "custom_status": 400} return data elif password2 != password: # 检验两次密码 data = { 'msg': gettext("The two passwords don't match"), 'msg_type': "e", "custom_status": 400 } if data: return data if email: # 邮件注册 # 邮箱格式验证 s, r = email_format_ver(email) if not s: data = {'msg': r, 'msg_type': "e", "custom_status": 422} elif mdbs["user"].db.user.find_one({"email": email}): # 邮箱是否注册过 data = { 'msg': gettext( "This email has been registered in the site oh, please login directly." ), 'msg_type': "w", "custom_status": 403 } if data: return data elif mobile_phone_number: # 手机注册 s, r = mobile_phone_format_ver(mobile_phone_number) if not s: data = {'msg': r, 'msg_type': "e", "custom_status": 422} elif mdbs["user"].db.user.find_one({"mphone_num": mobile_phone_number}): # 手机是否注册过 data = { 'msg': gettext( "This number has been registered in the site oh, please login directly." ), 'msg_type': "w", "custom_status": 403 } if data: return data if not data: # 用户基本信息 role_id = mdbs["user"].db.role.find_one( {"default": { "$in": [True, 1] }})["_id"] if not email: email = None if not mobile_phone_number: mobile_phone_number = None user = user_model(username=username, email=email, mphone_num=mobile_phone_number, password=password, custom_domain=-1, role_id=str(role_id), active=True, is_adm_add_user=True) r = insert_one_user(updata=user) if r.inserted_id: if email: # 发送邮件 subject = gettext("Registration success notification") body = [ gettext("Welcome to register {}.").format( get_config("site_config", "APP_NAME")), gettext("{} registered the account successfully.").format( email) ] data = { "title": subject, "body": body, "username": username, "site_url": get_config("site_config", "SITE_URL") } html = get_email_html(data) msg = { "subject": subject, "recipients": [email], "html_msg": html } send_email(msg=msg, ctype="nt") elif mobile_phone_number: # 发送短信 content = gettext( "[{}] Successful registration account.").format( get_config("site_config", "APP_NAME")) send_mobile_msg(mobile_phone_number, content) data = { 'msg': gettext('Added successfully'), 'msg_type': 's', "custom_status": 201 } return data
def third_party_sign_in(platform_name): ''' 第三方登录回调函数 :param hook_name: 第三方登录钩子名称,如:"wechat_login" :return: ''' # 检测插件 data = plugin_manager.call_plug(hook_name="{}_login".format(platform_name), request_argget_all=request.argget.all) if data == "__no_plugin__": data = {"msg":gettext("No login processing plugin for this platform, please install the relevant plugin first"), "msg_type":"e", "http_status":400} return data unionid = data.get("unionid") # 检测用户是否等录过 query = { "login_platform.{}.unionid".format(platform_name):unionid } user = mdb_user.db.user.find_one(query) if user: # 此用户已经在当前平台登录过, 直接登录 user = User(user["_id"]) if user.is_active: login_user(user, False) # 记录登录日志 login_log(user, client="unknown:{}".format(platform_name)) data = {"msg":gettext("Sign in success"), "msg_type":"s", "http_status":201} else: # 未激活 data = {"msg":gettext("Account is inactive or frozen"), "msg_type":"w", "http_status":401} else: # 第一次登录, 注册信息 # 用户基本信息 nickname = "{}_{}".format(data.get("nickname"),randint(10000000,99999999)) gender = data.get("gender") email = data.get("email") avatar_url = data.get("avatar_url") province = data.get("province") city = data.get("city") country = data.get("country") address = {"province":province, "city":city, "country":country} s, r = arg_verify(reqargs=[("unionid", unionid)], required=True) if not s: return r s, r = arg_verify(reqargs=[(gettext("gender"), gender)], only=["secret", "m", "f"]) if not s: return r role_id = mdb_user.db.role.find_one({"default": {"$in": [True, 1]}})["_id"] user = user_model( unionid=unionid, platform_name=platform_name, username=nickname, email=email, mphone_num=None, password=None, custom_domain=-1, address=address, avatar_url=avatar_url, role_id=role_id, active=True ) r = mdb_user.db.user.insert_one(user) if r.inserted_id: data = {'msg':gettext('Registered successfully'), 'to_url':'/sign-in', 'msg_type':'s',"http_status":201} else: data = {'msg': gettext('Data saved incorrectly, please try again'), 'msg_type': 'e', "http_status": 400} return data
def init_admin_user(mdbs): """ 初始化root用户角色, 管理员, 管理员基本资料 :return: """ from werkzeug.security import generate_password_hash from apps.modules.user.models.user import user_model from apps.modules.user.process.get_or_update_user import get_one_user_mfilter, update_one_user, insert_one_user print('\nInit root user') # 初始化角色 root_per = SUPER_PER role_root = mdbs["user"].db.role.find_one({"permissions": root_per}) if not role_root: print(" * Create root role...") r = mdbs["user"].db.role.insert_one( { "name": "Root", "default": 0, "permissions": root_per, "instructions": 'Root' } ) if r.inserted_id: print("Create root user role successfully") else: print("\033[31m[Error] Failed to create superuser role\033[0m") sys.exit(-1) root_id = r.inserted_id else: root_id = role_root['_id'] root_user = mdbs["user"].dbs["user"].find_one( {"role_id": str(root_id)}, { "username": 1, "email": 1 } ) if root_user: ch = input("\033[33m\n Root user already exists, need to update its password?[Y/n]\033[0m") if ch != "Y": print("End") sys.exit() is_continue = False while not is_continue: password = getpass("Input password(Password at least 8 characters):") if len(password) < 8: print("\033[33m[Warning]: {}The password is at least 8 characters\033[0m\n") else: break password_hash = generate_password_hash(password) update_one_user( user_id=str(root_user["_id"]), updata={ "$set": { "password": password_hash } }) username = root_user["username"] email = root_user["email"] else: is_continue = False username = "******" email = input("Input email:") while not is_continue: password = getpass("Input password(Password at least 8 characters):") if len(password) < 8: print("\033[33m[Warning]: {}The password is at least 8 characters\033[0m\n") else: break try: mdbs["user"].db.create_collection("role") print(' * Created role collection') except BaseException: pass try: mdbs["user"].db.create_collection("user") print(' * Created user collection') except BaseException: pass password_hash = generate_password_hash(password) user = get_one_user_mfilter(email=email, op="or") if user: update_one_user(user_id=str(user["_id"]), updata={ "$set": { "password": password_hash, "role_id": str(root_id) } }) username = user["username"] print("\033[33m\n * This user already exists, updated password and role.\033[0m") else: print(' * Create root user...') user = user_model( username=username, email=email, password=password, custom_domain=-1, role_id=str(root_id), active=True) r = insert_one_user(updata=user) if r.inserted_id: print(" * Create a root user successfully") else: print("\033[31m * [Error] Failed to create a root user\033[0m") sys.exit(-1) # To create the average user role average_user = mdbs["user"].db.role.find_one({"permissions": 1}) if not average_user: print(" * Create the average user role...") r = mdbs["user"].db.role.insert_one({ "name": "User", "default": 1, "permissions": 1, "instructions": 'The average user', }) if r.inserted_id: print(" * Create a generic role successfully") else: print(" * Failed to create a generic role") role = mdbs["user"].db.role.find_one({"_id": root_id}) hidden_password = "******".format(password[0:2], password[6:]) print('\nThe basic information is as follows') print('Username: {}\nEmail: {}\nUser role: {}\nPassword: \033[33m{}\033[0m'.format( username, email, role["name"], hidden_password)) print('End') sys.exit()