import re with open("/opt/docker/dev/service_finder/backend/app/api/v1/endpoints/auth.py", "r") as f: content = f.read() # Add Response to imports if not there if "from fastapi import APIRouter, Depends, HTTPException, status, Request, Form, Response" not in content: content = content.replace( "from fastapi import APIRouter, Depends, HTTPException, status, Request, Form", "from fastapi import APIRouter, Depends, HTTPException, status, Request, Form, Response" ) new_login = """ @router.post("/login", response_model=Token) async def login( response: Response, db: AsyncSession = Depends(get_db), form_data: OAuth2PasswordRequestForm = Depends(), remember_me: bool = Form(False) ): \"\"\" Bejelentkezés remember_me opcióval. A remember_me paramétert explicit Form mezőként kell elküldeni, mivel az OAuth2PasswordRequestForm nem támogatja alapból. \"\"\" user = await AuthService.authenticate(db, form_data.username, form_data.password) if not user: raise HTTPException(status_code=401, detail="Hibás adatok.") ranks = await settings.get_db_setting(db, "rbac_rank_matrix", default=DEFAULT_RANK_MAP) role_name = user.role.value if hasattr(user.role, 'value') else str(user.role) role_key = role_name.upper() # A DEFAULT_RANK_MAP nagybetűs kulcsokat vár token_data = { "sub": str(user.id), "role": role_name, "rank": ranks.get(role_key, 10), "scope_level": user.scope_level or "individual", "scope_id": str(user.scope_id) if user.scope_id else str(user.id) } access, refresh = create_tokens(data=token_data, remember_me=remember_me) # Kinyerjük a beállításokból, hogy meddig él a refresh token (itt is, vagy a create_tokens is ezt csinálja) # A SSoT szerint auth_remember_me_days = 30 if remember_me: max_age_days = await config.get_setting(db, "auth_remember_me_days", default=30) else: max_age_days = await config.get_setting(db, "auth_refresh_default_days", default=1) max_age_sec = int(max_age_days) * 24 * 60 * 60 response.set_cookie( key="refresh_token", value=refresh, httponly=True, secure=True, # Use Secure samesite="lax", max_age=max_age_sec ) return {"access_token": access, "refresh_token": refresh, "token_type": "bearer", "is_active": user.is_active} """ pattern = r'@router\.post\("/login", response_model=Token\)\nasync def login\(.*?\):\n(?:.*?(?=@router\.post|class VerifyEmailRequest))' content = re.sub(pattern, new_login.strip() + "\n\n", content, flags=re.DOTALL) with open("/opt/docker/dev/service_finder/backend/app/api/v1/endpoints/auth.py", "w") as f: f.write(content)