This commit is contained in:
adrien 2023-06-29 07:55:11 +02:00
commit d6f3e5cb1a
4 changed files with 224 additions and 0 deletions

122
app.py Normal file
View File

@ -0,0 +1,122 @@
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()

BIN
database.db Normal file

Binary file not shown.

1
requirements.txt Normal file
View File

@ -0,0 +1 @@
flask

101
templates/index.html Normal file
View File

@ -0,0 +1,101 @@
<!DOCTYPE html>
<html>
<head>
<title>Gestion codes déverouillage "Boite aux colis"</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h1 class="text-center">Gestion codes déverouillage "Boite aux colis"</h1>
<form method="POST" action="/generate_code">
<div class="mb-3">
<label for="comment" class="form-label">Commentaire:</label>
<input type="text" id="comment" name="comment" class="form-control">
</div>
<div class="mb-3 form-check">
<input type="checkbox" id="eternal" name="eternal" class="form-check-input">
<label for="eternal" class="form-check-label">Eternel</label>
</div>
<button type="submit" class="btn btn-primary">Générer un code</button>
</form>
<h2>Codes actifs</h2>
<form method="POST" action="/process_action">
<table class="table">
<thead>
<tr>
<th>Code</th>
<th>Commentaire</th>
<th>Date d'expiration</th>
<th>Actions</th>
<th>Sélectionner</th> <!-- Nouvelle colonne pour les cases à cocher -->
</tr>
</thead>
<tbody>
{% for code in codes %}
{% if code['active'] %}
<tr>
<td>{{ code['code'] }}</td>
<td>{{ code['comment'] }}</td>
<td>{{ code['expiration'] }}</td>
<td>
<form method="POST" action="/update_code" class="d-inline">
<input type="hidden" name="code_id" value="{{ code['id'] }}">
<button type="submit" name="action" value="disable" class="btn btn-warning">Désactiver</button>
<button type="submit" name="action" value="delete" class="btn btn-danger">Supprimer</button>
</form>
</td>
<td>
<input type="checkbox" name="selected_codes" value="{{ code['id'] }}">
</td> <!-- Nouvelle colonne avec la case à cocher -->
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
<button type="submit" name="group_action" value="disable_selected" class="btn btn-warning">Désactiver sélectionnés</button>
<button type="submit" name="group_action" value="delete_selected" class="btn btn-danger">Supprimer sélectionnés</button>
</form>
<h2>Codes inactifs</h2>
<form method="POST" action="/process_action">
<table class="table">
<thead>
<tr>
<th>Code</th>
<th>Commentaire</th>
<th>Date d'expiration</th>
<th>Actions</th>
<th>Sélectionner</th> <!-- Nouvelle colonne pour les cases à cocher -->
</tr>
</thead>
<tbody>
{% for code in codes %}
{% if not code['active'] %}
<tr>
<td>{{ code['code'] }}</td>
<td>{{ code['comment'] }}</td>
<td>{{ code['expiration'] }}</td>
<td>
<form method="POST" action="/update_code" class="d-inline">
<input type="hidden" name="code_id" value="{{ code['id'] }}">
<button type="submit" name="action" value="disable" class="btn btn-warning">Désactiver</button>
<button type="submit" name="action" value="delete" class="btn btn-danger">Supprimer</button>
</form>
</td>
<td>
<input type="checkbox" name="selected_codes" value="{{ code['id'] }}">
</td> <!-- Nouvelle colonne avec la case à cocher -->
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
<button type="submit" name="group_action" value="disable_selected" class="btn btn-warning">Désactiver sélectionnés</button>
<button type="submit" name="group_action" value="delete_selected" class="btn btn-danger">Supprimer sélectionnés</button>
</form>
</div>
</body>
</html>