diff --git a/package-lock.json b/package-lock.json index 63ce66b..8e0c829 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1292,16 +1292,6 @@ "is-property": "^1.0.2" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -2565,16 +2555,6 @@ "object-assign": "^4.1.1" } }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/seq-queue": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", @@ -3780,13 +3760,6 @@ "is-property": "^1.0.2" } }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "peer": true - }, "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -4584,13 +4557,6 @@ "object-assign": "^4.1.1" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true - }, "seq-queue": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", diff --git a/pages/admin.tsx b/pages/admin.tsx index e3a1c9c..f8048c0 100644 --- a/pages/admin.tsx +++ b/pages/admin.tsx @@ -1,13 +1,15 @@ -import { getSession, useSession } from 'next-auth/react'; +import { useSession } from 'next-auth/react'; import { getAllSubmissions } from '../server/challengeFunctions'; import { getAllLogs } from '../server/logging'; import styles from '../styles/admin.module.scss'; import dayjs from 'dayjs'; -import { useEffect, useState } from 'react'; -import { Col, Row, Form, Button, Toast } from 'react-bootstrap'; +import { useState } from 'react'; +import { Col, Row, Form, Button } from 'react-bootstrap'; import Log from '../components/log'; import Link from 'next/link'; import { useRouter } from 'next/router'; +import { unstable_getServerSession } from 'next-auth'; +import { authOptions } from './api/auth/[...nextauth]'; export default function Admin({ submissions, logs }) { const { data: session, status } = useSession(); @@ -146,8 +148,8 @@ export default function Admin({ submissions, logs }) { } export async function getServerSideProps(context) { - const session = await getSession(context); - if (!session) return { props: { submissions: [], logs: [] } }; + const session = await unstable_getServerSession(context.req, context.res, authOptions); + if (session?.user.role !== "ADMIN") return { notFound: true }; let submissions = await getAllSubmissions(); if (!submissions) submissions = []; let logs = await getAllLogs(); diff --git a/pages/api/auth/[...nextauth].ts b/pages/api/auth/[...nextauth].ts index e64e7bf..d28f071 100644 --- a/pages/api/auth/[...nextauth].ts +++ b/pages/api/auth/[...nextauth].ts @@ -6,7 +6,7 @@ import GithubProvider from 'next-auth/providers/github'; import GoogleProvider from 'next-auth/providers/google'; import DiscordProvider from 'next-auth/providers/discord'; -export default NextAuth({ +export const authOptions = { adapter: PrismaAdapter(prisma), providers: [ EmailProvider({ @@ -69,5 +69,6 @@ export default NextAuth({ }, }, secret: process.env.JWT_SECRET, -}); +}; +export default NextAuth(authOptions); diff --git a/pages/api/changeUsername.ts b/pages/api/changeUsername.ts index e1cb1e4..5a3f56e 100644 --- a/pages/api/changeUsername.ts +++ b/pages/api/changeUsername.ts @@ -1,9 +1,10 @@ -import { getSession } from 'next-auth/react'; +import { unstable_getServerSession } from 'next-auth'; import { changeUsername } from '../../server/userFunctions'; +import { authOptions } from './auth/[...nextauth]'; export default async function submitUsername(req, res) { if (req.method === 'POST') { - const session = await getSession({ req }); + const session = await unstable_getServerSession(req, res, authOptions); if (session) { // Signed in let userId = session.user.id; @@ -24,7 +25,7 @@ export default async function submitUsername(req, res) { } //Change Username - let result = await changeUsername(userId, username); + const result = await changeUsername(userId, username); res.status(200).json({ result: result }); } else { // Not Signed in diff --git a/pages/api/deleteLogs.ts b/pages/api/deleteLogs.ts index dd71d47..b649300 100644 --- a/pages/api/deleteLogs.ts +++ b/pages/api/deleteLogs.ts @@ -1,17 +1,18 @@ -import { getSession } from 'next-auth/react'; +import { unstable_getServerSession } from 'next-auth'; import { clearAllLogs } from '../../server/logging'; +import { authOptions } from './auth/[...nextauth]'; export default async function deleteLogs(req, res) { if (req.method === 'POST') { - const session = await getSession({ req }); + const session = await unstable_getServerSession(req, res, authOptions); - if (session && session.user.role !== 'USER') { + if (session && session.user.role !== 'ADMIN') { res.status(401).json({ error: 'Unauthorized' }); return; } //Delete user - let result = await clearAllLogs(); + const result = await clearAllLogs(); res.status(200).json({ result: 'success' });; return; } else { diff --git a/pages/api/deleteUser.ts b/pages/api/deleteUser.ts index 83f7e7b..9c90740 100644 --- a/pages/api/deleteUser.ts +++ b/pages/api/deleteUser.ts @@ -1,9 +1,10 @@ -import { getSession } from 'next-auth/react'; +import { unstable_getServerSession } from 'next-auth'; import { deleteAccount } from '../../server/userFunctions'; +import { authOptions } from './auth/[...nextauth]'; export default async function deleteUser(req, res) { if (req.method === 'POST') { - const session = await getSession({ req }); + const session = await unstable_getServerSession(req, res, authOptions); if (session) { // Signed in let userId = session.user.id; diff --git a/pages/api/extendTimeInstance.ts b/pages/api/extendTimeInstance.ts index 4bcc36b..0bca29a 100644 --- a/pages/api/extendTimeInstance.ts +++ b/pages/api/extendTimeInstance.ts @@ -1,9 +1,10 @@ -import { getSession } from 'next-auth/react'; +import { unstable_getServerSession } from 'next-auth'; import { userEnabled } from '../../server/userFunctions'; +import { authOptions } from './auth/[...nextauth]'; export default async function extendTimeInstance(req, res) { if (req.method === 'POST') { - const session = await getSession({ req }); + const session = await unstable_getServerSession(req, res, authOptions); if (session) { // Signed in let userId = session.user.id; diff --git a/pages/api/getTimeLeft.ts b/pages/api/getTimeLeft.ts index bd29c7c..252b617 100644 --- a/pages/api/getTimeLeft.ts +++ b/pages/api/getTimeLeft.ts @@ -1,9 +1,10 @@ -import { getSession } from 'next-auth/react'; +import { unstable_getServerSession } from 'next-auth'; import { userEnabled } from '../../server/userFunctions'; +import { authOptions } from './auth/[...nextauth]'; export default async function getTimeLeft(req, res) { if (req.method === 'POST') { - const session = await getSession({ req }); + const session = await unstable_getServerSession(req, res, authOptions); if (session) { // Signed in let userId = session.user.id; diff --git a/pages/api/startInstance.ts b/pages/api/startInstance.ts index 6db8541..ae73702 100644 --- a/pages/api/startInstance.ts +++ b/pages/api/startInstance.ts @@ -1,10 +1,11 @@ +import { unstable_getServerSession } from 'next-auth'; import { getSession } from 'next-auth/react'; import { validateChallengeHash } from '../../server/challengeFunctions'; import { userEnabled } from '../../server/userFunctions'; export default async function startInstance(req, res) { if (req.method === 'POST') { - const session = await getSession({ req }); + const session = await unstable_getServerSession(req, res, authOptions); if (session) { // Signed in let userId = session.user.id; diff --git a/pages/api/stopInstance.ts b/pages/api/stopInstance.ts index dd92a1a..5756803 100644 --- a/pages/api/stopInstance.ts +++ b/pages/api/stopInstance.ts @@ -1,9 +1,10 @@ -import { getSession } from 'next-auth/react'; +import { unstable_getServerSession } from 'next-auth'; import { userEnabled } from '../../server/userFunctions'; +import { authOptions } from './auth/[...nextauth]'; export default async function stopInstance(req, res) { if (req.method === 'POST') { - const session = await getSession({ req }); + const session = await unstable_getServerSession(req, res, authOptions); if (session) { // Signed in let userId = session.user.id; diff --git a/pages/api/submitFlag.ts b/pages/api/submitFlag.ts index 6c98fc9..b77e239 100644 --- a/pages/api/submitFlag.ts +++ b/pages/api/submitFlag.ts @@ -1,10 +1,11 @@ -import { getSession } from "next-auth/react" +import { unstable_getServerSession } from "next-auth"; import { getChallengeById, getLastSubmission, submitFlag } from '../../server/challengeFunctions'; import { userEnabled } from "../../server/userFunctions"; +import { authOptions } from "./auth/[...nextauth]"; export default async function submit(req, res) { if (req.method === 'POST') { - const session = await getSession({ req }) + const session = await unstable_getServerSession(req, res, authOptions); if (session) { // Signed in let userId = session.user.id; diff --git a/pages/challenges.tsx b/pages/challenges.tsx index eb55806..1abe89f 100644 --- a/pages/challenges.tsx +++ b/pages/challenges.tsx @@ -1,4 +1,5 @@ -import { getSession, useSession } from 'next-auth/react'; +import { authOptions } from "./api/auth/[...nextauth]" +import { useSession } from 'next-auth/react'; import { useState } from 'react'; import { Col, Row } from 'react-bootstrap'; import Challenge from '../components/challenge'; @@ -9,6 +10,7 @@ import { } from '../server/challengeFunctions'; import Filter from '../components/multiSelect'; import Unauthorized from '../components/unauthorized'; +import { unstable_getServerSession } from 'next-auth'; export default function Challenges({ challengeData, @@ -136,7 +138,7 @@ export default function Challenges({ // Get challenges export async function getServerSideProps(context) { - const session = await getSession(context); + const session = await unstable_getServerSession(context.req, context.res, authOptions); if (!session) return { props: { challengeData: [], solvedIDs: [] } }; const challengeData = await getAllChallenges(); const userSolved = await getChallengesSolved(session.user.id); diff --git a/pages/profile.tsx b/pages/profile.tsx index 3441a7a..a0dbcc5 100644 --- a/pages/profile.tsx +++ b/pages/profile.tsx @@ -1,4 +1,4 @@ -import { getSession, signOut, useSession } from 'next-auth/react'; +import { signOut, useSession } from 'next-auth/react'; import { useState } from 'react'; import { Button, Row, Col } from 'react-bootstrap'; import ModalForm from '../components/modalForm'; @@ -9,6 +9,8 @@ import styles from '../styles/profile.module.scss'; import Router from 'next/router'; import { getChallengesSolved } from '../server/challengeFunctions'; import Unauthorized from '../components/unauthorized'; +import { unstable_getServerSession } from 'next-auth'; +import { authOptions } from './api/auth/[...nextauth]'; export default function Profile({ challengeSolved }) { const { data: session, status } = useSession(); @@ -157,7 +159,7 @@ export default function Profile({ challengeSolved }) { } export async function getServerSideProps(context) { - const session = await getSession(context); + const session = await unstable_getServerSession(context.req, context.res, authOptions); if (!session) return { props: { challengeSolved: [] } }; let challengeSolved = await getChallengesSolved(session.user.id); if (!challengeSolved) {