diff --git a/modules/ApiFunctions/Helpers.ts b/modules/ApiFunctions/Helpers.ts index 55dcce8..b066dbe 100644 --- a/modules/ApiFunctions/Helpers.ts +++ b/modules/ApiFunctions/Helpers.ts @@ -1,5 +1,24 @@ +import jwt from "jsonwebtoken"; + export function jsonify(obj) { return JSON.stringify(obj, (key, value) => typeof value === "bigint" ? Number(value) : value ); } + +export function authenticateToken(req, res, next) { + const authHeader = req.headers["authorization"]; + const token = authHeader && authHeader.split(" ")[1]; + + if (token == null) return res.sendStatus(401); + + jwt.verify(token, process.env.TOKEN as string, (err: any, user: any) => { + console.log(err); + + if (err) return res.sendStatus(403); + + req.user = user; + + next(); + }); +} diff --git a/modules/ApiFunctions/MemberEndPoints.ts b/modules/ApiFunctions/MemberEndPoints.ts new file mode 100644 index 0000000..35f6620 --- /dev/null +++ b/modules/ApiFunctions/MemberEndPoints.ts @@ -0,0 +1,39 @@ +import { jsonify, authenticateToken } from "./Helpers"; + +export function memberEndPoints(app) { + app.post("/profile", authenticateToken, function (req, res) { + res.send(jsonify(req.user)); + }); + + //getLibrary for user + app.post("/library", authenticateToken, function (req, res) { + let user = req.user; + global.client.prisma.rewardItem + .findMany({ + where: { + RedeemedBy: user.id, + }, + select: { + RewardItemID: true, + RedemptionTimeStamp: true, + Reward: { + select: { + Title: true, + }, + }, + RedemptionText: true, + }, + }) + .then((rawLibrary) => { + let library = rawLibrary.map((item) => { + return { + game: item.Reward.Title, + orderId: item.RewardItemID, + redemptionText: item.RedemptionText, + timestamp: item.RedemptionTimeStamp, + }; + }); + return res.send(jsonify(library)); + }); + }); +} diff --git a/modules/ApiFunctions/ViewModels/libraryitem.ts b/modules/ApiFunctions/ViewModels/libraryitem.ts index 6a80d70..6be6d20 100644 --- a/modules/ApiFunctions/ViewModels/libraryitem.ts +++ b/modules/ApiFunctions/ViewModels/libraryitem.ts @@ -1,6 +1,6 @@ -export class LibraryItem { - public orderId: string; - public game: string; - public timestamp: string; - public redemptionText: string; +export interface LibraryItem { + orderId: string; + game: string; + timestamp: string; + redemptionText: string; } diff --git a/modules/WebApi.ts b/modules/WebApi.ts index 67f9136..025b4b9 100644 --- a/modules/WebApi.ts +++ b/modules/WebApi.ts @@ -1,10 +1,10 @@ import express from "express"; import cors from "cors"; import passport from "passport"; -import session from "express-session"; import jwt from "jsonwebtoken"; import { legacyEndPoints } from "./ApiFunctions/LegacyEndPoints"; import { jsonify } from "./ApiFunctions/Helpers"; +import { memberEndPoints } from "./ApiFunctions/MemberEndPoints"; const DiscordStrategy = require("passport-discord").Strategy; const app = express(); const prompt = "consent"; @@ -63,12 +63,8 @@ export class WebApi { res.send(token); } // auth success ); - app.post("/profile", authenticateToken, function (req, res) { - res.send(jsonify(req.user)); - }); - - app.get("/test", function (req, res) {}); + memberEndPoints(app); legacyEndPoints(app); app.get("/", function (req, res) { res.send("KRAKEN API"); @@ -92,22 +88,3 @@ async function logDiscordLogin(profile) { }); console.log(`Logged discord login: ${profile.username} ${result.Id}`); } - -const jwt = require("jsonwebtoken"); - -function authenticateToken(req, res, next) { - const authHeader = req.headers["authorization"]; - const token = authHeader && authHeader.split(" ")[1]; - - if (token == null) return res.sendStatus(401); - - jwt.verify(token, process.env.TOKEN as string, (err: any, user: any) => { - console.log(err); - - if (err) return res.sendStatus(403); - - req.user = user; - - next(); - }); -} diff --git a/package-lock.json b/package-lock.json index ee08daf..96ec4b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,14 +16,11 @@ "cors": "^2.8.5", "discord.js": "^14.8.0", "express": "^4.17.1", - "express-session": "^1.17.3", "jsonwebtoken": "^9.0.0", "node-cron": "^3.0.0", "openai": "^3.2.1", "passport": "^0.6.0", "passport-discord": "^0.1.4", - "passport-jwt": "^4.0.1", - "passport-oauth2-refresh": "^2.1.0", "typescript": "^5.0.2" }, "devDependencies": { @@ -922,32 +919,6 @@ "node": ">= 0.10.0" } }, - "node_modules/express-session": { - "version": "1.17.3", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", - "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", - "dependencies": { - "cookie": "0.4.2", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-headers": "~1.0.2", - "parseurl": "~1.3.3", - "safe-buffer": "5.2.1", - "uid-safe": "~2.1.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/express-session/node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1363,14 +1334,6 @@ "node": ">= 0.8" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1424,15 +1387,6 @@ "passport-oauth2": "^1.5.0" } }, - "node_modules/passport-jwt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.1.tgz", - "integrity": "sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==", - "dependencies": { - "jsonwebtoken": "^9.0.0", - "passport-strategy": "^1.0.0" - } - }, "node_modules/passport-oauth2": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.7.0.tgz", @@ -1452,14 +1406,6 @@ "url": "https://github.com/sponsors/jaredhanson" } }, - "node_modules/passport-oauth2-refresh": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/passport-oauth2-refresh/-/passport-oauth2-refresh-2.1.0.tgz", - "integrity": "sha512-4ML7ooCESCqiTgdDBzNUFTBcPR8zQq9iM6eppEUGMMvLdsjqRL93jKwWm4Az3OJcI+Q2eIVyI8sVRcPFvxcF/A==", - "engines": { - "node": ">=10" - } - }, "node_modules/passport-strategy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", @@ -1563,14 +1509,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/random-bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -1904,17 +1842,6 @@ "node": ">=12.20" } }, - "node_modules/uid-safe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", - "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", - "dependencies": { - "random-bytes": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/uid2": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", diff --git a/package.json b/package.json index 2da23cd..5f29a3e 100644 --- a/package.json +++ b/package.json @@ -19,14 +19,11 @@ "cors": "^2.8.5", "discord.js": "^14.8.0", "express": "^4.17.1", - "express-session": "^1.17.3", "jsonwebtoken": "^9.0.0", "node-cron": "^3.0.0", "openai": "^3.2.1", "passport": "^0.6.0", "passport-discord": "^0.1.4", - "passport-jwt": "^4.0.1", - "passport-oauth2-refresh": "^2.1.0", "typescript": "^5.0.2" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index 43631b1..01b1028 100644 --- a/yarn.lock +++ b/yarn.lock @@ -430,11 +430,6 @@ cookie-signature@1.0.6: resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.4.2: - version "0.4.2" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - cookie@0.5.0: version "0.5.0" resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" @@ -465,7 +460,7 @@ delayed-stream@~1.0.0: resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -depd@~2.0.0, depd@2.0.0: +depd@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== @@ -560,20 +555,6 @@ event-target-shim@^5.0.0: resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== -express-session@^1.17.3: - version "1.17.3" - resolved "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz" - integrity sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw== - dependencies: - cookie "0.4.2" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~2.0.0" - on-headers "~1.0.2" - parseurl "~1.3.3" - safe-buffer "5.2.1" - uid-safe "~2.1.5" - express@^4.17.1: version "4.18.2" resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz" @@ -863,11 +844,6 @@ on-finished@2.4.1: dependencies: ee-first "1.1.1" -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" @@ -895,19 +871,6 @@ passport-discord@^0.1.4: dependencies: passport-oauth2 "^1.5.0" -passport-jwt@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.1.tgz" - integrity sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ== - dependencies: - jsonwebtoken "^9.0.0" - passport-strategy "^1.0.0" - -passport-oauth2-refresh@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/passport-oauth2-refresh/-/passport-oauth2-refresh-2.1.0.tgz" - integrity sha512-4ML7ooCESCqiTgdDBzNUFTBcPR8zQq9iM6eppEUGMMvLdsjqRL93jKwWm4Az3OJcI+Q2eIVyI8sVRcPFvxcF/A== - passport-oauth2@^1.5.0: version "1.7.0" resolved "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.7.0.tgz" @@ -919,7 +882,7 @@ passport-oauth2@^1.5.0: uid2 "0.0.x" utils-merge "1.x.x" -passport-strategy@^1.0.0, passport-strategy@1.x.x: +passport-strategy@1.x.x: version "1.0.0" resolved "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz" integrity sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA== @@ -983,11 +946,6 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" -random-bytes@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz" - integrity sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ== - range-parser@~1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" @@ -1176,13 +1134,6 @@ typescript@^5.0.2, typescript@>=2.7: resolved "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz" integrity sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw== -uid-safe@~2.1.5: - version "2.1.5" - resolved "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz" - integrity sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA== - dependencies: - random-bytes "~1.0.0" - uid2@0.0.x: version "0.0.4" resolved "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz"