67 lines
2.0 KiB
Python
67 lines
2.0 KiB
Python
from flask import Flask, request, jsonify
|
|
from flask_cors import CORS
|
|
import sqlite3
|
|
import os
|
|
import datetime
|
|
|
|
BASE_DIR = os.path.dirname(__file__)
|
|
DB_PATH = os.path.join(BASE_DIR, 'hiddencode.db')
|
|
|
|
def get_conn():
|
|
return sqlite3.connect(DB_PATH)
|
|
|
|
app = Flask(__name__)
|
|
CORS(app)
|
|
|
|
@app.route('/write', methods=['POST'])
|
|
def write():
|
|
data = request.get_json() or {}
|
|
sha = data.get('sha')
|
|
upload = data.get('upload_code')
|
|
download = data.get('download_code')
|
|
if not sha:
|
|
return jsonify({'status':'error','msg':'missing sha'}), 400
|
|
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
|
conn = get_conn()
|
|
c = conn.cursor()
|
|
try:
|
|
# upsert by sha
|
|
c.execute('''
|
|
INSERT INTO codes (sha, upload_code, download_code, created_at)
|
|
VALUES (?,?,?,?)
|
|
ON CONFLICT(sha) DO UPDATE SET upload_code=excluded.upload_code, download_code=excluded.download_code, created_at=excluded.created_at
|
|
''', (sha, upload, download, now))
|
|
conn.commit()
|
|
finally:
|
|
conn.close()
|
|
return jsonify({'status':'ok'})
|
|
|
|
@app.route('/read', methods=['POST'])
|
|
def read():
|
|
data = request.get_json() or {}
|
|
shas = data.get('shas', [])
|
|
conn = get_conn()
|
|
c = conn.cursor()
|
|
result = {}
|
|
if shas:
|
|
placeholders = ','.join('?' for _ in shas)
|
|
c.execute(f"SELECT sha, upload_code, download_code, created_at FROM codes WHERE sha IN ({placeholders})", shas)
|
|
rows = c.fetchall()
|
|
for sha, up, down, created in rows:
|
|
result[sha] = {'upload_code': up, 'download_code': down, 'created_at': created}
|
|
for s in shas:
|
|
if s not in result:
|
|
result[s] = None
|
|
conn.close()
|
|
return jsonify({'status':'ok','data':result})
|
|
|
|
@app.route('/health', methods=['GET'])
|
|
def health():
|
|
return jsonify({'status':'ok'})
|
|
|
|
if __name__ == '__main__':
|
|
if not os.path.exists(DB_PATH):
|
|
from db_init import init_db
|
|
init_db()
|
|
app.run(host='0.0.0.0', port=5000, debug=True)
|