diff --git a/app/main.py b/app/main.py index fcb3bd3..046edc6 100644 --- a/app/main.py +++ b/app/main.py @@ -4,12 +4,12 @@ from contextlib import asynccontextmanager from dotenv import load_dotenv from .controllers import userManager, cardManager, groupManager, aaManager, doorManager -from .services.database import create_db_and_tables, get_session +from .services.database import create_db_and_tables, get_db_session from .services.auth import token_router, create_first_user from app.services.scanner import BackgroundScanner oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") -scanner = BackgroundScanner(db=get_session()) +scanner = BackgroundScanner(db=get_db_session()) @asynccontextmanager async def lifespan(app: FastAPI): diff --git a/app/services/database.py b/app/services/database.py index eda2d22..983f155 100644 --- a/app/services/database.py +++ b/app/services/database.py @@ -13,6 +13,9 @@ def get_session(): with Session(engine) as db: yield db +def get_db_session(): + return Session(engine) + def add_and_refresh(db: Session, obj): db.add(obj) db.commit() diff --git a/app/services/door.py b/app/services/door.py index 9a16a03..76b9a2a 100644 --- a/app/services/door.py +++ b/app/services/door.py @@ -32,7 +32,7 @@ def closeDoor(): def isDoorOpen(): return doorIsOpen -def checkAccess(uuid: str, db: Session = Depends(get_session)): +def checkAccess(uuid: str, db: Session): try: current_weekday = datetime.datetime.weekday(datetime.date.today()) current_time = datetime.datetime.now() @@ -47,8 +47,10 @@ def checkAccess(uuid: str, db: Session = Depends(get_session)): endtime = starttime + datetime.timedelta(minutes=timetable.duration) print(f" comparing time: Start:{starttime} Current:{current_time} End:{endtime}") if starttime < current_time < endtime: + print("Access Valid!") return True + print("No more auths found") return False except exc.NoResultFound: - raise HTTPException(status_code=status.HTTP_404_NOT_FOUND) + raise Exception("No Access with that key found, this might be a db error") diff --git a/app/services/scanner.py b/app/services/scanner.py index af14cdd..9a283bb 100644 --- a/app/services/scanner.py +++ b/app/services/scanner.py @@ -18,6 +18,8 @@ from desfire.enums import DESFireCommunicationMode, DESFireFileType, DESFireKeyS from desfire.schemas import FilePermissions, FileSettings, KeySettings import desfire.exceptions as desExceptions +from app.services.door import openDoor, closeDoor, isDoorOpen, checkAccess + #ENV vars load_dotenv() @@ -263,12 +265,11 @@ class BackgroundScanner: try: card_content = self._read_card() if card_content: - logger.info(f"content: {card_content}") + self._check_db(card_content) time.sleep(5) logger.debug("READY after success") - #self._check_db(card_content) else: - time.sleep(0.5) + time.sleep(0.1) logger.debug("READY after timout") except Exception as e: @@ -289,4 +290,11 @@ class BackgroundScanner: return rdata except Exception as e: logger.error(f"something went wrong: {e}") - time.sleep(5) \ No newline at end of file + time.sleep(5) + + def _check_db(self, key): + check = checkAccess(key, self.db) + if check == True: + openDoor() + else: + print("Access denied!")