Skip to content

Commit 0110653

Browse files
committed
add possibility to not use auth
1 parent 2c3a63b commit 0110653

3 files changed

Lines changed: 130 additions & 89 deletions

File tree

src/auth.js

Lines changed: 46 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,7 @@ async function fetchUserInfo(accessToken) {
4141
}
4242
}
4343

44-
function Init() {
45-
redirectURL = new URL(ENV.redirectURL)
46-
44+
function registerOauth() {
4745
passport.use(
4846
new OAuth2Strategy(
4947
{
@@ -83,65 +81,9 @@ function Init() {
8381
passport.serializeUser((user, done) => done(null, user))
8482
passport.deserializeUser((user, done) => done(null, user))
8583

86-
router.use(
87-
session({
88-
store: new RedisStore({ client: redisClient }),
89-
secret: ENV.sessionKey,
90-
resave: false,
91-
saveUninitialized: false,
92-
cookie: {
93-
domain: redirectURL.hostname,
94-
secure: true,
95-
sameSite: "lax",
96-
maxAge: 1000 * 60 * 60,
97-
},
98-
})
99-
)
100-
10184
router.use(passport.initialize())
10285
router.use(passport.session())
10386

104-
router.get("/", async (req, res) => {
105-
if (req.query.session_id) {
106-
res.cookie("session_id", req.query.session_id, {
107-
domain: redirectURL.hostname,
108-
httpOnly: true,
109-
secure: true,
110-
sameSite: "lax",
111-
maxAge: 1000 * 60 * 60,
112-
})
113-
}
114-
115-
if (req.hostname !== redirectURL.hostname) {
116-
const originalHost = req.headers["x-forwarded-host"] || req.get("host")
117-
const originalProto = req.headers["x-forwarded-proto"] || req.protocol
118-
const originalUri = req.headers["x-forwarded-uri"] || req.originalUrl
119-
120-
const originalUrl = `${originalProto}://${originalHost}${originalUri}`
121-
122-
const sessionID = uuidv4()
123-
124-
await WriteToCache(`service=${sessionID}`, originalUrl)
125-
126-
return res.redirect(`${redirectURL.origin}/?session_id=${sessionID}`)
127-
}
128-
129-
if (!req.isAuthenticated()) {
130-
return res.redirect("/auth")
131-
}
132-
133-
const serviceUrl = await GetFromCache(`service=${req.query.session_id}`)
134-
135-
res.render("home", {
136-
user: {
137-
name: req.user.username,
138-
locale: req.user.locale,
139-
email: req.user.email,
140-
},
141-
serviceUrl: serviceUrl,
142-
})
143-
})
144-
14587
router.get("/auth", passport.authenticate("oauth2"))
14688

14789
router.get("/auth/callback", passport.authenticate("oauth2"), (req, res) =>
@@ -157,8 +99,52 @@ function Init() {
15799
})
158100
}
159101

102+
function registerFakeAuth() {
103+
router.get("/auth", (req, res) => {
104+
if (!req.session.user) {
105+
req.session.user = {
106+
username: "user",
107+
email: "",
108+
locale: "",
109+
accessToken: null,
110+
}
111+
}
112+
113+
req.user = req.session.user
114+
115+
req.isAuthenticated = () => true
116+
})
117+
118+
router.get("/logout", (req, res) => {
119+
if (!req.isAuthenticated()) return
120+
121+
req.session.destroy()
122+
})
123+
}
124+
160125
export function Router() {
161-
Init()
126+
redirectURL = new URL(ENV.redirectURL)
127+
128+
router.use(
129+
session({
130+
store: new RedisStore({ client: redisClient }),
131+
secret: ENV.sessionKey,
132+
resave: false,
133+
saveUninitialized: false,
134+
cookie: {
135+
domain: redirectURL.hostname,
136+
secure: true,
137+
sameSite: "lax",
138+
maxAge: 1000 * 60 * 60,
139+
},
140+
})
141+
)
142+
143+
if (ENV.useOauth) {
144+
registerOauth()
145+
} else {
146+
registerFakeAuth()
147+
}
162148

163149
return router
164150
}

src/env.js

Lines changed: 43 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ export const ENV = {
66
configPath: "/app/config/mapping.json",
77
port: "6789",
88
logLevel: "info",
9+
910
exposeLogs: true,
11+
useOauth: true,
1012

1113
redisHost: "redis",
1214
redisPort: "6379",
@@ -51,7 +53,11 @@ export function Load() {
5153

5254
ENV.woldQueryPattern = process.env.WOLD_QUERY_PATTERN || ""
5355

54-
ENV.exposeLogs = process.env.EXPOSE_LOGS || ENV.exposeLogs
56+
const exposeLogs = process.env.EXPOSE_LOGS
57+
58+
if (exposeLogs) {
59+
ENV.exposeLogs = exposeLogs.trim().toLowerCase() == "true"
60+
}
5561

5662
ENV.wolURL = process.env.WOL_URL || ""
5763

@@ -68,37 +74,45 @@ export function Load() {
6874
logger.fatal("No session key provided")
6975
}
7076

71-
ENV.authorizationURL = process.env.AUTHORIZATION_URL || ""
72-
ENV.resourceURL = process.env.RESOURCE_URL || ""
73-
ENV.logoutURL = process.env.LOGOUT_URL || ""
74-
ENV.tokenURL = process.env.TOKEN_URL || ""
75-
ENV.redirectURL = process.env.REDIRECT_URL || ""
77+
const useOauth = process.env.USE_OAUTH
7678

77-
if (!ENV.authorizationURL) {
78-
logger.fatal("No authorization URL set")
79-
}
80-
if (!ENV.resourceURL) {
81-
logger.fatal("No resource URL set")
82-
}
83-
if (!ENV.logoutURL) {
84-
logger.fatal("No logout URL set")
85-
}
86-
if (!ENV.tokenURL) {
87-
logger.fatal("No token URL set")
88-
}
89-
if (!ENV.redirectURL) {
90-
logger.fatal("No redirect URL set")
79+
if (useOauth) {
80+
ENV.useOauth = useOauth.trim().toLowerCase() == "true"
9181
}
9282

93-
ENV.clientID = process.env.CLIENT_ID || ""
94-
ENV.clientSecret = process.env.CLIENT_SECRET || ""
95-
ENV.scope = process.env.SCOPE || ENV.scope
96-
97-
if (!ENV.clientID) {
98-
logger.fatal("No client id provided")
99-
}
100-
if (!ENV.clientSecret) {
101-
logger.fatal("No client secret provided")
83+
if (ENV.useOauth) {
84+
ENV.authorizationURL = process.env.AUTHORIZATION_URL || ""
85+
ENV.resourceURL = process.env.RESOURCE_URL || ""
86+
ENV.logoutURL = process.env.LOGOUT_URL || ""
87+
ENV.tokenURL = process.env.TOKEN_URL || ""
88+
ENV.redirectURL = process.env.REDIRECT_URL || ""
89+
90+
if (!ENV.authorizationURL) {
91+
logger.fatal("No authorization URL set")
92+
}
93+
if (!ENV.resourceURL) {
94+
logger.fatal("No resource URL set")
95+
}
96+
if (!ENV.logoutURL) {
97+
logger.fatal("No logout URL set")
98+
}
99+
if (!ENV.tokenURL) {
100+
logger.fatal("No token URL set")
101+
}
102+
if (!ENV.redirectURL) {
103+
logger.fatal("No redirect URL set")
104+
}
105+
106+
ENV.clientID = process.env.CLIENT_ID || ""
107+
ENV.clientSecret = process.env.CLIENT_SECRET || ""
108+
ENV.scope = process.env.SCOPE || ENV.scope
109+
110+
if (!ENV.clientID) {
111+
logger.fatal("No client id provided")
112+
}
113+
if (!ENV.clientSecret) {
114+
logger.fatal("No client secret provided")
115+
}
102116
}
103117

104118
logger.info("Loaded Environment")

src/wol.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,4 +440,45 @@ export function Router() {
440440
return router
441441
}
442442

443+
router.get("/", async (req, res) => {
444+
if (req.query.session_id) {
445+
res.cookie("session_id", req.query.session_id, {
446+
domain: redirectURL.hostname,
447+
httpOnly: true,
448+
secure: true,
449+
sameSite: "lax",
450+
maxAge: 1000 * 60 * 60,
451+
})
452+
}
453+
454+
if (req.hostname !== redirectURL.hostname) {
455+
const originalHost = req.headers["x-forwarded-host"] || req.get("host")
456+
const originalProto = req.headers["x-forwarded-proto"] || req.protocol
457+
const originalUri = req.headers["x-forwarded-uri"] || req.originalUrl
458+
459+
const originalUrl = `${originalProto}://${originalHost}${originalUri}`
460+
461+
const sessionID = uuidv4()
462+
463+
await WriteToCache(`service=${sessionID}`, originalUrl)
464+
465+
return res.redirect(`${redirectURL.origin}/?session_id=${sessionID}`)
466+
}
467+
468+
if (!req.isAuthenticated()) {
469+
return res.redirect("/auth")
470+
}
471+
472+
const serviceUrl = await GetFromCache(`service=${req.query.session_id}`)
473+
474+
res.render("home", {
475+
user: {
476+
name: req.user.username,
477+
locale: req.user.locale,
478+
email: req.user.email,
479+
},
480+
serviceUrl: serviceUrl,
481+
})
482+
})
483+
443484
router.get("/start", async (req, res) => await startProcessing(req, res))

0 commit comments

Comments
 (0)