From f14285b252e32fa543333490f7490bdf719bda26 Mon Sep 17 00:00:00 2001 From: Xevion Date: Sun, 10 Nov 2024 23:40:00 -0600 Subject: [PATCH] Fixup hacky login session system, add separate development Caddyfile for CORS cookie issue --- backend/linkpulse/routers/auth.py | 5 +++-- frontend/Caddyfile.development | 18 ++++++++++++++++++ frontend/src/components/auth/form.tsx | 10 ++++++++-- frontend/src/lib/auth.ts | 23 ++++++++++++++++++++--- frontend/src/lib/state.ts | 4 +++- frontend/src/main.tsx | 2 -- frontend/src/routes/dashboard.tsx | 23 +++++++++++++++++++++-- frontend/src/routes/login.tsx | 6 +++--- 8 files changed, 76 insertions(+), 15 deletions(-) create mode 100644 frontend/Caddyfile.development diff --git a/backend/linkpulse/routers/auth.py b/backend/linkpulse/routers/auth.py index 191bc50..f090104 100644 --- a/backend/linkpulse/routers/auth.py +++ b/backend/linkpulse/routers/auth.py @@ -5,7 +5,7 @@ import structlog from fastapi import APIRouter, Depends, Response, status from linkpulse.dependencies import RateLimiter, SessionDependency from linkpulse.models import Session, User -from linkpulse.utilities import utc_now +from linkpulse.utilities import utc_now, is_development from pwdlib import PasswordHash from pwdlib.hashers.argon2 import Argon2Hasher from pydantic import BaseModel, EmailStr, Field @@ -109,7 +109,8 @@ async def login(body: LoginBody, response: Response): ) # Set Cookie of session token - response.set_cookie("session", token, samesite="strict", max_age=int(session_duration.total_seconds())) + max_age = int(session_duration.total_seconds()) + response.set_cookie("session", token, max_age=max_age, secure=not is_development, httponly=True) return {"email": user.email, "expiry": session.expiry} diff --git a/frontend/Caddyfile.development b/frontend/Caddyfile.development new file mode 100644 index 0000000..82282c7 --- /dev/null +++ b/frontend/Caddyfile.development @@ -0,0 +1,18 @@ +{ + admin off # theres no need for the admin api in railway's environment + auto_https off # railway handles https for us, this would cause issues if left enabled +} + +http://localhost:8080 { + respond /health 200 + encode { + zstd fastest + gzip 3 + } + + handle /api/* { + reverse_proxy localhost:8000 + } + + reverse_proxy localhost:5173 +} diff --git a/frontend/src/components/auth/form.tsx b/frontend/src/components/auth/form.tsx index 95dc7cc..fbbca23 100644 --- a/frontend/src/components/auth/form.tsx +++ b/frontend/src/components/auth/form.tsx @@ -3,6 +3,7 @@ import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { login } from "@/lib/auth"; +import { useUserStore } from "@/lib/state"; import { cn } from "@/lib/utils"; import { Link } from "@tanstack/react-router"; import { HTMLAttributes, SyntheticEvent, useState } from "react"; @@ -38,7 +39,7 @@ export function RegisterForm({ className, ...props }: UserAuthFormProps) { disabled={isLoading} /> -