diff --git a/pages/admin/actions/[id].js b/pages/admin/actions/[id].js index 9304ba77..f01a0350 100644 --- a/pages/admin/actions/[id].js +++ b/pages/admin/actions/[id].js @@ -2,13 +2,12 @@ import { getSession } from 'next-auth/react'; import Navbar from '../../../components/navbar'; import UpdateUserForm from '../../../components/updateUserForm'; import prisma from '../../../prisma/prisma'; +import redirectUser from '../../util/redirectUser.js'; export async function getServerSideProps(context) { const userSession = await getSession(context); if (!userSession) { - context.res.writeHead(302, { Location: '/' }); - context.res.end(); - return {}; + return redirectUser('/error'); } const user = await prisma.User.findUnique({ @@ -22,9 +21,7 @@ export async function getServerSideProps(context) { }); if (user.role != 'ADMIN') { - context.res.writeHead(302, { Location: '/error' }); - context.res.end(); - return {}; + return redirectUser('/error'); } const userInfo = await prisma.User.findUnique({ diff --git a/pages/admin/index.js b/pages/admin/index.js index 42b45167..ac5e996c 100644 --- a/pages/admin/index.js +++ b/pages/admin/index.js @@ -5,13 +5,12 @@ import Link from 'next/link'; import { getSession } from 'next-auth/react'; import prisma from '../../prisma/prisma'; import dynamic from 'next/dynamic'; +import redirectUser from '../../util/redirectUser.js'; export async function getServerSideProps(ctx) { const userSession = await getSession(ctx); if (!userSession) { - ctx.res.writeHead(302, { Location: '/' }); - ctx.res.end(); - return {}; + return redirectUser('/error'); } const user = await prisma.User.findUnique({ @@ -25,9 +24,7 @@ export async function getServerSideProps(ctx) { }); if (user.role != 'ADMIN') { - ctx.res.writeHead(302, { Location: '/error' }); - ctx.res.end(); - return {}; + return redirectUser('/error'); } const users = await prisma.User.findMany({ diff --git a/pages/classes/index.js b/pages/classes/index.js index 76ce051a..f9ddf876 100644 --- a/pages/classes/index.js +++ b/pages/classes/index.js @@ -8,13 +8,12 @@ import Modal from '../../components/modal'; import { ToastContainer } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; import { useState } from 'react'; +import redirectUser from '../../util/redirectUser.js'; export async function getServerSideProps(ctx) { const userSession = await getSession(ctx); if (!userSession) { - ctx.res.writeHead(302, { Location: '/' }); - ctx.res.end(); - return {}; + return redirectUser('/error'); } const userInfo = await prisma.User.findMany({ @@ -23,19 +22,9 @@ export async function getServerSideProps(ctx) { } }); if (userInfo[0].role == 'ADMIN') { - ctx.res.writeHead(302, { Location: '/admin' }); - ctx.res.end(); - // This prevents us from returning undefined prop obj which throws an error. - return { - props: {} - }; + return redirectUser('/admin'); } else if (userInfo[0].role != 'TEACHER') { - ctx.res.writeHead(302, { Location: '/error' }); - ctx.res.end(); - // This prevents us from returning undefined prop obj which throws an error. - return { - props: {} - }; + return redirectUser('/error'); } const classrooms = await prisma.Classroom.findMany({ diff --git a/pages/dashboard/[id].js b/pages/dashboard/[id].js index 164e1efd..b4f2e4c4 100644 --- a/pages/dashboard/[id].js +++ b/pages/dashboard/[id].js @@ -12,14 +12,13 @@ import { getNonDashedNamesURLs, getSuperBlockJsons } from '../../util/api_proccesor'; +import redirectUser from '../../util/redirectUser.js'; export async function getServerSideProps(context) { //making sure User is the teacher of this classsroom's dashboard const userSession = await getSession(context); if (!userSession) { - context.res.writeHead(302, { Location: '/' }); - context.res.end(); - return {}; + return redirectUser('/error'); } const userEmail = await prisma.User.findMany({ where: { @@ -37,9 +36,7 @@ export async function getServerSideProps(context) { }); if (userEmail[0].id !== classroomTeacherId['classroomTeacherId']) { - context.res.writeHead(302, { Location: '/classes' }); - context.res.end(); - return {}; + return redirectUser('/classes'); } const certificationNumbers = await prisma.classroom.findUnique({ diff --git a/pages/dashboard/v2/[id].js b/pages/dashboard/v2/[id].js index 931bd7c9..658a3244 100644 --- a/pages/dashboard/v2/[id].js +++ b/pages/dashboard/v2/[id].js @@ -14,14 +14,13 @@ import { formattedStudentData, getCompletionTimestamps } from '../../../util/api_proccesor'; +import redirectUser from '../../util/redirectUser.js'; export async function getServerSideProps(context) { //making sure User is the teacher of this classsroom's dashboard const userSession = await getSession(context); if (!userSession) { - context.res.writeHead(302, { Location: '/' }); - context.res.end(); - return {}; + return redirectUser('/error'); } const userEmail = await prisma.User.findMany({ @@ -44,9 +43,7 @@ export async function getServerSideProps(context) { userEmail[0].id == null || userEmail[0].id !== classroomTeacherId['classroomTeacherId'] ) { - context.res.writeHead(302, { Location: '/classes' }); - context.res.end(); - return {}; + return redirectUser('/classes'); } const certificationNumbers = await prisma.classroom.findUnique({ diff --git a/pages/dashboard/v2/details/[id]/[studentEmail].js b/pages/dashboard/v2/details/[id]/[studentEmail].js index 5b567c16..1e2cdc06 100644 --- a/pages/dashboard/v2/details/[id]/[studentEmail].js +++ b/pages/dashboard/v2/details/[id]/[studentEmail].js @@ -5,6 +5,7 @@ import prisma from '../../../../../prisma/prisma'; import Navbar from '../../../../../components/navbar'; import { getSession } from 'next-auth/react'; import React from 'react'; +import redirectUser from '../../util/redirectUser.js'; export async function getServerSideProps(context) { //making sure User is the teacher of this classsroom's dashboard @@ -12,9 +13,7 @@ export async function getServerSideProps(context) { const studentEmail = context.params.studentEmail; if (!userSession) { - context.res.writeHead(302, { Location: '/' }); - context.res.end(); - return {}; + return redirectUser('/error'); } const userEmail = await prisma.User.findMany({ @@ -46,9 +45,7 @@ export async function getServerSideProps(context) { userEmail[0].id == null || userEmail[0].id !== classroomTeacherId['classroomTeacherId'] ) { - context.res.writeHead(302, { Location: '/classes' }); - context.res.end(); - return {}; + return redirectUser('/classes'); } return { diff --git a/util/redirectUser.js b/util/redirectUser.js new file mode 100644 index 00000000..f2c26ebe --- /dev/null +++ b/util/redirectUser.js @@ -0,0 +1,17 @@ +/* + * Function to redirect user, within getServerSideProps functions. + * Leaving it blank will error out + * @param {string} arg1 The intended link to access. examples: '/error', '/admin', '/class', '/'. + * @return {[type]} HTTP request to redirected link + */ + +const redirectUser = destination => { + return { + redirect: { + destination: destination, + permanent: false + } + }; +}; + +export default redirectUser;