Merge branch 'wsc' into 'master'

Wsc

See merge request root/tfse_admin!4
This commit is contained in:
王思川 2022-01-10 10:07:27 +00:00
commit 67d0c7e2f3
10 changed files with 322 additions and 3 deletions

View File

@ -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

0
menus/__init__.py Normal file
View File

View File

@ -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()

35
user/process.py Normal file
View File

@ -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)

View File

@ -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

View File

View File

@ -0,0 +1,51 @@
-----BEGIN RSA PRIVATE KEY-----
MIIJJQIBAAKCAgEArqR8oMamVxuOLF0z8cGR4u/OXo+j6GM9my9FMHT5bEvYoFCT
mZe9AMLY8qcW25BPX02oxIM9m3VAxhwaI7V/OOm0Be3pXOJlEtIo+XroMfgPq8k6
cyfqQl3lVdU7Sgs+IktIda3/Tt1ygfCUH0ejitRfP9coF6sG2MbbnTPfWHcAawEF
bYV4kMicRk6bxB8o6OdhkYkkcMZAlmEpKr3W5SCxJAfLYXEh2M6tlKdu4mdppyUM
XrahzgaqbarDHa33Y2me3jDHroSDmU6kdkc8fT/Stk7aaBKH2mOOGKCGUfCgA3oN
l2ODPNPFqwbXgLOOem9hrC0/yXVrELHULGSwem0wPjThhuGqUi2lGzP5QGbG7BRO
JW9OYteCYQwgVPr6RfkuD4TsoCyo1gwZsOnMEyBRl4a0yDt4BjhS6NBdb3/8rZ0V
AExv2ZTCkTQMhrsUV6MyqLn0LSnDfOaNDdQqGPhshi+31tPKkEFIUA/tGzAhs/HQ
zigxf7I0oNSXPWtLU+anG3NDmv14xCz3CUPfAaI0M5ZUDWDzq6C6BVNf3IEGxDrT
DRy3ZSQgjl0hNVAi2s2IB6dnSn9XYENpIfVTwjzH7Kpnr0Ioft+/SvQiRMLG13Gr
Re2dc6uSqaCflKyzQy9c4JCO6ECgEIzBt5jeOKPUZBmfiSH0TzFwmbkGgHkCAwEA
AQKCAgB/AFktZijTEdPbSVAcECNyP+f4dkbBGWJUtxR+v6Ie8i0vsEkWGfW1Vv0D
wSTrOM+vw77mYXZs1eDr8MXFkBhboABti2z4Qh80h6aKfqnapMVorKaX1cAS0UuU
lsNN/k0KDWs9QPJ4PKwn+HcPJD63F+fIekPKqnIJNNvCP1W9dJTWO+Dhm31o9KpI
qqO2BN7wOEuI1Y2tgU64zSFt1q4u5A5N4GkzjF0L2Ij8oKIPfRqlFVkgi3mxZMGN
jO/lZnyQS9/fPuQHcpBs7XbGGNnRT5eBQmir5EXtOBa+rAXiErWasaiungxzMKH/
1LLlAi6rtNH3rtRDQeNBOcDNI8/9k1e9ZIztrVXV/Ilq2AFcxgCbbJJVHjWljS28
dAux9ZkXgZSkfMmSZmSmtk1JcSX32lQAq3UVI9TtESS3vE9iLqvJ6WB6xkiuag/y
R9hRZNCVT6GIcil1kQe4B9xxCzasA3G7NmPG0Q0mWSbVgzvBu4rabPFP6Nw7N6oh
sOhEhfx5bfCRXYvRszYnHLA74O2940bksMpyeH3KPdHsKvh9k8J1rtCIZ86T0sSL
1c1Eeqk2t4axCdhwdJaSyStSuA9VTK1pb3y6Pl/E61QBseSBYjRwrO6vKqRUZTgo
hJB7SbvN9rtQgR4gNDfBO/tjUK84ZaEVjualQKqYNrroxDqG/QKCAQEA5Xs8zu/P
k8bb1GxPwieP2MU6bM2FjrSD6blXqOxFz4c02OV7HG3PT6ykPx2Mrnceoq3TJxmX
sYogFWtGlwD27Z59nsCAfDAfKmNB6O5dMahfoCrSJdKWNpDrNu773Mm/XPtBYCvZ
vsXxo26QbMAto2XG9qd7eHTsns2zUdP8smppDkk6fXQ9DFUyKrObZK/1PZAIPzxE
LuWTbETenNJ91FvUVKmBeg+BAO2t6GS5NZ1utZYf27LsvAQ3XyTHYzlFgS7sCf8L
XwnA9+ykONaEPOX4p4KUI+Kua7cfE3ULgW7EVJTSZgZ3SVEbw2ivRrALoZiCqJR2
iHxBYMWPL2pXxwKCAQEAwtLylQNLs3oRBieoWFHLrGV/1+7hp1u6svXlX3FIlCO9
eOQQBoIeSyH4wBaFthb6jxkMXBg2mSmZKZfun2cgGPuqcO8kzNdJV3JUDx7SWJQx
+tcFixHsJmWm0zj5TAF6PQdyZH+XD+/Rq8iDZU+BIUIS1GmyHZEY5BfsBG5HYwgJ
JL/WR/MtaQwuXlWU8BREYq6O1Sv/WIu4Func88theiCMh8STiPbM5ggUL94oO8W6
TGq30e1z77WXIHhZtu9963sPprVpOBz3t+o3Rg/egLkDsfl9QMfa8oQOnzABOeIF
hTvLK6m4qFOCQGdRrzpWINlNTn4idFeOnGygioblvwKCAQB+2rUun5pb0l3K+2TL
qxr1dXFqm+HslRUmqnIuyw18Pv2TuKdpe7pSDNlummMePnMM8pH610bnubcqn/aR
mtLlX+uJSli8Tc2snNnebYXO4Yia/ZDVn6ex2kJsR4eq8Ut7ltj41MS1lK6S7Zeg
xkt0O9rUlpjGabwzvPoXjdvutKwGXayblRn6K05kFI0eB7bFpU0px6LZWcc43olA
n4s3TNv/QQR1+QQTA1BTWvqXDMQaVTafODVtaddCHQ6rZwlo9As/K2GZ08Z8RrAx
S0QmdeoSjzhc7f4FRWFEXDtT/WtCZlI4W/Ks8M0sJD5gEQkc9zWjAw7TO/zYBd21
FFAZAoH/Ly7nkS87Jjxp4xO3sawdp6LtU16HSADvNmhXJMZKzZXaTWzudKUOsSOJ
GvxZZcAq7n0igStcDbwFXA1vvSs8mtBYdwFz6Cg7mvIVaZQNXWaGtDlfHk844hO8
U2t49O9mq2EiUzSTYUizfucQ63hVzbgy1z7B5Gc/n/4rKueKYnGPxVawjrxWQxqw
ICiZ6Yr/BOdBsF73eHpeGy6IVILtGKbJYhg5ovIirZNHUFB9bfx1Igy2eCEJ8wQH
ldWP5L4bwOwM3lMRKIXbeK9As7ckLAii3HeP3iCI5jMVV3hI07vpmlrg2bJBBoMz
CGX9YnK+aTY3gssJjSOnZjropqQFAoIBAHUJKTJuSaDDva6VvuM2E3PYwadI7a1z
9myXh+Q1DaT7bD6c56ya43W0iJrjfY6Bfzo3ZiwD2CmV447+0USRueWnPOdFD8ni
N5fe6a8HUAPXy2XU3NWbGukZmXQ1YBJoFphXXODFoq3/NGeX/pFUSfkXc73OY5s+
96aVpj3jBjp47X2yHzI+0wGokwSH0FKWBTuin+mR81uP1ifNdzCVwOBUF+g12FV9
Lk+zLlOWNIFun2v/pNlwqaLIxKHLfNYbOK2S9SKehFCQbw6kYgdn8gXVsPMQfQuB
TcSugqFtSGmTnnUpt3vq8AB2RAxDXcXztNw3NEl8wmJzqFjuAd0tJf0=
-----END RSA PRIVATE KEY-----

View File

@ -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-----

75
user/security/rsa.py Normal file
View File

@ -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

View File

@ -1,6 +1,10 @@
{
"UID": null,
"email": null,
"pwd": null,
"name": null,
"status": null,
"role": null,
"menus": null
"group": null,
"create_time": null
}