diff --git a/api/apientry.py b/api/api.py similarity index 92% rename from api/apientry.py rename to api/api.py index 3bf34fa3..1866cbdd 100644 --- a/api/apientry.py +++ b/api/api.py @@ -1,6 +1,7 @@ from flask import * from api import queries import json +from auth import authenticate diff --git a/api/queries.py b/api/queries.py index 0dc04c43..828d95da 100644 --- a/api/queries.py +++ b/api/queries.py @@ -3,21 +3,14 @@ from models.member import member from models.request import request from sqlalchemy import select -from sqlalchemy.orm import Session import variables -from sqlalchemy import create_engine +from db.database import create_db_engine, executeQuery #execute query -db_engine = create_engine("postgresql://{}:{}@{}/{}".format(variables.db_user, - variables.db_password, - variables.db_host, - variables.db_name), echo=True) +db_engine = create_db_engine() -def executeQuery(statement, engine): - with Session(engine) as session: - return session.execute(statement) # returns list of dicts for each member @@ -30,7 +23,7 @@ def getMembers(): member.emailaddress, member.slackhandle) ) - result = executeQuery(stmt,db_engine) + result = executeQuery(stmt, db_engine) baselist = [] for row in result.all(): baselist.append(dict(zip(result.keys(), row))) @@ -52,4 +45,5 @@ def getMemberByID(memberId): response = dict(zip(result.keys(), result.one())) except: raise ValueError("Member does not exist") - return response \ No newline at end of file + return response + diff --git a/auth/__init__.py b/auth/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/auth/authenticate.py b/auth/authenticate.py new file mode 100644 index 00000000..5f09068f --- /dev/null +++ b/auth/authenticate.py @@ -0,0 +1,14 @@ +from sqlalchemy import create_engine +import variables +from db.database import create_db_engine, executeQuery +from auth.token import authToken +from sqlalchemy import select + +db_engine = create_db_engine() + +def get_userrole(token): + stmt = ( + select(authToken.role).where(authToken.token == token) + ) + result = executeQuery(stmt, db_engine) + return result.one()[0] \ No newline at end of file diff --git a/auth/token.py b/auth/token.py new file mode 100644 index 00000000..36fb9337 --- /dev/null +++ b/auth/token.py @@ -0,0 +1,31 @@ +from sqlalchemy import Column, Integer, DateTime, String, Date, TEXT, ForeignKey +from sqlalchemy.orm import DeclarativeBase +from sqlalchemy.orm import Mapped +from sqlalchemy.orm import mapped_column +from sqlalchemy.orm import relationship +from models.baseModel import Base + + + +class userRole(Base): + __tablename__ = 'userroles' + + id: Mapped[int] = mapped_column(primary_key=True) + rolename: Mapped[str] = mapped_column(String(45)) + get: Mapped[bool] = mapped_column() + put: Mapped[bool] = mapped_column() + update: Mapped[bool] = mapped_column() + seemembers: Mapped[bool] = mapped_column() + +class authToken(Base): + __tablename__ = 'authtokens' + + id: Mapped[int] = mapped_column(primary_key=True) + token: Mapped[str] = mapped_column((String(64))) + email: Mapped[str] = mapped_column(String(45)) + slackhandle: Mapped[str] = mapped_column((String(45))) + role: Mapped[str] = mapped_column((String(45))) + + + + diff --git a/db/__init__.py b/db/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/db/database.py b/db/database.py new file mode 100644 index 00000000..bc0a9a3e --- /dev/null +++ b/db/database.py @@ -0,0 +1,13 @@ +from sqlalchemy import create_engine +import variables +from sqlalchemy.orm import Session + +def create_db_engine(): + return create_engine("postgresql://{}:{}@{}/{}".format(variables.db_user, + variables.db_password, + variables.db_host, + variables.db_name), echo=True) + +def executeQuery(statement, db_engine): + with Session(db_engine) as session: + return session.execute(statement) \ No newline at end of file diff --git a/db_init.py b/db_init.py index b41839cd..47d36ab8 100644 --- a/db_init.py +++ b/db_init.py @@ -1,5 +1,6 @@ import variables from sqlalchemy_utils import database_exists, create_database +from db.database import create_db_engine ##MODELS NEED TO BE IMPORTED HERE @@ -9,6 +10,7 @@ import models.request import models.baseModel import models.install +import auth.token @@ -17,10 +19,7 @@ def main(): - engine = create_engine("postgresql://{}:{}@{}/{}".format(variables.db_user, - variables.db_password, - variables.db_host, - variables.db_name), echo=True) + engine = create_db_engine() if not database_exists(engine.url): create_database(engine.url)