import json import random import time import requests from werkzeug.security import generate_password_hash from DBHelper.MongoHelperInstance import DB_GUA from Modules.AdminUser.UserObject1 import User, EmailVcodeChecker from Modules.AdminUser.UserUtils1 import UserUtils from Modules.Common.CommonUtils import CommonUtils class UserImpl(object): @staticmethod def create(email, name, pwd, role): """创建""" UserUtils.check_mail_fmt(email) UserUtils.check_email_registered(email) user = User() user.uid = UserUtils.generate_new_uid() user.email = email user.name = name user.pwd = generate_password_hash(pwd) user.status = "normal" user.role = role user.create_time = CommonUtils.get_current_time() DB_GUA.insert_single_data( "管理端", "用户", user.dict_keys_toggle() ) @staticmethod def login(email, pwd, vcode): """登录""" user_info = DB_GUA.find_single_data( "管理端", "用户", {"邮箱": email}, ["用户ID", "邮箱", "用户名", "密码", "用户状态", "角色"] ) assert user_info, "邮箱不存在" assert not user_info['用户状态'] != 'normal', "账户已禁用" UserUtils.check_vcode_is_correct(email, vcode) UserUtils.check_pwd_is_correct(user_info['密码'], pwd) menus = UserUtils.make_menus(user_info['角色']) token = UserUtils.make_token(user_info['用户ID']) user = User() user.name = user_info['用户名'] user.email = user_info['邮箱'] user.status = user_info['用户状态'] user.role = user_info['角色'] return_body = user.dict_keys_toggle() return_body["menus"] = menus return_body["token"] = token return return_body def disable(self): """禁用""" def active(self): """激活""" class EmailVcodeCheckerImpl(EmailVcodeChecker): def send_vcode_email(self): def gen_vcode(): choices = '0123456789' salt = '' for i in range(6): salt += random.choice(choices) self.vcode = salt def save_vcode(): DB_GUA.upsert_single_data( "管理端", "邮箱验证码记录", {"email": self.email}, {"vcode": self.vcode, "timestamp": round(time.time())} ) def send_email(): email_api = 'http://116.63.130.34:30001' headers = {"Content-Type": "application/json;charset=UTF-8"} data = { "title": "【远东资信】{}".format("登录验证码"), "sender": 'fecribd@fecr.com.cn', "recipients": [self.email], "msg_body": "您{}的验证码为 【{}】,5分钟内有效。".format("登录", self.vcode) } requests.post(url=email_api + '/send_mail', headers=headers, data=json.dumps(data)) gen_vcode() save_vcode() send_email()