From 2162b8e159806e52e5d0ecc1e7a3fc222f03b82b Mon Sep 17 00:00:00 2001 From: ThijmenGThN Date: Fri, 8 Sep 2023 23:26:18 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A5=20Removed=20Server=20Actions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/auth/forgot.ts | 72 ------------------------------- src/server/auth/register.ts | 64 --------------------------- src/server/dashboard/account.ts | 19 -------- src/server/dashboard/apiTokens.ts | 54 ----------------------- 4 files changed, 209 deletions(-) delete mode 100644 src/server/auth/forgot.ts delete mode 100644 src/server/auth/register.ts delete mode 100644 src/server/dashboard/account.ts delete mode 100644 src/server/dashboard/apiTokens.ts diff --git a/src/server/auth/forgot.ts b/src/server/auth/forgot.ts deleted file mode 100644 index d0ba2d5..0000000 --- a/src/server/auth/forgot.ts +++ /dev/null @@ -1,72 +0,0 @@ -"use server" - -import bcrypt from 'bcrypt' -import jwt from 'jsonwebtoken' -import { redirect } from 'next/navigation' - -import prisma from '@/prisma/client' -import Email from '@/emails/client' - -import eReset from '@/emails/Reset' - -import { vTypes } from '@/helpers/validation' - -export async function request(email: string) { - try { - - // ENSURE: All environment variables are set. - if ( - !process.env.NEXTAUTH_SECRET || - !process.env.NEXTAUTH_URL - ) throw new Error('Missing NEXTAUTH environment variables.') - - const passwordResetToken = jwt.sign({ email }, process.env.NEXTAUTH_SECRET, { expiresIn: '45m' }) - - await prisma.user.update({ - where: { email }, - data: { passwordResetToken } - }) - - await Email( - eReset({ - email, - link: process.env.NEXTAUTH_URL + '/forgot/' + passwordResetToken, - assets: { logoUrl: process.env.NEXTAUTH_URL + '/logo.webp' } - }), - { - to: email, - subject: 'Reset your password' - } - ) - } - catch (_) { redirect('/login') } -} - -export async function update({ password, token }: { password: string, token: string }) { - try { - - // ENSURE: All environment variables are set. - if (!process.env.NEXTAUTH_SECRET) throw new Error('Missing NEXTAUTH environment variables.') - - // VALIDATE: If the supplied data meets the requirements, it'll throw an error if this isn't the case. - vTypes.password.parse(password) - - // CHECK: If the supplied token is valid and extract the content. - const { email }: string | any = jwt.verify(token, process.env.NEXTAUTH_SECRET) - - // CHECK: If the supplied email exists and get the password reset token from the user account. - const { passwordResetToken }: string | any = await prisma.user.findUnique({ where: { email } }) - - // COMPARE: Supplied token to the account token which has been created upon password reset. - if (token != passwordResetToken) throw new Error('The provided token is not valid.') - - await prisma.user.update({ - where: { email }, - data: { - password: await bcrypt.hash(password, 12), - passwordResetToken: null - } - }) - } - catch (_) { redirect('/login') } -} diff --git a/src/server/auth/register.ts b/src/server/auth/register.ts deleted file mode 100644 index 68a4f1a..0000000 --- a/src/server/auth/register.ts +++ /dev/null @@ -1,64 +0,0 @@ -"use server" - -import bcrypt from 'bcrypt' -import jwt from 'jsonwebtoken' - -import prisma from '@/prisma/client' -import Email from '@/emails/client' - -import eRegister from '@/emails/Register' - -import validate from '@/helpers/validation' - -interface iUser { - name: string - email: string - password: string -} - -export async function request(email: string) { - - // ENSURE: All environment variables are set. - if ( - !process.env.NEXTAUTH_URL || - !process.env.NEXTAUTH_SECRET - ) throw new Error('Missing NEXTAUTH environment variables.') - - // ENFORCE: No duplicate user entries. - if (await prisma.user.findUnique({ where: { email } })) throw new Error('This email address is already taken') - - // CREATE: A new token which will be supplied within the email to ensure right of registration. - const token = jwt.sign({ email }, process.env.NEXTAUTH_SECRET, { expiresIn: '1d' }) - - await Email( - eRegister({ - email, - link: process.env.NEXTAUTH_URL + '/register/' + token, - assets: { logoUrl: process.env.NEXTAUTH_URL + '/logo.webp' } - }), - { - to: email, - subject: 'Complete your registration' - } - ) -} - -export async function create(userData: iUser) { - - // ENSURE: All environment variables are set. - if ( - !process.env.NEXTAUTH_URL || - !process.env.NEXTAUTH_SECRET - ) throw new Error('Missing NEXTAUTH environment variables.') - - // VALIDATE: If the supplied data meets the requirements. - const { name, email, password } = validate.objects.user.parse(userData) - - // CREATE: New user account. - await prisma.user.create({ - data: { - name, email, - password: await bcrypt.hash(password, 12) - } - }) -} \ No newline at end of file diff --git a/src/server/dashboard/account.ts b/src/server/dashboard/account.ts deleted file mode 100644 index de493e2..0000000 --- a/src/server/dashboard/account.ts +++ /dev/null @@ -1,19 +0,0 @@ -"use server" - -import { getServerSession } from "next-auth" - -import prisma from '@/prisma/client' -import options from "@/auth/options" - -export async function update({ name }: { name: string }) { - - // FIREWALL: Check if session is valid. - const session = await getServerSession(options) - if (!session || !session?.user.email) throw new Error('The session seems to be invalid.') - - // REFLECT: Updated data to the database. - await prisma.user.update({ - where: { email: session?.user.email }, - data: { name } - }) -} diff --git a/src/server/dashboard/apiTokens.ts b/src/server/dashboard/apiTokens.ts deleted file mode 100644 index 4c86108..0000000 --- a/src/server/dashboard/apiTokens.ts +++ /dev/null @@ -1,54 +0,0 @@ -"use server" - -import jwt from 'jsonwebtoken' -import crypto from "crypto" -import bcrypt from 'bcrypt' -import { getServerSession } from "next-auth" - -import prisma from '@/prisma/client' -import options from "@/auth/options" - -import { vTypes } from '@/helpers/validation' - -export async function create({ name }: { name: string }) { - - // ENSURE: All environment variables are set. - if (!process.env.NEXTAUTH_SECRET) throw new Error('Missing NEXTAUTH environment variables.') - - // FIREWALL: Check if session is valid. - const session = await getServerSession(options) - if (!session || !session?.user.email) throw new Error('The session seems to be invalid.') - - // VALIDATE: If the supplied data meets the requirements. - if (!vTypes.name.safeParse(name).success) throw new Error('The "name" attribute does not meet the requirements.') - - // CHECK: If the requester meets the criterias of creating a new token. - if (await prisma.apiToken.findFirst({ where: { name, owner: session.user.email } })) throw new Error('An API token with the same name has already been generated.') - if (await prisma.apiToken.count({ where: { owner: session.user.email } }) >= 25) throw new Error('You have reached the maximum limit for API tokens.') - - const token = crypto.randomBytes(20).toString() - - // INSERT: Newly created token into the database. - await prisma.apiToken.create({ - data: { - name, - token: await bcrypt.hash(token, 12), - owner: session.user.email - } - }) - - // CONVERT: Token into json web token format and return it to the requester. - return jwt.sign({ name, owner: session.user.email, token }, process.env.NEXTAUTH_SECRET) -} - -export async function remove({ id }: { id: string }) { - - // ENSURE: All environment variables are set. - if (!process.env.NEXTAUTH_SECRET) throw new Error('Missing NEXTAUTH environment variables.') - - // FIREWALL: Check if session is valid. - const session = await getServerSession(options) - if (!session || !session?.user.email) throw new Error('Invalid session.') - - await prisma.apiToken.delete({ where: { id, owner: session.user.email } }) -}