diff --git a/dbConnect.sh b/dbConnect.sh new file mode 100755 index 0000000..902a5fd --- /dev/null +++ b/dbConnect.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +psql --host 172.20.0.10 blorgdb dev diff --git a/dbHandler.py b/dbHandler.py index bff93d5..37490c1 100644 --- a/dbHandler.py +++ b/dbHandler.py @@ -164,6 +164,24 @@ def checkFieldValueExistence(dbConnection: psycopg2.extensions.connection, table ) return bool(_execQuery(dbConnection, sanitisedQuery)[0][0]) +def checkRowExistence(dbConnection: psycopg2.extensions.connection, tableName: str, fieldName: str) -> bool: + try: + debugPrint("Checking if field name " + fieldName + " in table " + tableName + " exists...") + sanitisedQuery = sql.SQL(""" + SELECT EXISTS( + SELECT + {fieldName} + FROM + {table} + ); + """).format( + table=sql.Identifier(tableName), + fieldName=sql.Identifier(fieldName), + ) + return bool(_execQuery(dbConnection, sanitisedQuery)[0][0]) + except: + return False + def getRowRangeByID(dbConnection: psycopg2.extensions.connection, tableName: str, rangeStart: int, rangeEnd: int, latestRecords = True) -> tuple: debugPrint("Getting rows from table name " + tableName + " from range " + str(rangeStart) + "-" + str(rangeEnd) + "...") sanitisedQuery = sql.SQL(""" diff --git a/main.py b/main.py index 72a0dd5..ee48e5d 100644 --- a/main.py +++ b/main.py @@ -314,6 +314,43 @@ def postblogCreate(body: postblogCreateBody): } + + +class putuserSettingsChange(BaseModel): + authToken: str + newValue: str +@app.put("/api/user/settings/change/{settingName}") +def putuserSettingsChange(body: putuserSettingsChange, settingName: str): + try: + if tokenHandler.validateTokenExistence(dbConnection, body.authToken): + userID = userHandler.getIDByAuthToken(dbConnection, body.authToken) + settingNameLowercase = settingName.lower() + if userHandler.checkUserSettingExistence(dbConnection, settingNameLowercase): + oldValue = userHandler.getUserInfoByID(dbConnection, userID, settingNameLowercase) + changedValue = userHandler.changeUserSettingValue(dbConnection, userID, settingNameLowercase, body.newValue) + return { + "success": True, + "message": "Change user settings succeeded! changed " + settingNameLowercase + " from " + oldValue + " to " + body.newValue + "." + } + else: + return { + "success": False, + "message": "Change user settings failed! Setting " + settingName + " does not exist." + } + else: + return { + "success": False, + "message": "Change user settings failed! authToken provided is not valid." + } + except Exception as error: + msg = "Change user settings failed! Unexpected server error. " + repr(error) + debugPrint(msg) + return { + "success": False, + "message": msg + } + + # GET # /api/user/IDByAuthToken # - userID diff --git a/userHandler.py b/userHandler.py index d3e8406..681d774 100644 --- a/userHandler.py +++ b/userHandler.py @@ -23,6 +23,9 @@ def checkIDExistence(dbConnection: psycopg2.extensions.connection, userID: int) def checkUserExistence(dbConnection: psycopg2.extensions.connection, username: str) -> bool: return dbHandler.checkFieldValueExistence(dbConnection, "users", "username", username) +def checkUserSettingExistence(dbConnection: psycopg2.extensions.connection, settingName: str) -> bool: + return dbHandler.checkRowExistence(dbConnection, "users", settingName) + def getHashValueByUserID(dbConnection: psycopg2.extensions.connection, userID: int) -> str: return dbHandler.getFieldValueByID(dbConnection, "users", userID, "passwordhash") @@ -47,3 +50,6 @@ def getIDByAuthToken(dbConnection: psycopg2.extensions.connection, authToken: st authToken=sql.Literal(authToken) ) return int(dbHandler._execQuery(dbConnection, sanitisedQuery)[0][0]) + +def changeUserSettingValue(dbConnection: psycopg2.extensions.connection, userID: int, userField: str, newValue) -> str: + return dbHandler.changeFieldValueByID(dbConnection, "users", userID, userField, newValue)