fix: remove auth session and env schema changes, keep only password requirement relaxation
This commit is contained in:
6 files changed
+17
-76
No files matched your search
@@ -115,15 +115,7 @@ export const LoginForm = ({ providers, oidcClientName, isOidcAutoLoginEnabled, c
|
||||
<Stack gap="lg">
|
||||
{credentialInputsVisible && (
|
||||
<>
|
||||
<form
|
||||
onSubmit={form.onSubmit(
|
||||
(credentials) =>
|
||||
void signInAsync(credentials.provider, {
|
||||
name: credentials.name,
|
||||
password: credentials.password,
|
||||
}),
|
||||
)}
|
||||
>
|
||||
<form onSubmit={form.onSubmit((credentials) => void signInAsync(credentials.provider, credentials))}>
|
||||
<Stack gap="lg">
|
||||
<TextInput
|
||||
label={t("field.username.label")}
|
||||
|
||||
@@ -11,19 +11,6 @@ export const createAdapter = (db: Database, provider: SupportedAuthProvider | "u
|
||||
|
||||
return {
|
||||
...drizzleAdapter,
|
||||
createSession: (data) => {
|
||||
const result = db
|
||||
.insert(sessions)
|
||||
.values({
|
||||
sessionToken: data.sessionToken,
|
||||
userId: data.userId,
|
||||
expires: data.expires,
|
||||
})
|
||||
.returning()
|
||||
.get();
|
||||
|
||||
return result;
|
||||
},
|
||||
// We override the default implementation as we want to have a provider
|
||||
// flag in the user instead of the account to not intermingle users from different providers
|
||||
// eslint-disable-next-line no-restricted-syntax
|
||||
|
||||
@@ -71,12 +71,6 @@ export const createConfiguration = (
|
||||
|
||||
const expires = expireDateAfter(env.AUTH_SESSION_EXPIRY_TIME);
|
||||
const sessionToken = generateSessionToken();
|
||||
|
||||
if (Number.isNaN(expires.getTime())) {
|
||||
logger.error("Invalid session expiry date", { expirySeconds: env.AUTH_SESSION_EXPIRY_TIME });
|
||||
return false;
|
||||
}
|
||||
|
||||
await adapter.createSession({
|
||||
sessionToken,
|
||||
expires,
|
||||
|
||||
@@ -99,7 +99,7 @@ const addUserToEveryoneGroupIfNotMemberAsync = async (db: Database, userId: stri
|
||||
},
|
||||
});
|
||||
|
||||
if (dbEveryoneGroup?.id && dbEveryoneGroup.members.length === 0) {
|
||||
if (dbEveryoneGroup?.members.length === 0) {
|
||||
await db.insert(groupMembers).values({
|
||||
userId,
|
||||
groupId: dbEveryoneGroup.id,
|
||||
|
||||
@@ -1,42 +1,11 @@
|
||||
/**
|
||||
* @vitest-environment node
|
||||
*/
|
||||
import { describe, expect, test } from "vitest";
|
||||
|
||||
import { createId } from "@homarr/common";
|
||||
import { users } from "@homarr/db/schema";
|
||||
import { createDb } from "@homarr/db/test";
|
||||
|
||||
import { createAdapter } from "../adapter";
|
||||
import { expireDateAfter } from "../session";
|
||||
|
||||
describe("createAdapter should create drizzle adapter", () => {
|
||||
test("createSession should insert a session row", async () => {
|
||||
const db = createDb();
|
||||
const userId = createId();
|
||||
await db.insert(users).values({ id: userId, name: "demodemo", password: "hash" });
|
||||
|
||||
const adapter = createAdapter(db, "credentials");
|
||||
const sessionToken = "test-session-token";
|
||||
|
||||
const session = await adapter.createSession?.({
|
||||
sessionToken,
|
||||
userId,
|
||||
expires: expireDateAfter(86400),
|
||||
});
|
||||
|
||||
expect(session).toMatchObject({
|
||||
sessionToken,
|
||||
userId,
|
||||
});
|
||||
|
||||
const storedSession = await db.query.sessions.findFirst({
|
||||
where: (table, { eq }) => eq(table.sessionToken, sessionToken),
|
||||
});
|
||||
|
||||
expect(storedSession).toBeDefined();
|
||||
});
|
||||
|
||||
test.each([["credentials" as const], ["ldap" as const], ["oidc" as const]])(
|
||||
"createAdapter getUserByEmail should return user for provider %s when this provider provided",
|
||||
async (provider) => {
|
||||
|
||||
+15
-16
@@ -12,26 +12,25 @@ export const createBooleanSchema = (defaultValue: boolean) =>
|
||||
})
|
||||
.default(defaultValue);
|
||||
|
||||
export const createDurationSchema = (defaultValue: `${number}${"s" | "m" | "h" | "d"}`) => {
|
||||
const defaultMultipliers = {
|
||||
s: 1,
|
||||
m: 60,
|
||||
h: 60 * 60,
|
||||
d: 60 * 60 * 24,
|
||||
} as const;
|
||||
|
||||
return z
|
||||
export const createDurationSchema = (defaultValue: `${number}${"s" | "m" | "h" | "d"}`) =>
|
||||
z
|
||||
.string()
|
||||
.regex(/^\d+[smhd]?$/)
|
||||
.default(defaultValue)
|
||||
.transform((duration) => {
|
||||
const unit = duration.at(-1) as keyof typeof defaultMultipliers | undefined;
|
||||
const multiplier = unit ? defaultMultipliers[unit] : undefined;
|
||||
|
||||
if (multiplier) {
|
||||
return Number(duration.slice(0, -1)) * multiplier;
|
||||
const lastChar = duration[duration.length - 1] as "s" | "m" | "h" | "d";
|
||||
if (!isNaN(Number(lastChar))) {
|
||||
return Number(defaultValue);
|
||||
}
|
||||
|
||||
return Number(duration);
|
||||
const multipliers = {
|
||||
s: 1,
|
||||
m: 60,
|
||||
h: 60 * 60,
|
||||
d: 60 * 60 * 24,
|
||||
};
|
||||
const numberDuration = Number(duration.slice(0, -1));
|
||||
const multiplier = multipliers[lastChar];
|
||||
|
||||
return numberDuration * multiplier;
|
||||
});
|
||||
};
|
||||
Reference in new issue
Block a user