import logging from flask import Blueprint, request, jsonify logger = logging.getLogger('picell') bp = Blueprint('files', __name__) @bp.route('/api/files/users', methods=['GET']) def get_file_users(): """Get file storage users.""" try: from app import file_manager users = file_manager.get_users() return jsonify(users) except Exception as e: logger.error(f"Error getting file users: {e}") return jsonify({"error": str(e)}), 500 @bp.route('/api/files/users', methods=['POST']) def create_file_user(): """Create file storage user.""" try: from app import file_manager data = request.get_json(silent=True) if data is None: return jsonify({"error": "No data provided"}), 400 username = data.get('username') password = data.get('password') if not username or not password: return jsonify({"error": "Missing required fields: username, password"}), 400 result = file_manager.create_user(username, password) return jsonify({"created": result}) except Exception as e: logger.error(f"Error creating file user: {e}") return jsonify({"error": str(e)}), 500 @bp.route('/api/files/users/', methods=['DELETE']) def delete_file_user(username): """Delete file storage user.""" try: from app import file_manager result = file_manager.delete_user(username) return jsonify(result) except Exception as e: logger.error(f"Error deleting file user: {e}") return jsonify({"error": str(e)}), 500 @bp.route('/api/files/folders', methods=['POST']) def create_folder(): """Create folder.""" try: from app import file_manager data = request.get_json(silent=True) if data is None: return jsonify({"error": "No data provided"}), 400 username = data.get('username') folder_path = data.get('folder_path') or data.get('path') if not username or not folder_path: return jsonify({"error": "Missing required fields: username, folder_path"}), 400 result = file_manager.create_folder(username, folder_path) return jsonify({"created": result}) except ValueError as e: return jsonify({"error": str(e)}), 400 except Exception as e: logger.error(f"Error creating folder: {e}") return jsonify({"error": str(e)}), 500 @bp.route('/api/files/folders//', methods=['DELETE']) def delete_folder(username, folder_path): """Delete folder.""" try: from app import file_manager result = file_manager.delete_folder(username, folder_path) return jsonify(result) except ValueError as e: return jsonify({"error": str(e)}), 400 except Exception as e: logger.error(f"Error deleting folder: {e}") return jsonify({"error": str(e)}), 500 @bp.route('/api/files/upload/', methods=['POST']) def upload_file(username): """Upload file.""" try: from app import file_manager if 'file' not in request.files: return jsonify({"error": "No file provided"}), 400 file = request.files['file'] path = request.form.get('path', '') or file.filename or '' file_data = file.read() result = file_manager.upload_file(username, path, file_data) return jsonify({"uploaded": result}) except ValueError as e: return jsonify({"error": str(e)}), 400 except Exception as e: logger.error(f"Error uploading file: {e}") return jsonify({"error": str(e)}), 500 @bp.route('/api/files/download//', methods=['GET']) def download_file(username, file_path): """Download file.""" try: from app import file_manager result = file_manager.download_file(username, file_path) return jsonify(result) except ValueError as e: return jsonify({"error": str(e)}), 400 except Exception as e: logger.error(f"Error downloading file: {e}") return jsonify({"error": str(e)}), 500 @bp.route('/api/files/delete//', methods=['DELETE']) def delete_file(username, file_path): """Delete file.""" try: from app import file_manager result = file_manager.delete_file(username, file_path) return jsonify(result) except ValueError as e: return jsonify({"error": str(e)}), 400 except Exception as e: logger.error(f"Error deleting file: {e}") return jsonify({"error": str(e)}), 500 @bp.route('/api/files/list/', methods=['GET']) def list_files(username): """List files.""" try: from app import file_manager folder = request.args.get('folder', '') result = file_manager.list_files(username, folder) return jsonify(result) except ValueError as e: return jsonify({"error": str(e)}), 400 except Exception as e: logger.error(f"Error listing files: {e}") return jsonify({"error": str(e)}), 500 @bp.route('/api/files/status', methods=['GET']) def get_file_status(): """Get file service status.""" try: from app import file_manager status = file_manager.get_status() return jsonify(status) except Exception as e: logger.error(f"Error getting file status: {e}") return jsonify({"error": str(e)}), 500 @bp.route('/api/files/connectivity', methods=['GET']) def test_file_connectivity(): """Test file service connectivity.""" try: from app import file_manager result = file_manager.test_connectivity() return jsonify(result) except Exception as e: logger.error(f"Error testing file connectivity: {e}") return jsonify({"error": str(e)}), 500