first commit
This commit is contained in:
66
server/app.py
Normal file
66
server/app.py
Normal file
@@ -0,0 +1,66 @@
|
||||
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)
|
||||
23
server/db_init.py
Normal file
23
server/db_init.py
Normal file
@@ -0,0 +1,23 @@
|
||||
import sqlite3
|
||||
import os
|
||||
|
||||
DB_PATH = os.path.join(os.path.dirname(__file__), 'hiddencode.db')
|
||||
|
||||
def init_db():
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
c = conn.cursor()
|
||||
c.execute('''
|
||||
CREATE TABLE IF NOT EXISTS codes (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
sha TEXT UNIQUE,
|
||||
upload_code TEXT,
|
||||
download_code TEXT,
|
||||
created_at TEXT
|
||||
)
|
||||
''')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
if __name__ == '__main__':
|
||||
init_db()
|
||||
print('Initialized database at', DB_PATH)
|
||||
2
server/requirements.txt
Normal file
2
server/requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
Flask==2.2.5
|
||||
flask-cors==3.0.10
|
||||
Reference in New Issue
Block a user