from typing import TypedDict from flask import request from src.lib.api import ( create_api_v2_response, create_api_v2_not_found_error_response, get_api_v2_request_data, create_api_v2_invalid_body_error_response, create_api_v2_client_error_response, TDAPIError, ) from src.lib.files import get_archive_files, try_set_password def get_file_overview(file_hash: str): archive = get_archive_files(file_hash) if not archive: return create_api_v2_not_found_error_response(600) response = create_api_v2_response(archive) response.headers["Cache-Control"] = "s-maxage=600" return response class TDFileUpdate(TypedDict): password: str def set_file_password(file_hash: str): data: TDFileUpdate = get_api_v2_request_data(request) if not isinstance(data, dict): return create_api_v2_invalid_body_error_response() password = data.get("password") if not password: error = TDAPIError(type="api_invalid_body_data", message="Password is required.") return create_api_v2_client_error_response(error) archive = get_archive_files(file_hash) if not archive: return create_api_v2_not_found_error_response() if archive.password: error = TDAPIError(type="api_invalid_body_data", message="Password is already set.") return create_api_v2_client_error_response(error, 409) is_set = try_set_password(file_hash, [password]) if not is_set: error = TDAPIError(type="api_invalid_body_data", message="Invalid password.") return create_api_v2_client_error_response(error) response = create_api_v2_response(file_hash) return response