Merge branch 'wsc' into 'master'
Wsc See merge request root/tfse_admin!4
This commit is contained in:
commit
67d0c7e2f3
23
common/db.py
23
common/db.py
|
@ -1,7 +1,8 @@
|
|||
import pymongo
|
||||
|
||||
clients = {
|
||||
"tfse": pymongo.MongoClient('mongodb://{}:{}@{}:{}'.format('root', 'sromitdTW569kC#M', '116.63.130.34', 27018))
|
||||
"tfse": pymongo.MongoClient('mongodb://{}:{}@{}:{}'.format('root', 'sromitdTW569kC#M', '116.63.130.34', 27018)),
|
||||
"tfse_admin": pymongo.MongoClient('mongodb://{}:{}@{}:{}'.format('root', 'RYIHrqml#LSW6#!*', '116.63.130.34', 27020)),
|
||||
}
|
||||
|
||||
|
||||
|
@ -35,3 +36,23 @@ def delete_data(param1, param2, param3, param4):
|
|||
collection = clients[param1][param2][param3]
|
||||
collection.delete_one(param4)
|
||||
return True
|
||||
|
||||
|
||||
def insert_data(param1, param2, param3, param4):
|
||||
"""
|
||||
插入一条数据
|
||||
Parameters:
|
||||
param1: str 服务器
|
||||
param2: str 数据库
|
||||
param3: str 数据集
|
||||
param4: obj 插入数据
|
||||
Returns:
|
||||
True 执行成功
|
||||
False 执行失败
|
||||
"""
|
||||
try:
|
||||
collection = clients[param1][param2][param3]
|
||||
collection.insert_one(param4)
|
||||
return True
|
||||
except Exception:
|
||||
return False
|
||||
|
|
59
user/User.py
59
user/User.py
|
@ -1,9 +1,66 @@
|
|||
from user.process import create_user_process
|
||||
|
||||
|
||||
class User:
|
||||
"""
|
||||
用户对象
|
||||
Parameters:
|
||||
uid str 用户ID
|
||||
email str 邮箱
|
||||
name str 用户名
|
||||
pwd str 密码
|
||||
role str 角色
|
||||
group str 群组
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
self.uid = None
|
||||
self.email = None
|
||||
self.name = None
|
||||
self.pwd = None
|
||||
self.role = None
|
||||
self.menus = None
|
||||
self.group = None
|
||||
|
||||
|
||||
class UserManage(User):
|
||||
"""
|
||||
用户管理
|
||||
"""
|
||||
|
||||
# 创建用户
|
||||
def create_user(self):
|
||||
res = create_user_process(self.email, self.name, self.pwd, self.role, self.group)
|
||||
if res is not False:
|
||||
pass
|
||||
|
||||
# 禁用用户
|
||||
def disable_user(self):
|
||||
pass
|
||||
|
||||
# 授权用户
|
||||
def authorized_user(self):
|
||||
pass
|
||||
|
||||
# 删除用户
|
||||
def delete_user(self):
|
||||
pass
|
||||
|
||||
|
||||
class UserOperation(User):
|
||||
"""
|
||||
用户操作
|
||||
"""
|
||||
|
||||
# 登录
|
||||
def login(self):
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
um = UserManage()
|
||||
um.email = "wangsichuan@fecr.com.cn"
|
||||
um.name = "王思川"
|
||||
um.pwd = "pVhsypYQ+Lf81gMHKkkU+xrEhB96jNjbH8PZ6smK8NGnWBuJwHEtr5XPZ+A4dPMsYVZldeyjfR7AVCG3deAWT0JR2aAHqG6pD2IMwA0VqMcXBI2c1uesGRoYNW3815CrAqdRwKlZunpqYkxnWnatfU4zuosuv/7TyY+JhOIS6rV50yiE/Nw/k/aXPtX/ShJI/oybmgzMU+GfODy7k3XnTn9I9vLfFYQrg/m8ybZIL7TGtX+HSUJLZ5ttmFq+cnykBVf2iK7Q3lV6f65tmVmIiU+e2xrBc4nMHyYxZksGJNWeVZ2F45QPrif14BML7X9g/QDqze7Jm3ZHg6fs/wV/ISrvw/C1fPFbSCRfjuLcusLY5fcFG3X0r7kST6vIzbr4ZYH3TZZ0p29+dgEEt+fj+d17URrd92xPzuLz2UIRi/pncNSvZb31PDHMY6pEfjigXOx6o4XTtbLqNIRuo8n+LX8XyJvMPc2EUQEMsRKet6KFpVJTnXGhJkI37lHh4Kc4qv0HIdLVjWd05dlo0R2Ggsm1Fb2vGL35l5YumjkFJjQDV5TV0IhzLWW56A56dluHaMDsOQXqFNVCdnpYmzNtm8pEVYfzxnKJwpq5a0xqaLcf7SO/VmLpFKXj+9ZSEEWK5RAzbSVSoQCIWISLYPDqNRnsXFS1CDwe3xv1+86H3nY="
|
||||
um.role = "admin"
|
||||
um.group = ["admin"]
|
||||
um.create_user()
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
import time
|
||||
|
||||
from werkzeug.security import generate_password_hash
|
||||
|
||||
from common.db import insert_data
|
||||
from user.scripts import check_mail_fmt, check_pwd_fmt, gen_new_uid
|
||||
from user.security.rsa import decrypt_data
|
||||
|
||||
|
||||
def create_user_process(email, name, pwd, role, group):
|
||||
"""
|
||||
创建新用户流程
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
执行成功 True
|
||||
执行失败 False
|
||||
"""
|
||||
|
||||
if not check_mail_fmt(email):
|
||||
return False
|
||||
|
||||
if not check_pwd_fmt(pwd):
|
||||
return False
|
||||
|
||||
user = dict()
|
||||
user['UID'] = gen_new_uid()
|
||||
user['email'] = email
|
||||
user['name'] = name
|
||||
user['pwd'] = generate_password_hash(decrypt_data(encrypt_msg=pwd))
|
||||
user['role'] = role
|
||||
user['group'] = group
|
||||
user['create_time'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
|
||||
|
||||
insert_data("tfse_admin", "用户", "用户信息", user)
|
|
@ -0,0 +1,63 @@
|
|||
import random
|
||||
import re
|
||||
|
||||
from common.db import find_data
|
||||
from user.security.rsa import decrypt_data
|
||||
|
||||
|
||||
def check_mail_fmt(email):
|
||||
"""
|
||||
邮箱地址格式校验
|
||||
Parameters:
|
||||
email: 邮箱
|
||||
Returns:
|
||||
result: 邮箱校验结果,正确返回True,不正确返回False
|
||||
"""
|
||||
regex = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$"
|
||||
case = (len(email) > 7) and (re.match(regex, email) is not None)
|
||||
result = True if case else False
|
||||
return result
|
||||
|
||||
|
||||
def check_pwd_fmt(pwd):
|
||||
"""
|
||||
密码强度校验
|
||||
Parameters:
|
||||
pwd: 密码(已加密)
|
||||
Returns:
|
||||
result: 密码强度校验结果,正确返回True,不正确返回False
|
||||
"""
|
||||
password = decrypt_data(encrypt_msg=pwd)
|
||||
if not password:
|
||||
return False
|
||||
|
||||
regex = "^(?![A-Za-z0-9]+$)(?![a-z0-9\\W]+$)(?![A-Za-z\\W]+$)(?![A-Z0-9\\W]+$)^.{8,}$"
|
||||
case = (len(password) >= 8) and (re.match(regex, password) is not None)
|
||||
result = True if case else False
|
||||
return result
|
||||
|
||||
|
||||
def gen_new_uid():
|
||||
"""
|
||||
生成新的用户ID,如果该ID存在,则重新生成
|
||||
Returns:
|
||||
new_id: 生成的用户ID
|
||||
"""
|
||||
def make_id(num):
|
||||
"""
|
||||
随机生成字符串
|
||||
"""
|
||||
choices = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
|
||||
salt = ''
|
||||
for i in range(num):
|
||||
salt += random.choice(choices)
|
||||
return salt
|
||||
|
||||
# 生成新ID
|
||||
new_id = make_id(8)
|
||||
# 检查新ID是否存在,如果存在则继续生成新ID
|
||||
case = find_data("tfse_admin", "用户", "用户信息", {"企业ID": new_id}) is []
|
||||
while case:
|
||||
new_id = make_id(8)
|
||||
# 新ID可使用,返回新ID
|
||||
return new_id
|
|
@ -0,0 +1,51 @@
|
|||
-----BEGIN RSA PRIVATE KEY-----
|
||||
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
|
||||
-----END RSA PRIVATE KEY-----
|
|
@ -0,0 +1,13 @@
|
|||
-----BEGIN RSA PUBLIC KEY-----
|
||||
MIICCgKCAgEArqR8oMamVxuOLF0z8cGR4u/OXo+j6GM9my9FMHT5bEvYoFCTmZe9
|
||||
AMLY8qcW25BPX02oxIM9m3VAxhwaI7V/OOm0Be3pXOJlEtIo+XroMfgPq8k6cyfq
|
||||
Ql3lVdU7Sgs+IktIda3/Tt1ygfCUH0ejitRfP9coF6sG2MbbnTPfWHcAawEFbYV4
|
||||
kMicRk6bxB8o6OdhkYkkcMZAlmEpKr3W5SCxJAfLYXEh2M6tlKdu4mdppyUMXrah
|
||||
zgaqbarDHa33Y2me3jDHroSDmU6kdkc8fT/Stk7aaBKH2mOOGKCGUfCgA3oNl2OD
|
||||
PNPFqwbXgLOOem9hrC0/yXVrELHULGSwem0wPjThhuGqUi2lGzP5QGbG7BROJW9O
|
||||
YteCYQwgVPr6RfkuD4TsoCyo1gwZsOnMEyBRl4a0yDt4BjhS6NBdb3/8rZ0VAExv
|
||||
2ZTCkTQMhrsUV6MyqLn0LSnDfOaNDdQqGPhshi+31tPKkEFIUA/tGzAhs/HQzigx
|
||||
f7I0oNSXPWtLU+anG3NDmv14xCz3CUPfAaI0M5ZUDWDzq6C6BVNf3IEGxDrTDRy3
|
||||
ZSQgjl0hNVAi2s2IB6dnSn9XYENpIfVTwjzH7Kpnr0Ioft+/SvQiRMLG13GrRe2d
|
||||
c6uSqaCflKyzQy9c4JCO6ECgEIzBt5jeOKPUZBmfiSH0TzFwmbkGgHkCAwEAAQ==
|
||||
-----END RSA PUBLIC KEY-----
|
|
@ -0,0 +1,75 @@
|
|||
import os
|
||||
import base64
|
||||
|
||||
from Crypto.PublicKey import RSA
|
||||
from Crypto.Cipher import PKCS1_v1_5 as PKCS1_cipher
|
||||
|
||||
|
||||
def get_key(**kwargs):
|
||||
"""
|
||||
获取密钥
|
||||
Parameters:
|
||||
key_file str 密钥文件名称
|
||||
Returns:
|
||||
key 密钥
|
||||
"""
|
||||
key_file = kwargs['key_file'] # 密钥文件
|
||||
key_path = os.path.abspath(os.path.abspath(os.path.dirname(__file__)) + '/keys/' + key_file) # 密钥文件绝对路径
|
||||
with open(key_path) as f:
|
||||
data = f.read()
|
||||
key = RSA.importKey(data)
|
||||
return key
|
||||
|
||||
|
||||
def encrypt_data(**kwargs):
|
||||
"""
|
||||
用公钥加密
|
||||
Parameters:
|
||||
msg str 待加密信息
|
||||
Returns:
|
||||
加密后结果
|
||||
"""
|
||||
msg = kwargs['msg'] # 待加密信息
|
||||
public_key = get_key(key_file='rsa_public_key.pem') # 获取密钥
|
||||
cipher = PKCS1_cipher.new(public_key)
|
||||
encrypt_text = base64.b64encode(cipher.encrypt(bytes(msg.encode("utf8"))))
|
||||
return encrypt_text.decode('utf-8')
|
||||
|
||||
|
||||
def decrypt_data(**kwargs):
|
||||
"""
|
||||
用私钥解密
|
||||
Parameters:
|
||||
encrypt_msg str 加密信息
|
||||
Returns:
|
||||
执行正确 解密后结果
|
||||
执行错误 False
|
||||
"""
|
||||
try:
|
||||
encrypt_msg = kwargs['encrypt_msg'] # 加密信息
|
||||
private_key = get_key(key_file='rsa_private_key.pem') # 获取密钥
|
||||
cipher = PKCS1_cipher.new(private_key)
|
||||
back_text = cipher.decrypt(base64.b64decode(encrypt_msg), 0)
|
||||
return back_text.decode('utf-8')
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
|
||||
def check_data(**kwargs):
|
||||
"""
|
||||
对比数据和加密数据
|
||||
Parameters:
|
||||
msg str 数据
|
||||
encrypt_msg str 加密数据
|
||||
Returns:
|
||||
True 对比正确
|
||||
False 对比错误
|
||||
"""
|
||||
msg = kwargs['msg']
|
||||
decrypt_msg = decrypt_data(encrypt_msg=kwargs['encrypt_msg'])
|
||||
if decrypt_msg is False:
|
||||
return False
|
||||
elif msg == decrypt_msg:
|
||||
return True
|
||||
else:
|
||||
return False
|
|
@ -1,6 +1,10 @@
|
|||
{
|
||||
"UID": null,
|
||||
"email": null,
|
||||
"pwd": null,
|
||||
"name": null,
|
||||
"status": null,
|
||||
"role": null,
|
||||
"menus": null
|
||||
"group": null,
|
||||
"create_time": null
|
||||
}
|
Loading…
Reference in New Issue