Commit 37ffa3c9 authored by Sli's avatar Sli

Merge branch 'serveur' into 'master'

Serveur

Création du serveur de vérification des billets

See merge request !1
parents caabcae9 abddb53a
.DS_Store
# Serveur de vérification des e-billets
Cette application permet de centraliser les données relevées par les différents clients Android vérifiant les billets à l'entrée du gala.
## Schémas de fonctionnement
```
┌─────────────────────────────────────────────┐ ┌─────────────────────────────────────────────┐
│ Serveur │ │ Application │
│ Demande des clefs │
│ ┌───────────────────────────────────┐ │ │ ┌───────────────────────────────────┐ │
│ │ GetKeys ◀─┼────┼────────────┼────┼──── │ │
│ │ │ │ │ │ Paramètres │ │
│ │ data/keys.json ──┼────┼────────────┼────┼───▶ │ │
│ └───────────────────────────────────┘ │ │ └───────────────────────────────────┘ │
│ Réception des clefs │
│ │ │ │
│ ┌───────────────────────────────────┐ │ │ │
│ │ Validate │ │ │ ┌───────────────────────────────────┐ │
│ │ ┌──────────────────────────────┐ │ │ │ │ │ │
│ │ │ │ │ │ │ │ Vérification du code bar │ │
│ │ │ Teste d'existence en BDD │◀┼────┼────┐ │ │ │ │
│ │ │ │ │ │ │ │ └────────────────┬──────────────────┘ │
│ │ └───────────────┬──────────────┘ │ │ │ │ │ │
│ │ N'existe pas │ Existe │ │ │ Envoi : ┌───────┴──────────┐ │
│ │ ┌────────┴────────┐ │ │ │Code de vérification │ │ │
│ │ ┌──────▼─────┐ ┌──────▼─────┐ │ │ │ Nombre de places │ │ │
│ │ │ │ │ │ │ │ │ Quanitée validé │ │ │
│ │ │ │ │ │ │ │ │ │ ▼ │ │
│ │ │ │ │ │ │ │ │ │ ┌─────────────────┐ │ │
│ │ │ NewEntry │ │UpdateEntry │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ └───────┼────│ Vérification de │ │ │
│ │ │ │ │ │ │ │ ┌───────┼───▶│disponibilité au │ │ │
│ │ │ │ │ │ │ │ │ │ │ serveur │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ └──────┬─────┘ └──────┬─────┘ │ │ │ │ └────────┬────────┘ │ │
│ │ │ │ │ │ │ Réception : │ │ │
│ │ ┌──────▼─────────────────▼────┐ │ │ │ Quantité restante ├───────────────┐ │ │
│ │ │ │ │ │ │ Validation │ │ │ │
│ │ │ │ │ │ │ │ ┌───────────┼───────────────┼──┼──────────┐ │
│ │ │ Génération de la réponse │──┼────┼────┘ │ │ ▼ Réponse ▼ ▼ │ │
│ │ │ │ │ │ │ │ ┌────────────────┐ ┌────────────────┐ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ └─────────────────────────────┘ │ │ │ │ │ Oui │ │ Non │ │ │
│ │ │ │ │ │ │ │ │ │ │ │
│ └───────────────────────────────────┘ │ │ │ └────────────────┘ └────────────────┘ │ │
│ │ │ └─────────────────────────────────────────┘ │
└─────────────────────────────────────────────┘ └─────────────────────────────────────────────┘
```
## Format de réception des clefs
Requête vers /keys
data/keys.json.example
```json
[
{
"id": 1120,
"key": "VDLV7897IEetisuare"
},
{
"id": 7988,
"key": "TISEdodp7897tesiuaV8V"
}
]
```
## Format de requête et de réception des informations
Requête vers /validate : (utilise la méthode POST)
```json
{
"verif": "EXAMPLE", // Code de vérification du billet
"nb": 9, // Nombre de places totales du billet
"qt": 2 // Quantité à valider
}
```
Réception :
```json
{
"valid": true, // true ou false selon si valide ou non
"avaliable": 7 // Nombre de places restantes sur le billet
}
```
#!/bin/sh
cd data
sqlite3 sqliteDB.db < db.sql
keys.json
sqliteDB.db
CREATE Table ticket (
id INTEGER PRIMARY KEY AUTOINCREMENT,
verifKey TEXT UNIQUE NOT NULL,
avaliablePlaces INTEGER NOT NULL
);
[
{
"id": 1120,
"key": "VDLV7897IEetisuare"
},
{
"id": 7988,
"key": "TISEdodp7897tesiuaV8V"
}
]
bottle
bottle-sqlite
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: klmp200
# @Date: 2016-07-03 17:57:28
# @Last Modified by: klmp200
# @Last Modified time: 2016-07-04 17:50:18
from bottle import Bottle, static_file, request
from bottle.ext import sqlite
app = Bottle()
plugin = sqlite.Plugin(dbfile='../data/sqliteDB.db')
app.install(plugin)
@app.route('/keys')
def GetKeys():
return static_file("keys.json", root="../data/")
@app.route('/validate', method='POST')
def Validate(db):
try:
send = request.json
ticket = db.execute('SELECT * from ticket where verifKey=:key',
{"key": send['verif']}).fetchone()
if (ticket is None):
message = NewEntry(db, send)
else:
message = UpdateEntry(db, send, ticket)
except:
message = '<p>Error processing data</p>'
return message
def NewEntry(db, data):
avaliable = data['nb'] - data['qt']
response = {
"avaliable": avaliable,
"valid": True
}
db.execute('INSERT into ticket(verifKey, avaliablePlaces) values (?, ?)',
(data['verif'], avaliable))
return dict(response)
def UpdateEntry(db, data, obj):
avaliableP = obj['avaliablePlaces'] - data['qt']
if avaliableP >= 0:
avaliable = True
else:
avaliableP = obj['avaliablePlaces']
avaliable = False
response = {
"avaliable": avaliableP,
"valid": avaliable
}
db.execute('UPDATE ticket SET avaliablePlaces=:av WHERE id=:id',
{"av": avaliableP, "id": obj['id']})
return dict(response)
app.run(host='localhost', port=8080, debug=True)
app.uninstall(plugin)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment