mirror of
https://github.com/fergalmoran/bitchmin.git
synced 2025-12-22 09:27:53 +00:00
71 lines
1.7 KiB
Python
71 lines
1.7 KiB
Python
import logging
|
|
from datetime import timedelta
|
|
|
|
from flask import jsonify, request
|
|
from flask_jwt_extended import (
|
|
create_access_token,
|
|
jwt_refresh_token_required, create_refresh_token,
|
|
get_current_user
|
|
)
|
|
|
|
from app import db, jwt
|
|
from app.api import api
|
|
from app.config import Config
|
|
from app.models.user import User
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def __create_token(user_id):
|
|
expiry = timedelta(days=14) if Config.ISDEV else timedelta(minutes=15)
|
|
return create_access_token(
|
|
identity=user_id,
|
|
expires_delta=expiry,
|
|
fresh=True)
|
|
|
|
|
|
@jwt.user_loader_callback_loader
|
|
def user_loader_callback(identity):
|
|
return User.by_id(identity)
|
|
|
|
|
|
@api.route('/auth/register/', methods=('POST',))
|
|
def register():
|
|
data = request.get_json()
|
|
user = User(**data)
|
|
db.session.add(user)
|
|
db.session.commit()
|
|
return jsonify(user.to_dict()), 201
|
|
|
|
|
|
@api.route('/auth/login/', methods=('POST',))
|
|
def login():
|
|
data = request.get_json()
|
|
user = User.authenticate(**data)
|
|
|
|
if not user:
|
|
return jsonify({'message': 'Invalid credentials', 'authenticated': False}), 401
|
|
access_token = __create_token(user.id)
|
|
refresh_token = create_refresh_token(user.id)
|
|
|
|
return jsonify({
|
|
'accessToken': access_token,
|
|
'refreshToken': refresh_token,
|
|
'user': {
|
|
'fullName': user.full_name
|
|
}
|
|
}), 200
|
|
|
|
|
|
@api.route('/auth/token/refresh', methods=('POST',))
|
|
@jwt_refresh_token_required
|
|
def token_refresh():
|
|
user = get_current_user()
|
|
access_token = __create_token(user.id)
|
|
refresh_token = create_refresh_token(user.id)
|
|
|
|
return jsonify({
|
|
'accessToken': access_token,
|
|
'refreshToken': refresh_token, }
|
|
), 200
|