feat: api token functions

This commit is contained in:
Catalin Pit
2023-11-24 16:13:09 +02:00
parent 80fe7ccdf5
commit fbee6eedc1
3 changed files with 64 additions and 0 deletions

View File

@ -0,0 +1,34 @@
import crypto from 'crypto';
import { prisma } from '@documenso/prisma';
// temporary choice for testing only
import { ONE_WEEK } from '../../constants/time';
type CreateApiTokenInput = {
userId: number;
tokenName: string;
};
export const createApiToken = async ({ userId, tokenName }: CreateApiTokenInput) => {
// quick implementation for testing; it needs double checking
const tokenHash = crypto
.createHash('sha512')
.update(crypto.randomBytes(32).toString('hex'))
.digest('hex');
const token = await prisma.apiToken.create({
data: {
token: tokenHash,
name: tokenName,
userId,
expires: new Date(Date.now() + ONE_WEEK),
},
});
if (!token) {
throw new Error(`Failed to create the API token`);
}
return token;
};

View File

@ -0,0 +1,15 @@
import { prisma } from '@documenso/prisma';
export type DeleteTokenByIdOptions = {
id: number;
userId: number;
};
export const deleteTokenById = async ({ id, userId }: DeleteTokenByIdOptions) => {
return prisma.apiToken.delete({
where: {
id,
userId,
},
});
};

View File

@ -0,0 +1,15 @@
import { prisma } from '@documenso/prisma';
export type GetApiTokenByIdOptions = {
id: number;
userId: number;
};
export const getApiTokenById = async ({ id, userId }: GetApiTokenByIdOptions) => {
return prisma.apiToken.findFirstOrThrow({
where: {
id,
userId,
},
});
};