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

111 lines
3.1 KiB
Python
Raw Normal View History

2022-05-24 02:25:59 +08:00
import json
import random
2022-05-25 16:12:53 +08:00
import time
2022-05-24 02:25:59 +08:00
import requests
2022-05-25 16:12:53 +08:00
from werkzeug.security import generate_password_hash
2022-05-24 02:25:59 +08:00
from DBHelper.MongoHelperInstance import DB_GUA
2022-05-25 16:12:53 +08:00
from Modules.AdminUser.UserObject import User, EmailVcodeChecker
from Modules.AdminUser.UserUtils import UserUtils
2022-05-25 16:12:53 +08:00
from Modules.Common.CommonUtils import CommonUtils
2022-05-24 02:25:59 +08:00
2022-05-25 16:12:53 +08:00
class UserImpl(object):
2022-05-24 02:25:59 +08:00
2022-05-25 16:12:53 +08:00
@staticmethod
def create(email, name, pwd, role):
"""创建"""
2022-05-24 02:25:59 +08:00
2022-05-25 16:12:53 +08:00
UserUtils.check_mail_fmt(email)
UserUtils.check_email_registered(email)
2022-05-24 02:25:59 +08:00
2022-05-25 16:12:53 +08:00
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()
2022-05-24 02:25:59 +08:00
2022-05-25 16:12:53 +08:00
DB_GUA.insert_single_data(
2022-05-24 02:25:59 +08:00
"管理端",
"用户",
2022-05-26 03:39:35 +08:00
user.fields_toggle()
2022-05-24 02:25:59 +08:00
)
2022-05-25 16:12:53 +08:00
@staticmethod
def login(email, pwd, vcode):
"""登录"""
2022-05-24 02:25:59 +08:00
user_info = DB_GUA.find_single_data(
"管理端",
"用户",
2022-05-25 16:12:53 +08:00
{"邮箱": email},
["用户ID", "邮箱", "用户名", "密码", "用户状态", "角色"]
2022-05-24 02:25:59 +08:00
)
2022-05-25 16:12:53 +08:00
assert user_info, "邮箱不存在"
assert not user_info['用户状态'] != 'normal', "账户已禁用"
2022-05-24 02:25:59 +08:00
2022-05-25 16:12:53 +08:00
UserUtils.check_vcode_is_correct(email, vcode)
UserUtils.check_pwd_is_correct(user_info['密码'], pwd)
2022-05-24 02:25:59 +08:00
2022-05-25 16:12:53 +08:00
menus = UserUtils.make_menus(user_info['角色'])
token = UserUtils.make_token(user_info['用户ID'])
2022-05-24 02:25:59 +08:00
2022-05-25 16:12:53 +08:00
user = User()
user.name = user_info['用户名']
user.email = user_info['邮箱']
user.status = user_info['用户状态']
user.role = user_info['角色']
2022-05-24 02:25:59 +08:00
2022-05-26 03:39:35 +08:00
return_body = user.fields_toggle()
2022-05-25 16:12:53 +08:00
return_body["menus"] = menus
return_body["token"] = token
2022-05-24 02:25:59 +08:00
2022-05-25 16:12:53 +08:00
return return_body
2022-05-24 02:25:59 +08:00
2022-05-25 16:12:53 +08:00
def disable(self):
"""禁用"""
2022-05-24 02:25:59 +08:00
2022-05-25 16:12:53 +08:00
def active(self):
"""激活"""
2022-05-24 02:25:59 +08:00
2022-05-25 16:12:53 +08:00
class EmailVcodeCheckerImpl(EmailVcodeChecker):
2022-05-24 02:25:59 +08:00
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))
2022-05-25 16:12:53 +08:00
gen_vcode()
save_vcode()
send_email()