111 lines
3.1 KiB
Python
111 lines
3.1 KiB
Python
import json
|
||
import random
|
||
import time
|
||
|
||
import requests
|
||
|
||
from werkzeug.security import generate_password_hash
|
||
|
||
from DBHelper.MongoHelperInstance import DB_GUA
|
||
from Modules.AdminUser.UserObject import User, EmailVcodeChecker
|
||
from Modules.AdminUser.UserUtils 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()
|