feat(db): add new columns to medications and users tables for enhanced data tracking

feat(oidc): refactor setAuthCookies to use centralized cookie options for consistency
feat(nginx): update configuration to pass cookies through proxy for improved session handling
This commit is contained in:
Daniel Volz
2025-12-28 02:32:45 +01:00
parent 17a535866b
commit f3da765f7c
3 changed files with 15 additions and 20 deletions
+4
View File
@@ -165,7 +165,11 @@ async function runMigrations() {
{ name: "notes", sql: "ALTER TABLE medications ADD COLUMN notes TEXT" },
{ name: "generic_name", sql: "ALTER TABLE medications ADD COLUMN generic_name TEXT" },
{ name: "intake_reminders_enabled", sql: "ALTER TABLE medications ADD COLUMN intake_reminders_enabled INTEGER NOT NULL DEFAULT 0" },
{ name: "pill_weight_mg", sql: "ALTER TABLE medications ADD COLUMN pill_weight_mg REAL" },
{ name: "taken_by", sql: "ALTER TABLE medications ADD COLUMN taken_by TEXT" },
{ name: "users_email", sql: "ALTER TABLE users ADD COLUMN email TEXT" },
{ name: "users_avatar_url", sql: "ALTER TABLE users ADD COLUMN avatar_url TEXT" },
{ name: "users_oidc_subject", sql: "ALTER TABLE users ADD COLUMN oidc_subject TEXT" },
{ name: "user_settings_expiry_warning_days", sql: "ALTER TABLE user_settings ADD COLUMN expiry_warning_days INTEGER NOT NULL DEFAULT 90" },
];
+7 -20
View File
@@ -201,8 +201,9 @@ export async function oidcRoutes(app: FastifyInstance) {
expiresAt,
});
// Set cookies
setAuthCookies(reply, accessToken, refreshToken);
// Set cookies (use app's centralized cookie options)
console.log(`[OIDC] Setting cookies for user ${user.username}, NODE_ENV=${env.NODE_ENV}, secure=${app.config.cookieOptions.secure}`);
setAuthCookies(app, reply, accessToken, refreshToken);
// Redirect to frontend dashboard
// In dev: CORS_ORIGINS contains the frontend URL
@@ -308,22 +309,8 @@ async function generateRefreshToken(
return { refreshToken, tokenId, expiresAt };
}
function setAuthCookies(reply: FastifyReply, accessToken: string, refreshToken: string) {
const isProduction = env.NODE_ENV === "production";
reply.setCookie("access_token", accessToken, {
httpOnly: true,
secure: isProduction,
sameSite: "lax",
path: "/",
maxAge: env.ACCESS_TOKEN_TTL_MINUTES * 60,
});
reply.setCookie("refresh_token", refreshToken, {
httpOnly: true,
secure: isProduction,
sameSite: "lax",
path: "/",
maxAge: env.REFRESH_TOKEN_TTL_DAYS * 24 * 60 * 60,
});
function setAuthCookies(app: FastifyInstance, reply: FastifyReply, accessToken: string, refreshToken: string) {
// Use the same cookie options as regular auth for consistency
reply.setCookie("access_token", accessToken, app.config.cookieOptions);
reply.setCookie("refresh_token", refreshToken, app.config.refreshCookieOptions);
}
+4
View File
@@ -26,6 +26,10 @@ server {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Pass cookies through
proxy_pass_header Set-Cookie;
proxy_cookie_path / /;
# Timeout for uploads
proxy_read_timeout 60s;
proxy_send_timeout 60s;