From d6f3e5cb1af3465e80c83700fb6465b6442cf3d6 Mon Sep 17 00:00:00 2001 From: adrien Date: Thu, 29 Jun 2023 07:55:11 +0200 Subject: [PATCH] fc --- app.py | 122 +++++++++++++++++++++++++++++++++++++++++++ database.db | Bin 0 -> 12288 bytes requirements.txt | 1 + templates/index.html | 101 +++++++++++++++++++++++++++++++++++ 4 files changed, 224 insertions(+) create mode 100644 app.py create mode 100644 database.db create mode 100644 requirements.txt create mode 100644 templates/index.html diff --git a/app.py b/app.py new file mode 100644 index 0000000..0fb0099 --- /dev/null +++ b/app.py @@ -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/') +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() diff --git a/database.db b/database.db new file mode 100644 index 0000000000000000000000000000000000000000..0ac7d94abcf35486968dbc536d83bcf024715ae5 GIT binary patch literal 12288 zcmeI&F>ljA6bJCTgr+rWaf?)0-EKmy(nj{3Yde`Rk%girX_~r-Ovp_R$x>p|*c4W} z_A~H>_yl|r1~y(?WuOZSVnF{V-}&zOy&HbpNxr=3r==F}^W`Ebg<`vmbM{gQ#@HT> zI*oO3T0B{A=)KziDfU=v%6F)$_UtD!&uBtG00Izz00bZa0SG_<0uX=z1pcMKsMfHW zO+G1;>$xs&=5z~wSLmCMI-5S;*1O{_Xgp3BF>_T2(RMv-jKQm(J(%)Dpy@1j^4&% zcuwQ0-(Tk!3!RnKr-w{3Ez?`QKKCJ~KYvJe!>z-F(CR#LVyJ zH}k7`PfG*@AOHafKmY;|fB*y_009U<00MtU;JMLY2L}eTmFs!(O`aBMw!1~SeaiXm zz*pgHnKm~mV{L`bY1@-dH=n14w52++y%XsRC+M6y9i>`!;0Cs{-Js$fg9WbZDEGxi zwF_n2RzW~rZq?-pM|EVoBmI_ieAjbV_kV8wVDum$009U<00Izz00bZa0SG_<0ucD0 N1Porcc=aEG@e4`2cvAoX literal 0 HcmV?d00001 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..8ab6294 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +flask \ No newline at end of file diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..7e3b053 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,101 @@ + + + + Gestion codes déverouillage "Boite aux colis" + + + +
+

Gestion codes déverouillage "Boite aux colis"

+ +
+
+ + +
+
+ + +
+ +
+ +

Codes actifs

+
+ + + + + + + + + + + + {% for code in codes %} + {% if code['active'] %} + + + + + + + + {% endif %} + {% endfor %} + +
CodeCommentaireDate d'expirationActionsSélectionner
{{ code['code'] }}{{ code['comment'] }}{{ code['expiration'] }} + + + + + + + +
+ + + + + +

Codes inactifs

+
+ + + + + + + + + + + + {% for code in codes %} + {% if not code['active'] %} + + + + + + + + {% endif %} + {% endfor %} + +
CodeCommentaireDate d'expirationActionsSélectionner
{{ code['code'] }}{{ code['comment'] }}{{ code['expiration'] }} + + + + + + + +
+ + + +
+ +