From 3bbfed025daf57546e93c06841a59ecb392ca31e Mon Sep 17 00:00:00 2001 From: Corban-Lee Date: Wed, 29 Jan 2025 17:12:39 +0000 Subject: [PATCH] discord authentication --- package.json | 8 ++++ src/app.ts | 28 ++++++++++-- src/client/public/css/home.css | 0 src/client/public/css/main.css | 5 ++- src/client/public/css/tailwind.css | 25 +++++++---- src/client/views/guild/guildHeader.ejs | 17 ++++--- src/client/views/guild/overview.ejs | 8 ++-- src/client/views/login.ejs | 61 ++++++++++++++++++-------- src/client/views/sidebar.ejs | 6 +-- src/server/controllers/auth.ts | 45 +++++++++++++++++++ src/server/controllers/login.ts | 7 --- src/server/middleware/attachUser.ts | 6 +++ src/server/middleware/authenticated.ts | 20 ++++++--- src/server/middleware/flash.ts | 7 +++ src/server/routes/auth.ts | 8 ++++ src/server/routes/login.ts | 6 --- 16 files changed, 193 insertions(+), 64 deletions(-) delete mode 100644 src/client/public/css/home.css create mode 100644 src/server/controllers/auth.ts delete mode 100644 src/server/controllers/login.ts create mode 100644 src/server/middleware/attachUser.ts create mode 100644 src/server/middleware/flash.ts create mode 100644 src/server/routes/auth.ts delete mode 100644 src/server/routes/login.ts diff --git a/package.json b/package.json index 48bcfc6..df84507 100644 --- a/package.json +++ b/package.json @@ -18,19 +18,27 @@ "description": "", "dependencies": { "canvas": "^3.1.0", + "connect-flash": "^0.1.1", "discord.js": "^14.17.3", "dotenv": "^16.4.7", "ejs": "^3.1.10", "ejs-mate": "^4.0.0", "express": "^4.21.2", + "express-session": "^1.18.1", "ncp": "^2.0.0", + "passport": "^0.7.0", + "passport-discord": "^0.1.4", "preline": "^2.7.0", "tsconfig-paths": "^4.2.0" }, "devDependencies": { + "@types/connect-flash": "^0.0.40", "@types/ejs": "^3.1.5", "@types/express": "^5.0.0", + "@types/express-session": "^1.18.1", "@types/node": "^22.10.10", + "@types/passport": "^1.0.17", + "@types/passport-discord": "^0.1.14", "@zerollup/ts-transform-paths": "^1.7.18", "nodemon": "^3.1.9", "tailwindcss": "^3.4.17", diff --git a/src/app.ts b/src/app.ts index 3f28efe..4db9117 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,15 +1,22 @@ import express from "express"; import engine from "ejs-mate"; +import passport from "passport"; +import session from "express-session"; +import flash from "connect-flash"; import dotenv from "dotenv"; dotenv.config(); import "@bot/bot"; +import { setupPassport } from "@server/controllers/auth"; +import { attachUser } from "@server/middleware/attachUser"; +import { flashMiddleware } from "@server/middleware/flash"; +import { ensureAuthenticated } from "@server/middleware/authenticated"; // import routers & middleware import { attachGuilds } from "@server/middleware/attachGuilds"; import { router as homeRouter } from "@server/routes/home"; import { router as guildRouter } from "@server/routes/guild"; -import { router as loginRouter } from "@server/routes/login"; +import { router as authRouter } from "@server/routes/auth"; const app = express(); @@ -20,10 +27,23 @@ app.set("view engine", "ejs"); app.use("/static", express.static("./src/client/public")); app.use("/static/preline.js", express.static("./node_modules/preline/dist/preline.js")); +app.use(session({ + secret: "unsecure-development-secret", + resave: true, + saveUninitialized: true +})); + +setupPassport(passport); +app.use(passport.initialize()); +app.use(passport.session()); + +app.use(flash()); +app.use(flashMiddleware); + // register routers & middleware -app.use("/", attachGuilds, homeRouter); -app.use("/guild", attachGuilds, guildRouter); -app.use("/login", loginRouter); +app.use("/login", authRouter); +app.use("/guild", ensureAuthenticated, attachUser, attachGuilds, guildRouter); +app.use("/", ensureAuthenticated, attachUser, attachGuilds, homeRouter); const PORT = process.env.PORT || 3000; diff --git a/src/client/public/css/home.css b/src/client/public/css/home.css deleted file mode 100644 index e69de29..0000000 diff --git a/src/client/public/css/main.css b/src/client/public/css/main.css index e182eb5..d373a05 100644 --- a/src/client/public/css/main.css +++ b/src/client/public/css/main.css @@ -58,7 +58,7 @@ hs-accordion-toggle w-full text-start flex items-center gap-x-3.5 py-2 px-2.5 te dark:border-neutral-700; } -.sidebar-aside.sidebar-main { +.sidebar-aside.main-sidebar { @apply [--auto-close:lg] lg:block @@ -84,7 +84,8 @@ hs-accordion-toggle w-full text-start flex items-center gap-x-3.5 py-2 px-2.5 te duration-200 lg:duration-100 ease-in - start-64 + start-0 + lg:start-64 z-[59] } diff --git a/src/client/public/css/tailwind.css b/src/client/public/css/tailwind.css index 529f0fd..f827bd2 100644 --- a/src/client/public/css/tailwind.css +++ b/src/client/public/css/tailwind.css @@ -878,6 +878,11 @@ video { height: 46px; } +.size-\[50px\] { + width: 50px; + height: 50px; +} + .\!h-2\.5 { height: 0.625rem !important; } @@ -898,6 +903,10 @@ video { height: 100%; } +.h-screen { + height: 100vh; +} + .max-h-full { max-height: 100%; } @@ -926,6 +935,10 @@ video { width: 260px; } +.w-\[26rem\] { + width: 26rem; +} + .w-\[calc\(100\%-2rem\)\] { width: calc(100% - 2rem); } @@ -1292,11 +1305,6 @@ video { padding-right: 0.5rem; } -.px-2\.5 { - padding-left: 0.625rem; - padding-right: 0.625rem; -} - .px-3 { padding-left: 0.75rem; padding-right: 0.75rem; @@ -1704,7 +1712,7 @@ hs-accordion-toggle w-full text-start flex items-center gap-x-3.5 py-2 px-2.5 te background-color: rgb(38 38 38 / var(--tw-bg-opacity, 1)); } -.sidebar-aside.sidebar-main { +.sidebar-aside.main-sidebar { inset-inline-start: 0px; z-index: 60; --tw-translate-x: -100%; @@ -1717,7 +1725,7 @@ hs-accordion-toggle w-full text-start flex items-center gap-x-3.5 py-2 px-2.5 te } @media (min-width: 1024px) { - .sidebar-aside.sidebar-main { + .sidebar-aside.main-sidebar { inset-inline-end: auto; bottom: 0px; display: block; @@ -1727,7 +1735,7 @@ hs-accordion-toggle w-full text-start flex items-center gap-x-3.5 py-2 px-2.5 te } .sidebar-aside.guild-sidebar { - inset-inline-start: 16rem; + inset-inline-start: 0px; z-index: 59; --tw-translate-x: -100%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); @@ -1742,6 +1750,7 @@ hs-accordion-toggle w-full text-start flex items-center gap-x-3.5 py-2 px-2.5 te .sidebar-aside.guild-sidebar { inset-inline-end: auto; bottom: 0px; + inset-inline-start: 16rem; display: block; transition-duration: 100ms; } diff --git a/src/client/views/guild/guildHeader.ejs b/src/client/views/guild/guildHeader.ejs index 76d3a26..5f27d1d 100644 --- a/src/client/views/guild/guildHeader.ejs +++ b/src/client/views/guild/guildHeader.ejs @@ -1,17 +1,22 @@