2024-01-07 11:28:49 +00:00
|
|
|
from flask import Blueprint, jsonify, request
|
|
|
|
from services.UserService import UserService
|
|
|
|
from flask_jwt_extended import JWTManager, jwt_required, create_access_token, get_jwt_identity
|
|
|
|
from middlewares import validate_user_post_request, validate_user_login_request, authenticate_user
|
|
|
|
|
|
|
|
userRoutes = Blueprint('userRoutes', __name__)
|
|
|
|
|
|
|
|
|
|
|
|
@userRoutes.route('/', methods=['GET'])
|
|
|
|
@userRoutes.route('', methods=['GET'])
|
|
|
|
@authenticate_user
|
|
|
|
def allUsers():
|
|
|
|
users = UserService.get_all_users()
|
|
|
|
return jsonify(users), 200
|
|
|
|
|
|
|
|
@userRoutes.route('/', methods=['POST'])
|
|
|
|
@userRoutes.route('', methods=['POST'])
|
|
|
|
@validate_user_post_request
|
|
|
|
def createNewUser():
|
|
|
|
try:
|
|
|
|
data = request.json
|
|
|
|
if UserService.get_user_by_email(data['email']):
|
|
|
|
return jsonify({'error': 'User already exists'}), 400
|
|
|
|
new_user = UserService.create_user(data)
|
|
|
|
if new_user:
|
|
|
|
return jsonify(new_user), 201
|
|
|
|
else:
|
|
|
|
return jsonify({'error': 'Failed to create user'}), 400
|
|
|
|
except Exception as e:
|
|
|
|
return jsonify({'error': str(e)}), 500
|
|
|
|
|
|
|
|
@userRoutes.route('/login', methods=['POST'])
|
|
|
|
@validate_user_login_request
|
|
|
|
def loginUser():
|
|
|
|
try:
|
|
|
|
data = request.json
|
|
|
|
user = UserService.verify_user(data)
|
|
|
|
if user:
|
|
|
|
sessionToken = create_access_token(identity=user.id)
|
|
|
|
response = jsonify(user.to_dict())
|
|
|
|
response.set_cookie('access_token_cookie', sessionToken, httponly=True, path='/')
|
|
|
|
return response, 200
|
|
|
|
else:
|
|
|
|
return jsonify({'error': 'Invalid credentials'}), 400
|
|
|
|
except Exception as e:
|
|
|
|
return jsonify({'error': str(e)}), 500
|
2024-01-07 11:42:48 +00:00
|
|
|
|
|
|
|
@userRoutes.route('/logout', methods=['POST'])
|
|
|
|
@jwt_required(optional=True)
|
|
|
|
def logoutUser():
|
|
|
|
try:
|
|
|
|
response = jsonify({'message': 'Logged out successfully'})
|
|
|
|
response.set_cookie('access_token_cookie', '', expires=0)
|
|
|
|
return response, 200
|
|
|
|
except Exception as e:
|
|
|
|
return jsonify({'error': str(e)}), 500
|
|
|
|
|