from flask import Flask, request, jsonify, Response, render_template_string, make_response import random import string import html import os import sqlite3 from werkzeug.utils import secure_filename app = Flask(__name__) # Initialize SQLite database def init_db(): conn = sqlite3.connect('/tmp/files.db') c = conn.cursor() c.execute('''CREATE TABLE IF NOT EXISTS files (code TEXT PRIMARY KEY, content TEXT)''') conn.commit() conn.close() init_db() def generate_unique_code(): chars = string.ascii_letters + string.digits while True: code = ''.join(random.choice(chars) for _ in range(6)) conn = sqlite3.connect('/tmp/files.db') c = conn.cursor() c.execute("SELECT code FROM files WHERE code = ?", (code,)) if not c.fetchone(): conn.close() return code conn.close() def escape_html(unsafe): return html.escape(unsafe) @app.route('/', methods=['GET', 'POST']) def handle_request(): if request.method == 'POST': content = None if 'multipart/form-data' in request.content_type: if 'file' not in request.files: return Response("No file uploaded", status=400) file = request.files['file'] if file.filename == '': return Response("No file selected", status=400) content = file.read().decode('utf-8') elif request.content_type == 'application/json': data = request.get_json() content = data.get('text') if not content: return Response("No text provided", status=400) else: return Response("Unsupported content type", status=400) unique_code = generate_unique_code() conn = sqlite3.connect('/tmp/files.db') c = conn.cursor() c.execute("INSERT INTO files (code, content) VALUES (?, ?)", (unique_code, content)) conn.commit() conn.close() domain = request.host return jsonify({ 'code': unique_code, 'url': f"https://{domain}/{unique_code}", 'rawUrl': f"https://{domain}/{unique_code}/raw" }) # For GET requests to root, show the form return render_template_string('''
', methods=['GET'])
def view_file(code):
return view_file_internal(code, False)
@app.route('//raw', methods=['GET'])
def view_raw_file(code):
return view_file_internal(code, True)
def view_file_internal(code, is_raw):
conn = sqlite3.connect('/tmp/files.db')
c = conn.cursor()
c.execute("SELECT content FROM files WHERE code = ?", (code,))
result = c.fetchone()
conn.close()
if not result:
return Response("File not found", status=404)
content = result[0]
if is_raw:
return Response(content, mimetype='text/plain')
else:
return render_template_string('''
File {{ code }}
File: {{ code }}
View Raw
{{ content | e }}
''', code=code, content=escape_html(content))
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860)