Merge branch 'dev' into ajnart/fix-duplicate-users

This commit is contained in:
Meier Lukas
2024-05-18 13:49:25 +02:00
committed by GitHub
62 changed files with 308 additions and 235 deletions

View File

@@ -1,7 +1,7 @@
import { TRPCError } from "@trpc/server";
import { observable } from "@trpc/server/observable";
import { createSalt, hashPassword } from "@homarr/auth";
import { createSaltAsync, hashPasswordAsync } from "@homarr/auth";
import type { Database } from "@homarr/db";
import { and, createId, eq, schema } from "@homarr/db";
import { invites, users } from "@homarr/db/schema/sqlite";
@@ -27,7 +27,7 @@ export const userRouter = createTRPCRouter({
});
}
await createUser(ctx.db, input);
await createUserAsync(ctx.db, input);
}),
register: publicProcedure
.input(validation.user.registrationApi)
@@ -53,7 +53,8 @@ export const userRouter = createTRPCRouter({
await checkUsernameAlreadyTakenAndThrowAsync(ctx.db, input.username);
await createUser(ctx.db, input);
await createUserAsync(ctx.db, input);
await createUserAsync(ctx.db, input);
// Delete invite as it's used
await ctx.db.delete(invites).where(inviteWhere);
}),
@@ -62,8 +63,8 @@ export const userRouter = createTRPCRouter({
.mutation(async ({ ctx, input }) => {
await checkUsernameAlreadyTakenAndThrowAsync(ctx.db, input.username);
await createUser(ctx.db, input);
}),
await createUserAsync(ctx.db, input);
}),
setProfileImage: protectedProcedure
.input(
z.object({
@@ -219,7 +220,7 @@ export const userRouter = createTRPCRouter({
});
}
const previousPasswordHash = await hashPassword(
const previousPasswordHash = await hashPasswordAsync(
input.previousPassword,
dbUser.salt ?? "",
);
@@ -233,8 +234,8 @@ export const userRouter = createTRPCRouter({
}
}
const salt = await createSalt();
const hashedPassword = await hashPassword(input.password, salt);
const salt = await createSaltAsync();
const hashedPassword = await hashPasswordAsync(input.password, salt);
await ctx.db
.update(users)
.set({
@@ -243,7 +244,7 @@ export const userRouter = createTRPCRouter({
.where(eq(users.id, input.userId));
}),
setMessage: publicProcedure.input(z.string()).mutation(async ({ input }) => {
await exampleChannel.publish({ message: input });
await exampleChannel.publishAsync({ message: input });
}),
test: publicProcedure.subscription(() => {
return observable<{ message: string }>((emit) => {
@@ -254,12 +255,12 @@ export const userRouter = createTRPCRouter({
}),
});
const createUser = async (
const createUserAsync = async (
db: Database,
input: z.infer<typeof validation.user.create>,
) => {
const salt = await createSalt();
const hashedPassword = await hashPassword(input.password, salt);
const salt = await createSaltAsync();
const hashedPassword = await hashPasswordAsync(input.password, salt);
const username = input.username.toLowerCase();