Add working sign-in / sign-out, add working registration with token

This commit is contained in:
Meier Lukas
2023-07-29 10:05:05 +02:00
parent 326395730e
commit d8562e2990
19 changed files with 506 additions and 147 deletions

View File

@@ -13,6 +13,7 @@ import { mediaServerRouter } from './routers/media-server';
import { overseerrRouter } from './routers/overseerr';
import { rssRouter } from './routers/rss';
import { usenetRouter } from './routers/usenet/router';
import { userRouter } from './routers/user';
import { weatherRouter } from './routers/weather';
/**
@@ -23,6 +24,7 @@ import { weatherRouter } from './routers/weather';
export const rootRouter = createTRPCRouter({
app: appRouter,
rss: rssRouter,
user: userRouter,
config: configRouter,
docker: dockerRouter,
icon: iconRouter,

View File

@@ -0,0 +1,66 @@
import { TRPCError } from '@trpc/server';
import bcrypt from 'bcrypt';
import { z } from 'zod';
import { hashPassword } from '~/utils/security';
import { signUpFormSchema } from '~/validations/user';
import { createTRPCRouter, publicProcedure } from '../trpc';
export const userRouter = createTRPCRouter({
register: publicProcedure
.input(
signUpFormSchema.and(
z.object({
registerToken: z.string(),
})
)
)
.mutation(async ({ ctx, input }) => {
const token = await ctx.prisma.registrationToken.findUnique({
where: {
token: input.registerToken,
},
});
if (!token || token.expires < new Date()) {
throw new TRPCError({
code: 'FORBIDDEN',
message: 'Invalid registration token',
});
}
const existingUser = await ctx.prisma.user.findFirst({
where: {
name: input.username,
},
});
if (existingUser) {
throw new TRPCError({
code: 'CONFLICT',
message: 'User already exists',
});
}
const salt = bcrypt.genSaltSync(10);
const hashedPassword = hashPassword(input.password, salt);
const user = await ctx.prisma.user.create({
data: {
name: input.username,
password: hashedPassword,
salt: salt,
},
});
await ctx.prisma.registrationToken.delete({
where: {
id: token.id,
},
});
return {
id: user.id,
name: user.name,
};
}),
});

View File

@@ -13,6 +13,7 @@ import superjson from 'superjson';
import { ZodError } from 'zod';
import { getServerAuthSession } from '../auth';
import { prisma } from '../db';
/**
* 1. CONTEXT
@@ -38,6 +39,7 @@ interface CreateContextOptions {
*/
const createInnerTRPCContext = (opts: CreateContextOptions) => ({
session: opts.session,
prisma,
});
/**