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
|
2022-05-25 16:18:55 +08:00
|
|
|
|
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()
|