|
|
@ -7,6 +7,7 @@ from json import dumps |
|
|
|
import json |
|
|
|
from flask_cors import CORS |
|
|
|
import mysql.connector |
|
|
|
import os |
|
|
|
|
|
|
|
# ================================================================== |
|
|
|
# ================================================================== |
|
|
@ -15,6 +16,9 @@ import mysql.connector |
|
|
|
app = Flask(__name__) |
|
|
|
CORS(app) |
|
|
|
|
|
|
|
# create the secret key for session |
|
|
|
app.secret_key = os.urandom(24) |
|
|
|
|
|
|
|
# creating an API object |
|
|
|
api = Api(app) |
|
|
|
|
|
|
@ -57,6 +61,12 @@ def isMember(username, password): |
|
|
|
|
|
|
|
return isValid |
|
|
|
|
|
|
|
def isAuthenticated(): |
|
|
|
if 'device_id' in session: |
|
|
|
return True |
|
|
|
else: |
|
|
|
return False |
|
|
|
|
|
|
|
|
|
|
|
# ================================================================== |
|
|
|
# making a class for a particular resource |
|
|
@ -65,7 +75,11 @@ def isMember(username, password): |
|
|
|
# other methods include put, delete, etc. |
|
|
|
class Parking(Resource): |
|
|
|
def get(self): |
|
|
|
try: |
|
|
|
parks = getParkings() |
|
|
|
except mysql.connector.errors.DatabaseError as e: |
|
|
|
mydb.reconnect(attempts=1, delay=0) |
|
|
|
|
|
|
|
return parks, 200 |
|
|
|
|
|
|
|
class ParkingStatus(Resource): |
|
|
@ -75,11 +89,15 @@ class ParkingStatus(Resource): |
|
|
|
<body><h1>Not get at '/parkingStatus'.</h1></body> |
|
|
|
</html>""" |
|
|
|
def post(self): |
|
|
|
if isAuthenticated(): |
|
|
|
# Gets the data into as a JSON Object from HTTP request. |
|
|
|
data = json.loads(request.data) |
|
|
|
|
|
|
|
try: |
|
|
|
# SQL get all Parking places status. |
|
|
|
parks = getParkings() |
|
|
|
except mysql.connector.errors.DatabaseError as e: |
|
|
|
mydb.reconnect(attempts=1, delay=0) |
|
|
|
|
|
|
|
currentParking = {} |
|
|
|
for park in parks: |
|
|
@ -102,6 +120,7 @@ class ParkingStatus(Resource): |
|
|
|
thereIs = False |
|
|
|
toUpdate = False |
|
|
|
|
|
|
|
try: |
|
|
|
if not thereIs: |
|
|
|
# Make a new insert entry for a new Parking Code. |
|
|
|
values = (int(data['no']), int(data['status'])) |
|
|
@ -114,14 +133,36 @@ class ParkingStatus(Resource): |
|
|
|
myCursor.execute("UPDATE PARKING SET PARKING_STATUS=%s WHERE PARKING_CODE=%s", values) |
|
|
|
mydb.commit() |
|
|
|
parks = getParkings() |
|
|
|
except mysql.connector.errors.DatabaseError as e: |
|
|
|
mydb.reconnect(attempts=1, delay=0) |
|
|
|
|
|
|
|
return currentParking, 201 |
|
|
|
else: |
|
|
|
return "Error! You aren't authenticated. [POST] /authenticate first.", 403 |
|
|
|
|
|
|
|
class Authenticate(Resource): |
|
|
|
def post(self): |
|
|
|
try: |
|
|
|
#Get the credencial from body of request. |
|
|
|
data = json.loads(request.data) |
|
|
|
|
|
|
|
if data['username'] != None and data['password'] != None and data['device'] != None: |
|
|
|
isValid = isMember(data['username'], data['password']) |
|
|
|
|
|
|
|
if isValid: |
|
|
|
session['device_id'] = data['device'] |
|
|
|
else: |
|
|
|
return "Not Authenticatiove device", 403 |
|
|
|
else: |
|
|
|
return "Error authentication", 403 |
|
|
|
except mysql.connector.errors.DatabaseError as e: |
|
|
|
mydb.reconnect(attempts=1, delay=0) |
|
|
|
|
|
|
|
# ================================================================== |
|
|
|
# adding the defined resources along with their corresponding urls to REST APIs |
|
|
|
api.add_resource(Parking, '/') |
|
|
|
api.add_resource(ParkingStatus, '/parkingStatus') |
|
|
|
api.add_resource(Authenticate, '/authenticate') |
|
|
|
|
|
|
|
# ================================================================== |
|
|
|
# driver function |
|
|
|