mirror of
https://github.com/documenso/documenso.git
synced 2025-11-09 20:12:31 +10:00
126 lines
3.3 KiB
TypeScript
126 lines
3.3 KiB
TypeScript
import { TRPCError } from '@trpc/server';
|
|
|
|
import { isAdmin } from '@documenso/lib/next-auth/guards/is-admin';
|
|
import { forgotPassword } from '@documenso/lib/server-only/user/forgot-password';
|
|
import { getUserById } from '@documenso/lib/server-only/user/get-user-by-id';
|
|
import { resetPassword } from '@documenso/lib/server-only/user/reset-password';
|
|
import { updatePassword } from '@documenso/lib/server-only/user/update-password';
|
|
import { updateProfile } from '@documenso/lib/server-only/user/update-profile';
|
|
|
|
import { authenticatedProcedure, procedure, router } from '../trpc';
|
|
import {
|
|
ZForgotPasswordFormSchema,
|
|
ZResetPasswordFormSchema,
|
|
ZRetrieveUserByIdQuerySchema,
|
|
ZUpdatePasswordMutationSchema,
|
|
ZUpdateProfileMutationSchema,
|
|
} from './schema';
|
|
|
|
export const profileRouter = router({
|
|
getUser: authenticatedProcedure
|
|
.input(ZRetrieveUserByIdQuerySchema)
|
|
.query(async ({ input, ctx }) => {
|
|
const isUserAdmin = isAdmin(ctx.user);
|
|
|
|
if (!isUserAdmin) {
|
|
throw new TRPCError({
|
|
code: 'UNAUTHORIZED',
|
|
message: 'Not authorized to perform this action.',
|
|
});
|
|
}
|
|
|
|
try {
|
|
const { id } = input;
|
|
|
|
return await getUserById({ id });
|
|
} catch (err) {
|
|
throw new TRPCError({
|
|
code: 'BAD_REQUEST',
|
|
message: 'We were unable to retrieve the specified account. Please try again.',
|
|
});
|
|
}
|
|
}),
|
|
|
|
updateProfile: authenticatedProcedure
|
|
.input(ZUpdateProfileMutationSchema)
|
|
.mutation(async ({ input, ctx }) => {
|
|
try {
|
|
const { name, signature } = input;
|
|
|
|
return await updateProfile({
|
|
userId: ctx.user.id,
|
|
name,
|
|
signature,
|
|
});
|
|
} catch (err) {
|
|
console.error(err);
|
|
|
|
throw new TRPCError({
|
|
code: 'BAD_REQUEST',
|
|
message:
|
|
'We were unable to update your profile. Please review the information you provided and try again.',
|
|
});
|
|
}
|
|
}),
|
|
|
|
updatePassword: authenticatedProcedure
|
|
.input(ZUpdatePasswordMutationSchema)
|
|
.mutation(async ({ input, ctx }) => {
|
|
try {
|
|
const { password, currentPassword } = input;
|
|
|
|
return await updatePassword({
|
|
userId: ctx.user.id,
|
|
password,
|
|
currentPassword,
|
|
});
|
|
} catch (err) {
|
|
let message =
|
|
'We were unable to update your profile. Please review the information you provided and try again.';
|
|
|
|
if (err instanceof Error) {
|
|
message = err.message;
|
|
}
|
|
|
|
throw new TRPCError({
|
|
code: 'BAD_REQUEST',
|
|
message,
|
|
});
|
|
}
|
|
}),
|
|
|
|
forgotPassword: procedure.input(ZForgotPasswordFormSchema).mutation(async ({ input }) => {
|
|
try {
|
|
const { email } = input;
|
|
|
|
return await forgotPassword({
|
|
email,
|
|
});
|
|
} catch (err) {
|
|
console.error(err);
|
|
}
|
|
}),
|
|
|
|
resetPassword: procedure.input(ZResetPasswordFormSchema).mutation(async ({ input }) => {
|
|
try {
|
|
const { password, token } = input;
|
|
|
|
return await resetPassword({
|
|
token,
|
|
password,
|
|
});
|
|
} catch (err) {
|
|
let message = 'We were unable to reset your password. Please try again.';
|
|
|
|
if (err instanceof Error) {
|
|
message = err.message;
|
|
}
|
|
|
|
throw new TRPCError({
|
|
code: 'BAD_REQUEST',
|
|
message,
|
|
});
|
|
}
|
|
}),
|
|
});
|