diff --git a/backend/blueprints/profile/__init__.py b/backend/blueprints/profile/__init__.py index 9907f79..642e917 100644 --- a/backend/blueprints/profile/__init__.py +++ b/backend/blueprints/profile/__init__.py @@ -149,4 +149,21 @@ def login(): }), 200 except Exception as e: db.session.rollback() - return jsonify({"error": "Login failed, please try again later."}), 500 \ No newline at end of file + return jsonify({"error": "Login failed, please try again later."}), 500 + +#Implement laters +@profile.route('/update', methhods=['UPDATE', 'DELETE']) +def update(): + if request.method == 'DELETE': + pass + if request.method == 'UPDATE': + pass + +@profile.route('/me') +def my_profile(): + pass + +@profile.route('/info/') +def profile_info(user_uuid): + return user_uuid + diff --git a/backend/db/model.py b/backend/db/model.py index 6e64434..be44ffe 100644 --- a/backend/db/model.py +++ b/backend/db/model.py @@ -29,6 +29,7 @@ class User(db.Model): chats: Mapped[List["Chat"]] = relationship(back_populates="user", cascade="all, delete-orphan") notifications: Mapped[List["Notification"]] = relationship(back_populates="user", cascade="all, delete-orphan") user_badges: Mapped[List["UserBadge"]] = relationship(back_populates="user", cascade="all, delete-orphan") + publications: Mapped[List["Course"]] = relationship(back_populates="author", cascade="all, delete-orphan") dob: Mapped[datetime] = mapped_column(DateTime, nullable=False, default=datetime.fromisocalendar(2002, 1, 1)) pfpFilename: Mapped[str] = mapped_column(String(256), nullable=False, default=DEFAULT_PROFILE_FILE) joinedDate: Mapped[datetime] = mapped_column(DateTime, nullable=False, default=func.now()) @@ -75,6 +76,8 @@ class Course(db.Model): creationDate: Mapped[datetime] = mapped_column(DateTime, nullable=False, default=func.now()) coverImage: Mapped[str] = mapped_column(String(256), nullable=False, default=DEFAULT_COURSE_COVER) serverFilename: Mapped[str] = mapped_column(String(256), nullable=False, default='') + authorID: Mapped[uuid.UUID] = mapped_column(ForeignKey("user.id")) + author: Mapped["User"] = relationship(back_populates="publications") class Enrollment(db.Model): diff --git a/backend/utils/auth.py b/backend/utils/auth.py index fb490cd..a8bc72e 100644 --- a/backend/utils/auth.py +++ b/backend/utils/auth.py @@ -1,13 +1,12 @@ from functools import wraps -from flask import request, jsonify +from flask import request, jsonify, g from sqlalchemy import select, and_ from ..db.model import User, Session, db from ..constants import UserRole -from typing import Union -def requires_role(roles: Union[None, UserRole] = None): +def requires_role(roles=None): if roles is None: - roles = [UserRole.USER] + roles = [UserRole.USER, UserRole.ADMIN] roles = [int(r) for r in roles] def decorator(f): @wraps(f) @@ -24,9 +23,12 @@ def requires_role(roles: Union[None, UserRole] = None): ).scalar() if not session: return jsonify({'error': 'Invalid or expired session'}), 401 - user = session.user + + user: User = session.user if not user: return jsonify({'error': 'User not found for the Access token'}), 401 + g.current_session = session + g.current_user = user # If no roles specified, allow access if not roles: return f(*args, **kwargs)