diff --git a/gatewayNode/data.json b/gatewayNode/data.json
index 9d62f9c..4c2f44e 100644
--- a/gatewayNode/data.json
+++ b/gatewayNode/data.json
@@ -1,4 +1,7 @@
{
"ip": "192.168.89.14",
- "port": "8080"
+ "port": "8080",
+ "device": "1",
+ "username": "root",
+ "password": "root"
}
diff --git a/gatewayNode/parking.py b/gatewayNode/parking.py
index daa906b..f796675 100644
--- a/gatewayNode/parking.py
+++ b/gatewayNode/parking.py
@@ -31,6 +31,11 @@ if json_data != "" and json_data != None:
ser.readline()
prev_status = "-1"
+
+ device_session = requests.session()
+ data = """{"username" :""" + server_par['username'] + """, "password":""" + server_par['password'] + """, "device": """ + server_par['device'] + """}"""
+
+ s.post(url = API_ENDPOINT, data = data)
while 1:
park_status = ser.readline()
park_status_data = str(park_status).split("#")
@@ -41,7 +46,7 @@ if json_data != "" and json_data != None:
try:
if parkingStatus != prev_status:
data = """{"no":""" + parkingCode + ""","status":""" + parkingStatus + """}"""
- r = requests.post(url = API_ENDPOINT, data = data)
+ r = s.post(url = API_ENDPOINT, data = data)
if parkingStatus == "0":
print("parking reserved. RESPONSE :", r.status_code, "\n")
elif parkingStatus == "1":
diff --git a/serverNode/__pycache__/serv.cpython-37.pyc b/serverNode/__pycache__/serv.cpython-37.pyc
new file mode 100644
index 0000000..ea35366
Binary files /dev/null and b/serverNode/__pycache__/serv.cpython-37.pyc differ
diff --git a/serverNode/serv.py b/serverNode/serv.py
index a80bdc5..dc321b2 100644
--- a/serverNode/serv.py
+++ b/serverNode/serv.py
@@ -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)
@@ -33,17 +37,17 @@ myCursor = mydb.cursor()
# Define a function that gets the parking status
# for all parking codes.
def getParkings():
- parks = []
-
- myCursor.execute("SELECT * FROM PARKING")
- myRes = myCursor.fetchall()
+ parks = []
+
+ myCursor.execute("SELECT * FROM PARKING")
+ myRes = myCursor.fetchall()
- for res in myRes:
- if res[1] == 1:
- parks.append({"no": res[0], "status": True})
- else:
- parks.append({"no": res[0], "status": False})
- return parks
+ for res in myRes:
+ if res[1] == 1:
+ parks.append({"no": res[0], "status": True})
+ else:
+ parks.append({"no": res[0], "status": False})
+ return parks
def isMember(username, password):
myCursor.execute("SELECT * FROM USERS")
@@ -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
@@ -64,64 +74,95 @@ def isMember(username, password):
# they are automatically mapped by flask_restful.
# other methods include put, delete, etc.
class Parking(Resource):
- def get(self):
- parks = getParkings()
- return parks, 200
+ 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):
- def get(self):
- return """
-
ERROR
- Not get at '/parkingStatus'.
- """
- def post(self):
- # Gets the data into as a JSON Object from HTTP request.
- data = json.loads(request.data)
-
- # SQL get all Parking places status.
- parks = getParkings()
-
- currentParking = {}
- for park in parks:
- if park['no'] == data['no']:
- currentParking = park
- break;
-
- thereIs = False
- toUpdate = False
- try:
- if currentParking['status'] != data['status']:
- toUpdate = True
- thereIs = True
- except IndexError:
- # handle Index Error
- thereIs = False
- toUpdate = False
- except KeyError:
- # handle the KeyError
- thereIs = False
- toUpdate = False
-
- if not thereIs:
- # Make a new insert entry for a new Parking Code.
- values = (int(data['no']), int(data['status']))
- myCursor.execute("INSERT INTO PARKING (PARKING_CODE, PARKING_STATUS) VALUES (%s, %s)", values)
- mydb.commit()
- parks = getParkings()
- elif toUpdate:
- # Make an Update status for Parking Code that availability changed.
- values = (int(data['status']), int(data['no']))
- myCursor.execute("UPDATE PARKING SET PARKING_STATUS=%s WHERE PARKING_CODE=%s", values)
- mydb.commit()
- parks = getParkings()
-
- return currentParking, 201
+ def get(self):
+ return """
+ ERROR
+ Not get at '/parkingStatus'.
+ """
+ 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:
+ if park['no'] == data['no']:
+ currentParking = park
+ break;
+
+ thereIs = False
+ toUpdate = False
+ try:
+ if currentParking['status'] != data['status']:
+ toUpdate = True
+ thereIs = True
+ except IndexError:
+ # handle Index Error
+ thereIs = False
+ toUpdate = False
+ except KeyError:
+ # handle the KeyError
+ 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']))
+ myCursor.execute("INSERT INTO PARKING (PARKING_CODE, PARKING_STATUS) VALUES (%s, %s)", values)
+ mydb.commit()
+ parks = getParkings()
+ elif toUpdate:
+ # Make an Update status for Parking Code that availability changed.
+ values = (int(data['status']), int(data['no']))
+ 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