File size: 1,453 Bytes
9cb31ae |
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 |
from flask import Flask, request, jsonify
from flask_cors import CORS
from datetime import datetime, timedelta
import uuid
import threading
import time
app = Flask(__name__)
CORS(app)
storage = {}
@app.route('/api/store', methods=['POST'])
def store():
req = request.get_json()
data = req.get('data')
ttl = int(req.get('ttl', 3600)) # default 1 hour
view_once = bool(req.get('view_once', False))
secret_id = str(uuid.uuid4())[:8]
expire_at = datetime.utcnow() + timedelta(seconds=ttl)
storage[secret_id] = {
'data': data,
'expire_at': expire_at,
'view_once': view_once,
}
return jsonify({'id': secret_id})
@app.route('/api/fetch/<secret_id>', methods=['GET'])
def fetch(secret_id):
secret = storage.get(secret_id)
if not secret:
return jsonify({'error': 'Not found'}), 404
if datetime.utcnow() > secret['expire_at']:
del storage[secret_id]
return jsonify({'error': 'Expired'}), 410
data = secret['data']
if secret['view_once']:
del storage[secret_id]
return jsonify({'data': data})
def cleanup():
while True:
now = datetime.utcnow()
expired_keys = [k for k, v in storage.items() if now > v['expire_at']]
for k in expired_keys:
del storage[k]
time.sleep(60)
threading.Thread(target=cleanup, daemon=True).start()
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860) |