Files
sign/packages/lib/server-only/public-api/get-user-by-token.ts

38 lines
821 B
TypeScript
Raw Normal View History

2023-11-30 14:39:31 +02:00
import { prisma } from '@documenso/prisma';
2023-12-21 16:02:02 +02:00
import { hashString } from '../auth/hash';
export const getUserByApiToken = async ({ token }: { token: string }) => {
const hashedToken = hashString(token);
const user = await prisma.user.findFirst({
2023-11-30 14:39:31 +02:00
where: {
ApiToken: {
some: {
2023-12-21 16:02:02 +02:00
token: hashedToken,
2023-11-30 14:39:31 +02:00
},
},
},
include: {
ApiToken: true,
},
2023-11-30 14:39:31 +02:00
});
if (!user) {
2023-12-14 11:05:39 +02:00
throw new Error('Invalid token');
}
2024-02-20 19:46:18 +11:00
const retrievedToken = user.ApiToken.find((apiToken) => apiToken.token === hashedToken);
2024-02-20 19:46:18 +11:00
// This should be impossible but we need to satisfy TypeScript
if (!retrievedToken) {
throw new Error('Invalid token');
}
if (retrievedToken.expires && retrievedToken.expires < new Date()) {
2023-12-14 11:05:39 +02:00
throw new Error('Expired token');
}
2023-11-30 14:39:31 +02:00
return user;
};