File size: 2,691 Bytes
a6d9922
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
from flask import Flask, request, jsonify, send_from_directory
from flask_cors import CORS
import os
import uuid
import json
from datetime import datetime, timedelta
from werkzeug.utils import secure_filename

app = Flask(__name__)
CORS(app)

UPLOAD_FOLDER = 'uploads'
METADATA_FOLDER = 'metadata'
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
os.makedirs(METADATA_FOLDER, exist_ok=True)

app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['MAX_CONTENT_LENGTH'] = 100 * 1024 * 1024  # 100MB limit

@app.route('/')
def index():
    return send_from_directory('.', 'uploader.html')

@app.route('/api/upload', methods=['POST'])
def upload_file():
    if 'file' not in request.files:
        return jsonify({'error': 'No file part'}), 400
    
    file = request.files['file']
    if file.filename == '':
        return jsonify({'error': 'No selected file'}), 400
    
    # Generate unique ID for the file
    file_id = str(uuid.uuid4())
    original_filename = secure_filename(file.filename)
    extension = os.path.splitext(original_filename)[1]
    stored_filename = f"{file_id}{extension}"
    
    file_path = os.path.join(app.config['UPLOAD_FOLDER'], stored_filename)
    file.save(file_path)
    
    file_size = os.path.getsize(file_path)
    
    # Store metadata
    metadata = {
        'id': file_id,
        'original_filename': original_filename,
        'stored_filename': stored_filename,
        'size': file_size,
        'upload_time': datetime.now().isoformat(),
        'password': None,
        'expiry_days': None
    }
    
    with open(os.path.join(METADATA_FOLDER, f"{file_id}.json"), 'w') as f:
        json.dump(metadata, f)
    
    return jsonify({
        'id': file_id,
        'original_filename': original_filename,
        'size': file_size
    })

@app.route('/api/set-sharing', methods=['POST'])
def set_sharing():
    data = request.json
    file_id = data.get('id')
    password = data.get('password')
    expiry_days = data.get('expiry_days')
    
    metadata_path = os.path.join(METADATA_FOLDER, f"{file_id}.json")
    if not os.path.exists(metadata_path):
        return jsonify({'error': 'File not found'}), 404
    
    with open(metadata_path, 'r') as f:
        metadata = json.load(f)
    
    metadata['password'] = password if password else None
    metadata['expiry_days'] = expiry_days
    metadata['share_url'] = f"/share/{file_id}"
    
    with open(metadata_path, 'w') as f:
        json.dump(metadata, f)
    
    # Generate share URL
    share_url = f"/share/{file_id}"
    
    return jsonify({
        'share_url': share_url,
        'id': file_id
    })

if __name__ == '__main__':
    app.run(debug=True, port=7860, host="0.0.0.0")