Files
service-finder/tests/archive/patch_auth_login.py.old

71 lines
2.7 KiB
Python

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)