Implement team join request functionality with views and actions

- Added join_requests.html template for displaying pending join requests.
- Created join_team.html template for users to submit join requests.
- Implemented request_processed.html template to show the result of join request processing.
- Developed authentication utilities for user session management.
- Introduced convenience redirects for common URL patterns.
- Established team management routes and actions for creating, editing, and joining teams.
- Added functionality for approving and denying join requests with email notifications.
- Enhanced team views to include user permissions and team member details.
- Implemented utility functions for team-related operations such as calculating total points and team rank.
This commit is contained in:
Christian Krakau-Louis
2025-04-14 17:00:57 +02:00
parent 5cf3f944b1
commit 7323c12168
26 changed files with 2138 additions and 319 deletions
+24 -5
View File
@@ -17,15 +17,25 @@ from ..templates_config import templates
from ..security import verify_password, get_password_hash
from ..utils.mail import send_password_reset_email
router = APIRouter(prefix="/auth", tags=["Auth"])
router = APIRouter(tags=["Auth"])
@router.get("/login", response_class=HTMLResponse)
async def login_page(request: Request, error: Optional[str] = None, message: Optional[str] = None):
async def login_page(request: Request, error: Optional[str] = None, message: Optional[str] = None, db: Session = Depends(get_db)):
"""Login page route"""
# Check if user is already logged in
user = None
user_id = request.session.get("user_id")
if user_id:
user = db.query(User).get(user_id)
# If user is already logged in, show a message
if not message:
message = "You are already logged in."
return templates.TemplateResponse(
"auth/login.html",
{"request": request, "error": error, "message": message,
"show_oauth": True, "oauth_provider_name": "Authentik"}
"show_oauth": True, "oauth_provider_name": "Authentik",
"user": user} # Add user to context
)
@router.post("/login", response_class=HTMLResponse)
@@ -100,11 +110,20 @@ async def login_post(
return RedirectResponse(next_page, status_code=HTTP_303_SEE_OTHER)
@router.get("/register", response_class=HTMLResponse)
async def register_page(request: Request, error: Optional[str] = None):
async def register_page(request: Request, error: Optional[str] = None, db: Session = Depends(get_db)):
"""Registration page route"""
# Check if user is already logged in
user = None
user_id = request.session.get("user_id")
if user_id:
user = db.query(User).get(user_id)
# If no specific error is set, inform user they're already registered
if not error:
error = "You are already registered and logged in. You can logout first if you want to create a new account."
return templates.TemplateResponse(
"auth/register.html",
{"request": request, "error": error}
{"request": request, "error": error, "user": user} # Add user to context
)
@router.post("/register", response_class=HTMLResponse)