File size: 2,419 Bytes
7fad643
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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)