mirror of
https://github.com/veops/cmdb.git
synced 2025-08-08 15:07:55 +08:00
v1 vsersion
This commit is contained in:
145
lib/account.py
Normal file
145
lib/account.py
Normal file
@@ -0,0 +1,145 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
|
||||
import uuid
|
||||
import random
|
||||
import string
|
||||
import datetime
|
||||
|
||||
from flask import current_app
|
||||
from flask import abort
|
||||
|
||||
from extensions import db
|
||||
from models.account import UserCache
|
||||
from models.account import User
|
||||
from models.account import UserRole
|
||||
|
||||
|
||||
class AccountManager(object):
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def get_user_by_uid(self, uid):
|
||||
user = UserCache.get(uid)
|
||||
return user
|
||||
|
||||
def _generate_key(self):
|
||||
key = uuid.uuid4().hex
|
||||
secret = ''.join(random.sample(string.ascii_letters +
|
||||
string.digits + '~!@#$%^&*?', 32))
|
||||
return key, secret
|
||||
|
||||
def validate(self, username, password):
|
||||
user, authenticated = User.query.authenticate(username, password)
|
||||
return user, authenticated
|
||||
|
||||
def create_user(self, **kwargs):
|
||||
username = kwargs.get("username")
|
||||
if username:
|
||||
user = UserCache.get(username)
|
||||
if user is not None:
|
||||
user, authenticated = self.validate(
|
||||
username, kwargs.get("password"))
|
||||
if authenticated:
|
||||
return user
|
||||
else:
|
||||
return abort(401, "authenticate validate failed")
|
||||
else:
|
||||
return abort(400, "argument username is required")
|
||||
user = User()
|
||||
email = kwargs.get("email", "")
|
||||
if not email:
|
||||
return abort(400, "argument email is required")
|
||||
user.email = email
|
||||
user.password = kwargs.get("password")
|
||||
user.username = kwargs.get("username", "")
|
||||
user.nickname = kwargs.get("nickname") if kwargs.get("nickname") \
|
||||
else kwargs.get("username", "")
|
||||
key, secret = self._generate_key()
|
||||
user.key = key
|
||||
user.secret = secret
|
||||
user.date_joined = datetime.datetime.now()
|
||||
user.block = 0
|
||||
|
||||
db.session.add(user)
|
||||
try:
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
current_app.logger.error("create user is error {0}".format(str(e)))
|
||||
return abort(500, "create user is error, {0}".format(str(e)))
|
||||
return user
|
||||
|
||||
def update_user(self, uid, **kwargs):
|
||||
user = UserCache.get(uid)
|
||||
if user is None:
|
||||
return abort(400, "the user[{0}] is not existed".format(uid))
|
||||
user.username = kwargs.get("username", "") \
|
||||
if kwargs.get("username") else user.username
|
||||
user.nickname = kwargs.get("nickname") \
|
||||
if kwargs.get("nickname") else user.nickname
|
||||
user.department = kwargs.get("department") \
|
||||
if kwargs.get("department") else user.department
|
||||
user.catalog = kwargs.get("catalog") \
|
||||
if kwargs.get("catalog") else user.catalog
|
||||
user.email = kwargs.get("email") \
|
||||
if kwargs.get("email") else user.email
|
||||
user.mobile = kwargs.get("mobile") \
|
||||
if kwargs.get("mobile") else user.mobile
|
||||
db.session.add(user)
|
||||
try:
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
current_app.logger.error("create user is error {0}".format(str(e)))
|
||||
return abort(500, "create user is error, {0}".format(str(e)))
|
||||
return True, user
|
||||
|
||||
def delete_user(self, uid):
|
||||
user = UserCache.get(uid)
|
||||
if user is None:
|
||||
return abort(400, "the user[{0}] is not existed".format(uid))
|
||||
db.session.query(UserRole).filter(UserRole.uid == uid).delete()
|
||||
db.session.delete(user)
|
||||
try:
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
current_app.logger.error("delete user error, {0}".format(str(e)))
|
||||
return abort(500, "delete user error, {0}".format(str(e)))
|
||||
return True, uid
|
||||
|
||||
def update_password(self, uid, old, new, confirm):
|
||||
user = User.query.get(uid)
|
||||
if not user:
|
||||
return abort(400, "user is not existed")
|
||||
if not user.check_password(old):
|
||||
return abort(400, "invalidate old password")
|
||||
if not (new and confirm and new == confirm):
|
||||
return abort(400, """Password cannot be empty,
|
||||
two inputs must be the same""")
|
||||
user.password = new
|
||||
db.session.add(user)
|
||||
try:
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
current_app.logger.error("set password error, %s" % str(e))
|
||||
return abort(500, "set password errors, {0:s}".format(str(e)))
|
||||
return True, user
|
||||
|
||||
def reset_key(self, uid):
|
||||
user = UserCache.get(uid)
|
||||
if user is None:
|
||||
return abort(400, "the user[{0}] is not existed".format(uid))
|
||||
key, secret = self._generate_key()
|
||||
user.key = key
|
||||
user.secret = secret
|
||||
db.session.add(user)
|
||||
try:
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
current_app.logger.error("reset key is error, {0}".format(str(e)))
|
||||
return abort(500, "reset key is error, {0}".format(str(e)))
|
||||
return True, user
|
Reference in New Issue
Block a user