From f300838f8e37a2ce518b86bf2be2aec6c2102eb2 Mon Sep 17 00:00:00 2001 From: miloschwartz Date: Thu, 19 Jun 2025 15:58:05 -0400 Subject: [PATCH] add migration for 1.6.0 --- server/routers/idp/validateOidcCallback.ts | 4 ++++ server/setup/scriptsPg/1.6.0.ts | 11 ++++++++++ server/setup/scriptsSqlite/1.6.0.ts | 24 ++++++++++++++++++++-- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/server/routers/idp/validateOidcCallback.ts b/server/routers/idp/validateOidcCallback.ts index eaf9a2e6..3d28db24 100644 --- a/server/routers/idp/validateOidcCallback.ts +++ b/server/routers/idp/validateOidcCallback.ts @@ -211,6 +211,10 @@ export async function validateOidcCallback( logger.debug("User email", { email }); logger.debug("User name", { name }); + if (email) { + email = email.toLowerCase(); + } + const [existingUser] = await db .select() .from(users) diff --git a/server/setup/scriptsPg/1.6.0.ts b/server/setup/scriptsPg/1.6.0.ts index 375f8388..62beb0e0 100644 --- a/server/setup/scriptsPg/1.6.0.ts +++ b/server/setup/scriptsPg/1.6.0.ts @@ -1,4 +1,6 @@ +import { db } from "@server/db/pg/driver"; import { configFilePath1, configFilePath2 } from "@server/lib/consts"; +import { sql } from "drizzle-orm"; import fs from "fs"; import yaml from "js-yaml"; @@ -7,6 +9,15 @@ const version = "1.6.0"; export default async function migration() { console.log(`Running setup script ${version}...`); + try { + db.execute(sql`UPDATE 'user' SET email = LOWER(email);`); + db.execute(sql`UPDATE 'user' SET username = LOWER(username);`); + console.log(`Migrated database schema`); + } catch (e) { + console.log("Unable to make all usernames and emails lowercase"); + console.log(e); + } + try { // Determine which config file exists const filePaths = [configFilePath1, configFilePath2]; diff --git a/server/setup/scriptsSqlite/1.6.0.ts b/server/setup/scriptsSqlite/1.6.0.ts index 375f8388..b27fedb5 100644 --- a/server/setup/scriptsSqlite/1.6.0.ts +++ b/server/setup/scriptsSqlite/1.6.0.ts @@ -1,12 +1,32 @@ -import { configFilePath1, configFilePath2 } from "@server/lib/consts"; +import { APP_PATH, configFilePath1, configFilePath2 } from "@server/lib/consts"; +import Database from "better-sqlite3"; import fs from "fs"; import yaml from "js-yaml"; +import path from "path"; const version = "1.6.0"; export default async function migration() { console.log(`Running setup script ${version}...`); + const location = path.join(APP_PATH, "db", "db.sqlite"); + const db = new Database(location); + + try { + db.pragma("foreign_keys = OFF"); + db.transaction(() => { + db.exec(` + UPDATE 'user' SET email = LOWER(email); + UPDATE 'user' SET username = LOWER(username); + `); + })(); // <-- executes the transaction immediately + db.pragma("foreign_keys = ON"); + console.log(`Migrated database schema`); + } catch (e) { + console.log("Unable to make all usernames and emails lowercase"); + console.log(e); + } + try { // Determine which config file exists const filePaths = [configFilePath1, configFilePath2]; @@ -39,7 +59,7 @@ export default async function migration() { console.log(`Set trust_proxy to 1 in config file`); } catch (e) { - console.log(`Unable to migrate config file. Error: ${e}`); + console.log(`Unable to migrate config file. Please do it manually. Error: ${e}`); } console.log(`${version} migration complete`);