mirror of https://github.com/veops/cmdb.git
145 lines
5.1 KiB
Python
145 lines
5.1 KiB
Python
# -*- 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 |