parcel_box_key_management/app.py

123 lines
3.7 KiB
Python

from flask import Flask, render_template, request, jsonify
import sqlite3
import random
import string
from datetime import datetime, timedelta
app = Flask(__name__)
app.debug = True
app.config['SECRET_KEY'] = 'your-secret-key'
# Fonction pour générer un code aléatoire
def generate_code():
code = ''.join(random.choices(string.digits, k=6))
return code
# Fonction pour créer une connexion à la base de données
def get_db_connection():
conn = sqlite3.connect('database.db')
conn.row_factory = sqlite3.Row
# Créer la table "codes" si elle n'existe pas
conn.execute('''
CREATE TABLE IF NOT EXISTS codes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
code TEXT NOT NULL,
comment TEXT,
active INTEGER,
expiration TIMESTAMP
)
''')
conn.commit()
return conn
# Route de la page d'accueil
@app.route('/')
def home():
conn = get_db_connection()
codes = conn.execute('SELECT * FROM codes').fetchall()
conn.close()
return render_template('index.html', codes=codes)
# Route pour générer un nouveau code
@app.route('/generate_code', methods=['POST'])
def generate_code_route():
comment = request.form['comment']
eternal = request.form.get('eternal', False)
conn = get_db_connection()
code = generate_code()
expiration = None if eternal else (datetime.now() + timedelta(days=365))
conn.execute('INSERT INTO codes (code, comment, active, expiration) VALUES (?, ?, 1, ?)', (code, comment, expiration))
conn.commit()
conn.close()
return 'Code généré : ' + code
# Route pour désactiver ou supprimer un code
@app.route('/update_code', methods=['POST'])
def update_code():
code_id = request.form['code_id']
action = request.form['action']
conn = get_db_connection()
if action == 'disable':
conn.execute('UPDATE codes SET active = 0 WHERE id = ?', (code_id,))
elif action == 'delete':
conn.execute('DELETE FROM codes WHERE id = ?', (code_id,))
conn.commit()
conn.close()
return 'OK'
@app.route('/process_action', methods=['POST'])
def process_action():
group_action = request.form.get('group_action')
selected_codes = request.form.getlist('selected_codes')
conn = get_db_connection()
if group_action == 'disable_selected':
# Traiter l'action de désactivation pour les codes sélectionnés
for code_id in selected_codes:
conn.execute('UPDATE codes SET active = 0 WHERE id = ?', (code_id,))
elif group_action == 'delete_selected':
# Traiter l'action de suppression pour les codes sélectionnés
for code_id in selected_codes:
conn.execute('DELETE FROM codes WHERE id = ?', (code_id,))
conn.commit()
conn.close()
return 'OK'
# Route pour vérifier un code
@app.route('/key/<code>')
def verify_code(code):
conn = get_db_connection()
result = conn.execute('SELECT * FROM codes WHERE code = ? AND active = 1', (code,)).fetchone()
if result is None or not result['active']:
unlock = False
elif result["expiration"] is None:
unlock = True
else:
unlock = True
expiration = datetime.strptime(result["expiration"], '%Y-%m-%d %H:%M:%S.%f')
if expiration > datetime.now() + timedelta(minutes=5):
expiration = datetime.now() + timedelta(minutes=5)
conn.execute('UPDATE codes SET expiration = ? WHERE code = ?', (expiration, code))
conn.commit()
elif expiration < datetime.now():
conn.execute('UPDATE codes SET active = 0 WHERE code = ?', (code,))
conn.commit()
unlock = False
conn.close()
return jsonify({'unlock': unlock})
if __name__ == '__main__':
app.run()