|
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) |
|
|