File size: 1,976 Bytes
2b06691
9cb31ae
2b06691
 
9cb31ae
2b06691
 
 
 
9cb31ae
 
 
 
 
beb9cca
2b06691
beb9cca
9cb31ae
2b06691
9cb31ae
2b06691
 
 
 
9cb31ae
beb9cca
 
 
 
 
 
 
 
 
 
 
 
 
 
2b06691
 
 
 
beb9cca
2b06691
beb9cca
2b06691
 
9cb31ae
2b06691
 
 
9cb31ae
2b06691
 
 
 
 
beb9cca
 
 
2b06691
 
 
 
 
 
 
 
 
9cb31ae
 
61e6238
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
from flask import Flask, request, jsonify, send_file
from flask_cors import CORS
from werkzeug.utils import secure_filename
import tempfile
import uuid
import os
import io
import base64
from PIL import Image
import time

app = Flask(__name__)
CORS(app)

# In-memory store: { id: { data, image (optional), expire_at, view_once } }
SECRETS = {}
MAX_IMAGE_SIZE = 300 * 1024  # 300 KB

@app.route("/api/store", methods=["POST"])
def store():
    form = request.form
    data = form.get("data")
    ttl = int(form.get("ttl", 300))
    view_once = form.get("view_once") == "true"

    # Handle image if present
    image_file = request.files.get("image")
    image_data = None

    if image_file:
        img_bytes = image_file.read()
        if len(img_bytes) > MAX_IMAGE_SIZE:
            image = Image.open(io.BytesIO(img_bytes))
            image.thumbnail((1024, 1024))  # Resize for safety
            output = io.BytesIO()
            image.save(output, format="JPEG", optimize=True, quality=70)
            image_data = base64.b64encode(output.getvalue()).decode("utf-8")
        else:
            image_data = base64.b64encode(img_bytes).decode("utf-8")

    sid = str(uuid.uuid4())
    SECRETS[sid] = {
        "data": data,
        "image": image_data,
        "expire_at": time.time() + ttl,
        "view_once": view_once
    }
    return jsonify({"id": sid})

@app.route("/api/fetch/<sid>")
def fetch(sid):
    secret = SECRETS.get(sid)
    if not secret:
        return jsonify({"error": "Not found"}), 404
    if time.time() > secret["expire_at"]:
        del SECRETS[sid]
        return jsonify({"error": "Expired"}), 410

    response = {"data": secret["data"]}
    if secret.get("image"):
        response["image"] = secret["image"]

    if secret["view_once"]:
        del SECRETS[sid]

    return jsonify(response)

@app.route("/")
def index():
    return "Sharelock Flask backend is running."

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