cmdb/cmdb-api/core/account.py

99 lines
2.6 KiB
Python

# -*- coding:utf-8 -*-
from flask import Blueprint
from flask import request
from flask import g
from flask import abort
from flask import jsonify
from models import row2dict
from lib.account import AccountManager
from lib.auth import auth_with_key
account = Blueprint('account', __name__)
@account.route("/<int:uid>", methods=["GET"])
@auth_with_key
def get_user(uid=None):
manager = AccountManager()
user = manager.get_user_by_uid(uid)
if user:
return jsonify(rolenames=user.rolenames, user=row2dict(user))
else:
return jsonify(user=None)
@account.route("", methods=["POST"])
@auth_with_key
def create_user():
manager = AccountManager()
params = {}
for k, v in request.values.iteritems():
params[k] = v
user = manager.create_user(**params)
return jsonify(user=row2dict(user))
@account.route("/<int:uid>", methods=["PUT"])
@auth_with_key
def update_user(uid=None):
manager = AccountManager()
params = {}
for k, v in request.values.iteritems():
params[k] = v
ret, res = manager.update_user(uid, **params)
if not ret:
abort(res[0], res[1])
return jsonify(user=row2dict(res), rolenames=res.rolenames)
@account.route("/<int:uid>", methods=["DELETE"])
@auth_with_key
def delete_user(uid=None):
manager = AccountManager()
ret, res = manager.delete_user(uid)
if not ret:
abort(res[0], res[1])
return jsonify(uid=uid)
@account.route("/validate", methods=["POST"])
@auth_with_key
def validate():
username = request.values.get("username")
password = request.values.get("password")
manager = AccountManager()
user, authenticated = manager.validate(username, password)
if user and not authenticated:
return jsonify(code=401, user=row2dict(user), rolenames=user.rolenames)
elif not user:
return jsonify(code=404, message="user is not existed")
return jsonify(code=200, user=row2dict(user), rolenames=user.rolenames)
@account.route("/key", methods=["PUT"])
@auth_with_key
def update_key():
manager = AccountManager()
ret, res = manager.reset_key(g.user.uid)
if not ret:
abort(res[0], res[1])
return jsonify(user=row2dict(res), rolenames=res.rolenames)
@account.route("/password", methods=["PUT"])
@auth_with_key
def update_password():
manager = AccountManager()
old = request.values.get("password")
new = request.values.get("new_password")
confirm = request.values.get("confirm")
ret, res = manager.update_password(g.user.uid, old, new, confirm)
if not ret:
abort(res[0], res[1])
return jsonify(user=row2dict(res), rolenames=res.rolenames)