Files
bitchmin/bitchmin-api/app/api/auth.py
2020-11-12 19:44:52 +00:00

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