88 lines
No EOL
4.3 KiB
Python
88 lines
No EOL
4.3 KiB
Python
from flask import request, jsonify
|
|
import json
|
|
from .require_decorators import get_cropped_password
|
|
from .require_decorators import get_cropped_otp
|
|
from .require_decorators import get_cropped_key
|
|
from . import token_generator_util
|
|
from .data import dao_users
|
|
from .data import dao_session
|
|
from .data import dao_reset_password_tokens
|
|
from .data import dao_file_metadata_of_user
|
|
from .data import dao_file_metadata
|
|
from .data.data_models import User
|
|
from .data.data_models import ResponseCode
|
|
|
|
def handle_change_password(user: User):
|
|
password = get_cropped_password(request.form.get('password'))
|
|
if password is None:
|
|
errorResponse = jsonify({'message':'Invalid Password!','code':ResponseCode.INVALID_PASSWORD})
|
|
return errorResponse, 400
|
|
|
|
new_password = get_cropped_password(request.form.get('new_password'))
|
|
if new_password is None:
|
|
errorResponse = jsonify({'message':'New Password cannot be empty!','code':ResponseCode.INVALID_NEW_PASSWORD})
|
|
return errorResponse, 400
|
|
|
|
foundUser = dao_users.get_user_by_name_and_password(user_name = user.name, password = password)
|
|
if (foundUser is None):
|
|
errorResponse = jsonify({'message':'Invalid Password!','code':ResponseCode.INVALID_PASSWORD})
|
|
return errorResponse, 400
|
|
|
|
session = token_generator_util.generate_session(user.id)
|
|
dao_users.update_user_password(user_id = user.id, new_password = new_password)
|
|
dao_session.create_new_single_session(session = session)
|
|
sessionResponse = jsonify({
|
|
'access_token': session.access_token,
|
|
'refresh_token': session.refresh_token,
|
|
'expires_at': session.access_expires_at
|
|
})
|
|
return sessionResponse, 200
|
|
|
|
def handle_reset_password(username: str, password: str):
|
|
reset_password_token = get_cropped_otp(request.form.get('reset_password_token'))
|
|
if reset_password_token is None:
|
|
errorResponse = jsonify({'message':'Invalid Reset Password Token given!','code':ResponseCode.UNKNOWN_RESET_PASSWORD_TOKEN})
|
|
return errorResponse, 400
|
|
|
|
if dao_reset_password_tokens.is_valid_token(token = reset_password_token, username = username) is False:
|
|
errorResponse = jsonify({'message':'Invalid Reset Password Token given!','code':ResponseCode.UNKNOWN_RESET_PASSWORD_TOKEN})
|
|
return errorResponse, 400
|
|
|
|
foundUser = dao_users.get_user_by_name(username = username)
|
|
if (foundUser is None):
|
|
errorResponse = jsonify({'message':'User cannot be found!','code':ResponseCode.NOT_FOUND_USER})
|
|
return errorResponse, 400
|
|
|
|
dao_users.update_user_password(user_id = foundUser.id, new_password = password)
|
|
|
|
dao_reset_password_tokens.delete_tokens(username = username)
|
|
|
|
return jsonify({'message':'Password was Saved!','code':ResponseCode.SUCCESS_SAVED_PASSWORD}), 200
|
|
|
|
def handle_get_is_user_priviliged(user: User):
|
|
return jsonify({'is_privileged': user.privileged}), 200
|
|
|
|
def handle_add_user_file_data(user: User):
|
|
metadata_to_save = request.get_json(force=True, silent = True)
|
|
if (metadata_to_save is not None and isinstance(metadata_to_save,dict)):
|
|
dao_file_metadata_of_user.insert_metadata(user_id = user.id, metadata = metadata_to_save)
|
|
return jsonify({'message': 'User\'s File MetaData Saved!', 'code': ResponseCode.SUCCESS_SAVED_USER_FILE_METADATA}), 200
|
|
return jsonify({'message': 'Couldn\'t save user\'s metadata!', 'code': ResponseCode.CANT_SAVE_USER_FILE_METADATA}), 400
|
|
|
|
def handle_get_user_file_data(user: User):
|
|
return jsonify(dao_file_metadata_of_user.get_metadata(user_id = user.id)), 200
|
|
|
|
|
|
def handle_add_file_metadata(user: User):
|
|
metadata_to_save = request.get_json(force=True, silent = True)
|
|
if (metadata_to_save is not None and isinstance(metadata_to_save,dict)):
|
|
dao_file_metadata.insert_metadata(metadata = metadata_to_save)
|
|
return jsonify({'message': 'File MetaData Saved!', 'code': ResponseCode.SUCCESS_SAVED_FILE_METADATA}), 200
|
|
return jsonify({'message': 'Couldn\'t save metadata!', 'code': ResponseCode.CANT_SAVE_FILE_METADATA}), 400
|
|
|
|
|
|
def handle_get_file_metadata(user: User):
|
|
file_key = get_cropped_key(request.args.get('file_key'))
|
|
if (file_key is None):
|
|
return jsonify({'message': 'Invalid FileKey (file_key)!', 'code': ResponseCode.INVALID_FILE_KEY}), 400
|
|
return jsonify(dao_file_metadata.get_metadata(file_key = file_key)), 200 |