Testys commited on
Commit
394841d
·
1 Parent(s): bd70435

Committing the work

Browse files
src/auth.py CHANGED
@@ -100,6 +100,26 @@ async def get_verified_device(
100
  raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Device is not active.")
101
  return device_orm
102
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
  # Tag-based authentication (User/Student Authentication via RFID tag)
104
  async def authenticate_tag_user_or_student( # Renamed for clarity
105
  tag_id: str = Header(..., alias="X-User-Tag-ID", description="RFID Tag ID of the user or student"),
 
100
  raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Device is not active.")
101
  return device_orm
102
 
103
+
104
+ async def authenticate_user(
105
+ username: str,
106
+ password: str,
107
+ db: SQLAlchemySessionType = Depends(get_db)
108
+ ) -> models.User: # Returns ORM User model
109
+ """
110
+ Authenticates a user by username and password.
111
+ Returns the ORM User model if successful, raises HTTPException otherwise.
112
+ """
113
+ user_orm = await run_in_threadpool(crud.get_user_by_username, db, username)
114
+
115
+ if not user_orm or not user_orm.is_active:
116
+ raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid credentials or inactive user.")
117
+
118
+ if not crud.verify_password(password, user_orm.hashed_password):
119
+ raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Incorrect password.")
120
+
121
+ return user_orm # Return the ORM User model
122
+
123
  # Tag-based authentication (User/Student Authentication via RFID tag)
124
  async def authenticate_tag_user_or_student( # Renamed for clarity
125
  tag_id: str = Header(..., alias="X-User-Tag-ID", description="RFID Tag ID of the user or student"),
src/routers/admin.py CHANGED
@@ -8,13 +8,13 @@ from sqlalchemy.orm import Session
8
  from datetime import datetime, timedelta
9
 
10
  from src import crud, models
11
- from src.auth import get_current_active_admin_user, get_current_active_user
12
  from src.database import get_db
13
 
14
  router = APIRouter(
15
  prefix="/api/admin",
16
  tags=["Admin"],
17
- dependencies=[Depends(get_current_active_admin_user)]
18
  )
19
 
20
  @router.post("/prepare-tag-link", status_code=status.HTTP_202_ACCEPTED, response_model=dict)
@@ -57,7 +57,7 @@ async def prepare_device_for_tag_linking(
57
  async def delete_user_endpoint(
58
  username: str,
59
  db: Session = Depends(get_db),
60
- current_admin: models.User = Depends(get_current_active_admin_user)
61
  ):
62
  """
63
  Admin: Permanently deletes a user (staff or other admin).
 
8
  from datetime import datetime, timedelta
9
 
10
  from src import crud, models
11
+ from src.auth import get_current_active_admin_user_from_token, get_current_active_user
12
  from src.database import get_db
13
 
14
  router = APIRouter(
15
  prefix="/api/admin",
16
  tags=["Admin"],
17
+ dependencies=[Depends(get_current_active_admin_user_from_token)]
18
  )
19
 
20
  @router.post("/prepare-tag-link", status_code=status.HTTP_202_ACCEPTED, response_model=dict)
 
57
  async def delete_user_endpoint(
58
  username: str,
59
  db: Session = Depends(get_db),
60
+ current_admin: models.User = Depends(get_current_active_admin_user_from_token)
61
  ):
62
  """
63
  Admin: Permanently deletes a user (staff or other admin).
src/routers/clearance.py CHANGED
@@ -7,13 +7,13 @@ from fastapi.concurrency import run_in_threadpool
7
 
8
  from src import crud, models
9
  from src.database import get_db
10
- from src.auth import get_current_active_staff_user
11
  from src.utils import format_student_clearance_details
12
 
13
  router = APIRouter(
14
  prefix="/api/clearance",
15
  tags=["Clearance"],
16
- dependencies=[Depends(get_current_active_staff_user)]
17
  )
18
 
19
  class ClearanceUpdatePayload(models.BaseModel):
@@ -25,7 +25,7 @@ async def update_student_clearance(
25
  student_id_str: str,
26
  payload: ClearanceUpdatePayload,
27
  db: Session = Depends(get_db),
28
- current_user: models.User = Depends(get_current_active_staff_user)
29
  ):
30
  """
31
  Staff/Admin: Update a student's clearance status for their department.
@@ -45,7 +45,7 @@ async def reset_student_clearance(
45
  student_id_str: str,
46
  department_str: str,
47
  db: Session = Depends(get_db),
48
- current_user: models.User = Depends(get_current_active_staff_user)
49
  ):
50
  """
51
  Staff/Admin: Reset a student's clearance status for a department.
 
7
 
8
  from src import crud, models
9
  from src.database import get_db
10
+ from src.auth import get_current_active_user, get_current_active_staff_user_from_token
11
  from src.utils import format_student_clearance_details
12
 
13
  router = APIRouter(
14
  prefix="/api/clearance",
15
  tags=["Clearance"],
16
+ dependencies=[Depends(get_current_active_staff_user_from_token)]
17
  )
18
 
19
  class ClearanceUpdatePayload(models.BaseModel):
 
25
  student_id_str: str,
26
  payload: ClearanceUpdatePayload,
27
  db: Session = Depends(get_db),
28
+ current_user: models.User = Depends(get_current_active_staff_user_from_token)
29
  ):
30
  """
31
  Staff/Admin: Update a student's clearance status for their department.
 
45
  student_id_str: str,
46
  department_str: str,
47
  db: Session = Depends(get_db),
48
+ current_user: models.User = Depends(get_current_active_staff_user_from_token)
49
  ):
50
  """
51
  Staff/Admin: Reset a student's clearance status for a department.
src/routers/token.py CHANGED
@@ -8,7 +8,7 @@ from datetime import timedelta
8
 
9
  from src import models
10
  from src.database import get_db
11
- from src.auth import authenticate_user, create_access_token
12
  from src.config import settings
13
 
14
  router = APIRouter(
 
8
 
9
  from src import models
10
  from src.database import get_db
11
+ from src.auth import create_access_token, authenticate_tag_user_or_student as authenticate_user
12
  from src.config import settings
13
 
14
  router = APIRouter(
src/routers/users.py CHANGED
@@ -7,14 +7,14 @@ from typing import List
7
 
8
  from src import crud, models
9
  from src.database import get_db
10
- from src.auth import get_current_active_user, get_current_active_admin_user
11
 
12
  router = APIRouter(
13
  prefix="/api/users",
14
  tags=["Users"],
15
  )
16
 
17
- @router.post("/", response_model=models.UserResponse, status_code=status.HTTP_201_CREATED, dependencies=[Depends(get_current_active_admin_user)])
18
  async def create_new_user(user: models.UserCreate, db: Session = Depends(get_db)):
19
  """
20
  Admin: Create a new user (staff or admin).
@@ -24,7 +24,7 @@ async def create_new_user(user: models.UserCreate, db: Session = Depends(get_db)
24
  except HTTPException as e:
25
  raise e
26
 
27
- @router.get("/", response_model=List[models.UserResponse], dependencies=[Depends(get_current_active_admin_user)])
28
  async def read_users(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
29
  """
30
  Admin: Retrieve a list of all users.
 
7
 
8
  from src import crud, models
9
  from src.database import get_db
10
+ from src.auth import get_current_active_user, get_current_active_admin_user_from_token
11
 
12
  router = APIRouter(
13
  prefix="/api/users",
14
  tags=["Users"],
15
  )
16
 
17
+ @router.post("/", response_model=models.UserResponse, status_code=status.HTTP_201_CREATED, dependencies=[Depends(get_current_active_admin_user_from_token)])
18
  async def create_new_user(user: models.UserCreate, db: Session = Depends(get_db)):
19
  """
20
  Admin: Create a new user (staff or admin).
 
24
  except HTTPException as e:
25
  raise e
26
 
27
+ @router.get("/", response_model=List[models.UserResponse], dependencies=[Depends(get_current_active_admin_user_from_token)])
28
  async def read_users(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
29
  """
30
  Admin: Retrieve a list of all users.