portal/app.js

61 lines
1.9 KiB
JavaScript

require("dotenv").config();
const express = require("express");
const session = require("express-session");
const passport = require("passport");
const { Strategy } = require("passport-openidconnect");
const path = require("path");
const app = express();
app.set("view engine", "ejs");
app.set("views", path.join(__dirname, "views"));
app.use(express.static(path.join(__dirname, "public")));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(session({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false,
cookie: { secure: false, httpOnly: true, maxAge: 8 * 60 * 60 * 1000 }
}));
app.use(passport.initialize());
app.use(passport.session());
passport.use("oidc", new Strategy({
issuer: process.env.OIDC_ISSUER,
authorizationURL: process.env.OIDC_ISSUER + "/protocol/openid-connect/auth",
tokenURL: process.env.OIDC_ISSUER + "/protocol/openid-connect/token",
userInfoURL: process.env.OIDC_ISSUER + "/protocol/openid-connect/userinfo",
clientID: process.env.OIDC_CLIENT_ID,
clientSecret: process.env.OIDC_CLIENT_SECRET,
callbackURL: process.env.OIDC_CALLBACK_URL,
scope: "openid email profile",
passReqToCallback: false,
}, (issuer, profile, done) => {
return done(null, {
username: profile.id,
name: profile.displayName,
email: profile.emails && profile.emails[0] && profile.emails[0].value,
groups: [],
});
}));
passport.serializeUser((user, done) => done(null, user));
passport.deserializeUser((user, done) => done(null, user));
app.use("/auth", require("./routes/auth"));
app.use("/dashboard", require("./routes/dashboard"));
app.get("/", (req, res) => {
if (req.isAuthenticated()) return res.redirect("/dashboard");
res.redirect("/auth/login");
});
app.get("/health", (req, res) => res.json({ status: "ok" }));
app.listen(process.env.PORT, () => {
console.log("Portal running on port " + process.env.PORT);
});