from flask import Flask, render_template, request import requests import json app = Flask(__name__) def get_folder_json(folder_id, headers): url = f"https://storage.yoghourt.space/content/list?parent_id={folder_id}&order=2&page=1&size=100" response = requests.get(url, headers=headers) return response.text def process_content(json_data): try: data = json.loads(json_data) except json.JSONDecodeError: return [], [] if "data" not in data or data["data"] is None: return [], [] folders = [] files = [] content_list = data["data"].get("content_list") if not content_list: return folders, files for item in content_list: if "content_type" not in item or "content" not in item: continue content_type = item["content_type"] content = item["content"] if content_type == "folder": if "id" in content and "name" in content: folders.append({"id": content["id"], "name": content["name"]}) elif content_type == "file": if "cid" in content and "name" in content: files.append({"cid": content["cid"], "name": content["name"]}) return folders, files def generate_tree(folder_id, headers, gateway, indent=0): result = [] folder_json = get_folder_json(folder_id, headers) folders, files = process_content(folder_json) for folder in folders: result.append(" " * indent + f"{folder['name']}:") result.extend(generate_tree(folder["id"], headers, gateway, indent + 1)) for file in files: result.append(" " * indent + f"{file['name']}:https://{gateway}/ipfs/{file['cid']}?filename={file['name']}") return result @app.route('/', methods=['GET', 'POST']) def index(): if request.method == 'POST': auth = request.form['auth'] root_id = request.form['root_id'] gateway = request.form['gateway'] headers = {"Authorization": auth} try: output_lines = generate_tree(root_id, headers, gateway) output = '\n'.join(output_lines) return render_template('result.html', output=output) except Exception as e: return f"Error: {str(e)}" return render_template('index.html') if __name__ == '__main__': app.run(host='0.0.0.0', port=7860)