Files
simplefileupload-server/src/app.py

73 lines
2.5 KiB
Python
Raw Normal View History

2024-10-07 23:16:42 -04:00
import os
import uuid
2025-04-15 07:44:20 -04:00
from functools import wraps
2024-10-07 23:16:42 -04:00
from flask import Flask, request, jsonify, send_from_directory
from werkzeug.utils import secure_filename
import requests
2025-04-15 07:44:20 -04:00
from dotenv import load_dotenv
2024-10-07 23:16:42 -04:00
import utils.mLogger as log
from controllers.file_controller import upload_file, download_file, delete_file
2025-04-14 20:47:26 -04:00
from views import views
2024-10-07 23:16:42 -04:00
2025-04-15 08:08:22 -04:00
# Get the project root directory (one level up from src)
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
env_path = os.path.join(project_root, '.env')
# Load environment variables with explicit path
load_dotenv(dotenv_path=env_path)
# Debug log for environment loading
log.i(f"Loading .env from: {env_path}")
log.i(f"File exists: {os.path.exists(env_path)}")
2025-04-15 07:44:20 -04:00
2024-10-07 23:16:42 -04:00
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'tmp/uploads'
2025-04-15 07:44:20 -04:00
app.config['CLIENT_KEY'] = os.getenv('CLIENT_KEY', 'default-secret-key')
2024-10-07 23:16:42 -04:00
2025-04-15 08:08:22 -04:00
# Log the loaded client key (masked)
if app.config['CLIENT_KEY']:
masked_key = app.config['CLIENT_KEY'][:4] + '*' * (len(app.config['CLIENT_KEY']) - 4)
log.i(f"Loaded client key: {masked_key}")
else:
log.w("No client key configured, using default")
# Log all environment variables (masked)
for key, value in os.environ.items():
if 'KEY' in key or 'SECRET' in key.upper():
masked = value[:4] + '*' * (len(value) - 4) if value else None
log.i(f"Env: {key}={masked}")
2024-10-07 23:16:42 -04:00
if not os.path.exists(app.config['UPLOAD_FOLDER']):
os.makedirs(app.config['UPLOAD_FOLDER'])
2025-04-15 07:44:20 -04:00
def require_client_key(f):
@wraps(f)
def decorated_function(*args, **kwargs):
client_key = request.headers.get('X-Client-Key')
2025-04-15 08:08:22 -04:00
if not client_key:
log.e("No client key provided in request headers")
return jsonify({'error': 'Missing client key'}), 401
expected_key = app.config['CLIENT_KEY']
if client_key != expected_key:
log.e(f"Invalid client key provided. Expected length: {len(expected_key)}, Got length: {len(client_key)}")
return jsonify({'error': 'Invalid client key'}), 401
log.i("Client key authentication successful")
2025-04-15 07:44:20 -04:00
return f(*args, **kwargs)
return decorated_function
2024-10-07 23:16:42 -04:00
# Route for file uploads
2025-04-15 07:44:20 -04:00
app.route('/upload', methods=['POST'])(require_client_key(upload_file))
2024-10-07 23:16:42 -04:00
2025-04-14 20:47:26 -04:00
# Route for downloading the file
app.route('/download/<code>', methods=['GET'])(download_file)
2024-10-07 23:16:42 -04:00
# Route for deleting the file
app.route('/delete/<code>', methods=['DELETE'])(delete_file)
2025-04-14 20:47:26 -04:00
app.register_blueprint(views)
2024-10-07 23:16:42 -04:00
if __name__ == '__main__':
log.i("Running flask in debug...")
app.run(debug=True, host="0.0.0.0", port=7777)