guarantee-admin-api-v0.2/Modules/AdminUser/UserImpl1.py

111 lines
3.1 KiB
Python
Raw Normal View History

2022-05-25 15:45:31 +08:00
import json
import random
import time
import requests
2022-05-25 14:41:58 +08:00
from werkzeug.security import generate_password_hash
from DBHelper.MongoHelperInstance import DB_GUA
2022-05-25 15:45:31 +08:00
from Modules.AdminUser.UserObject1 import User, EmailVcodeChecker
2022-05-25 14:41:58 +08:00
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()
)
2022-05-25 15:45:31 +08:00
@staticmethod
def login(email, pwd, vcode):
2022-05-25 14:41:58 +08:00
"""登录"""
2022-05-25 15:45:31 +08:00
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
2022-05-25 14:41:58 +08:00
def disable(self):
"""禁用"""
def active(self):
"""激活"""
2022-05-25 15:45:31 +08:00
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()