Initial Commit

master
Julius de Jeu 2018-06-18 13:29:05 +02:00
commit 811d0da4fc
4 changed files with 149 additions and 0 deletions

8
.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
# Database
database.db
# Environments
venv/
# Jetbrains stuff
.idea/

133
app.py Normal file
View File

@ -0,0 +1,133 @@
from flask import Flask, request, jsonify, make_response
from flask_httpauth import HTTPBasicAuth
from sqlite3 import connect, OperationalError
import bcrypt
app = Flask(__name__)
auth = HTTPBasicAuth()
db = connect("database.db", check_same_thread=False)
try:
cursor = db.cursor()
cursor.execute('''create table tickets (
username text not null, number text, date timestamp default current_timestamp, inside boolean default 0
);''')
cursor.execute('''create table users (
username text not null, password text not null
);''')
cursor.close()
db.commit()
except OperationalError:
pass
@auth.verify_password
def verpass(username, password):
# return True
cur = db.cursor()
ret = cur.execute('''select password from users where username = ?''', (username,)).fetchone()
if ret is None:
salt = bcrypt.gensalt()
cur.execute('''insert into users (username, password) values (?,?);''',
(username, bcrypt.hashpw(password.encode('utf-8'), salt),))
cur.close()
db.commit()
return True
else:
(pw) = ret[0]
try:
red = bcrypt.checkpw(password.encode('utf-8'), pw)
except ValueError:
return False
return red
def checknum(username, number, checked=0):
cur = db.cursor()
if checked != -1:
res = cur.execute('''select * from tickets where username = ? and number = ? and inside = ?;''',
(username, number, checked,)).fetchone()
else:
res = cur.execute('''select * from tickets where username = ? and number = ?;''',
(username, number,)).fetchone()
if res is None:
return False
return len(res) >= 1
@app.route("/ticket", methods=["POST"])
@auth.login_required
def addticket():
if not request.json or "number" not in request.json or "function" not in request.json:
return make_response(jsonify({"msg": "missing/faulty request body?"}), 400)
fun = request.json["function"]
if fun not in ("add", "check", "uncheck", "del"):
return make_response(jsonify({"msg": "invalid function"}), 501)
num = str(request.json["number"])
if fun == "add":
if checknum(auth.username(), num):
return make_response(jsonify({"msg": "Ticket already payed!"}), 409)
cur = db.cursor()
cur.execute("insert into tickets (username,number) values (?,?);", (auth.username(), num,))
cur.close()
db.commit()
return make_response(jsonify({"msg": "Added user"}), 200)
elif fun == "check":
cr = db.cursor()
cr.execute("select number from tickets where number = ?", (num,))
lis = cr.fetchall()
if len(lis) < 1:
return make_response(jsonify({"msg": "Ticket not payed!"}), 409)
if checknum(auth.username(), num, 1):
return make_response(jsonify({"msg": "Ticket already inside!"}), 417)
cur = db.cursor()
cur.execute("update tickets set inside = 1 where username = ? and number = ?;", (auth.username(), num))
cur.close()
db.commit()
return make_response(jsonify({"msg": "Payed!"}), 200)
elif fun == "uncheck":
if checknum(auth.username(), num, 0):
return make_response(jsonify({"msg": "Ticket hasn't entered yet!"}), 409)
cur = db.cursor()
cur.execute("update tickets set inside = 0 where username = ? and number = ?;", (auth.username(), num))
cur.close()
db.commit()
return make_response(jsonify({"msg": "Unpayed!!"}), 200)
elif fun == "del":
if not checknum(auth.username(), num, -1):
return make_response(jsonify({"msg": "Ticket does not exist!"}), 409)
cur = db.cursor()
cur.execute("delete from tickets where username = ? and number = ?", (auth.username(), num,))
cur.close()
db.commit()
return make_response(jsonify({"msg": "Removed!"}), 200)
@app.route("/control", methods=["POST"])
@auth.login_required
def control():
if not request.json or "function" not in request.json:
return make_response(jsonify({"msg": "missing/faulty request body?"}), 400)
fun = request.json["function"]
if fun not in ("remove_all",):
return make_response(jsonify({"msg": "invalid function"}), 405)
if fun == "remove_all":
cur = db.cursor()
cur.execute("delete from tickets where username = ?", (auth.username(),))
cur.close()
db.commit()
return make_response(jsonify({"msg": "Removed!"}), 200)
@app.route("/check")
@auth.login_required
def check():
cur = db.cursor()
num1 = cur.execute('''select * from tickets where username = ?;''', (auth.username(),)).fetchall()
num2 = cur.execute('''select * from tickets where username = ? and inside = 1;''', (auth.username(),)).fetchall()
cur.close()
return "%d/%d" % (len(num2), len(num1))
if __name__ == '__main__':
app.run("0.0.0.0", 5000)

3
install.txt Normal file
View File

@ -0,0 +1,3 @@
flask
flask-httpauth
bcrypt

5
test.py Normal file
View File

@ -0,0 +1,5 @@
if __name__ == '__main__':
if None:
print("memes")
else:
print("lole")