123 lines
3.7 KiB
Python
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()
|