views.py 3.93 KB
import hashlib
import uuid
from flask import Blueprint, request, jsonify
from flask import current_app as k2
from flask_jwt_extended import jwt_required, get_jwt_identity
# from flask_sqlalchemy import session
# from sqlalchemy.orm import sessionmaker
# from k2.k2inst import Component

from .models import k2users


adm = Blueprint('adm', __name__, template_folder='templates', static_folder='static', static_url_path='/adm')


@adm.route('/register', methods=["POST"])
def register():
    params = request.json
    session = k2.extensions['sqlalchemy'].db.session
    try:
        user = k2users(**params)
        session.add(user)
        session.commit()
        token = user.get_token()
        return {'access_token': token}
    except:
        return jsonify({'error': 'Unauthorized'}), 401


@adm.route('/login', methods=["POST"])
def login():
    params = request.json
    login = params.get('login')
    password = params.get('password')
    user = k2users.authenticate(login, password)
    if user:
        token = user.get_token()
        return {'access_token': token}
    else:
        return jsonify({'error': 'Unauthorized'}), 401


@adm.route('/logout', methods=["GET"])
@jwt_required()
def logout():
    response = {
        'message': 'Logged out successfully'
    }
    return jsonify(response)


@adm.route('/users', methods=["GET"])
@jwt_required()
def grid_users():
    return jsonify({"data": "users"})


@adm.route('/roles', methods=["GET"])
@jwt_required()
def grid_roles():
    return jsonify({"data": "roles"})


@adm.route('/usersclients', methods=["GET"])
@jwt_required()
def users_clients():
    return jsonify({"data": "roles"})

@adm.route('/menuaaccess', methods=["GET"])
@jwt_required()
def menu_aaccess():
    return jsonify({"data": "roles"})


@adm.route('/newUser', methods=["GET", "POST"])
@jwt_required()
def newUser():
    session = k2.extensions['sqlalchemy'].db.session
    exist = session.query(k2users).filter_by(login=request.json['login']).first()
    if not exist:
        res = k2users(
            user_id=hashlib.md5(str(uuid.uuid4()).encode()).hexdigest(),
            login=request.json['login'],
            name=request.json['name'],
            email=request.json['email'],
            password=hashlib.md5(request.json['password'].encode()).hexdigest(),
            phone=request.json['phone'])
        if res:
            session.add(res)
            session.commit()
            return jsonify({'status': 'ok'})
    else:
        return jsonify({'error': 'Such user exist'}), 404


@adm.route('/changePassword', methods=["POST"])
@jwt_required()
def changePassword():
    session = k2.extensions['sqlalchemy'].db.session
    current_user = get_jwt_identity()
    user = session.query(k2users).filter_by(user_id=current_user).first()
    if user.password == hashlib.md5(request.json['old_password'].encode()).hexdigest():
        if request.json['new_password'] == request.json['re_new_password']:
            user.password = hashlib.md5(request.json['new_password'].encode()).hexdigest()
            session.commit()
        else:
            return jsonify({'error': 'Пароль не найден в базе'}), 404
    else:
        return jsonify({'error': 'Пароль не совпвдает'}), 404
    return jsonify({'status': 'ok'})


@adm.route('/menu-items')
def menu_items():
    menu = [
    {"heading": 'APPS & PAGES'},
    {
        "title": 'Адміністрування сайту',

        "icon": {"icon": 'mdi mdi-database'},
        "children": [
            {'title': 'Зміна паролю', 'to': 'adm-changePassword'},
            {'title': 'Новий користувач', 'to': 'adm-newUser'},
            {'title': 'Користувачі', 'to': 'adm-users'},
            {'title': 'Користувачі клієнти', 'to': 'adm-usersclients'},
            {'title': 'Права', 'to': 'adm-roles'},
            {'title': 'Доступ до меню', 'to': 'adm-menuaaccess'},
        ],
    }]

    return menu