Compare commits
7 Commits
Group/role
...
Login-disc
| Author | SHA1 | Date | |
|---|---|---|---|
| ff5371d867 | |||
| f3e35f3f6a | |||
| d7b099ac75 | |||
| a6b521a89c | |||
| ad4d28b5dd | |||
| ac22e36202 | |||
| 3180097aa7 |
@@ -12,7 +12,7 @@ const pool = mariadb.createPool({
|
|||||||
connectionLimit: 5,
|
connectionLimit: 5,
|
||||||
connectTimeout: 10000, // give it more breathing room
|
connectTimeout: 10000, // give it more breathing room
|
||||||
acquireTimeout: 15000,
|
acquireTimeout: 15000,
|
||||||
database: 'ranger_unit_tracker',
|
database: process.env.DB_DATABASE,
|
||||||
ssl: false,
|
ssl: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -46,32 +46,35 @@ passport.use(new OpenIDConnectStrategy({
|
|||||||
|
|
||||||
//lookup existing user
|
//lookup existing user
|
||||||
const existing = await con.query(`SELECT id FROM members WHERE authentik_issuer = ? AND authentik_sub = ? LIMIT 1;`, [issuer, sub]);
|
const existing = await con.query(`SELECT id FROM members WHERE authentik_issuer = ? AND authentik_sub = ? LIMIT 1;`, [issuer, sub]);
|
||||||
let memberId: number;
|
let memberId: number | null = null;
|
||||||
//if member exists
|
//if member exists
|
||||||
if (existing.length > 0) {
|
if (existing.length > 0) {
|
||||||
memberId = existing[0].id;
|
memberId = existing[0].id;
|
||||||
} else {
|
} else {
|
||||||
//otherwise: create account
|
//otherwise: create account mode
|
||||||
const jwt = parseJwt(jwtClaims);
|
const jwt = parseJwt(jwtClaims);
|
||||||
const discordID = jwt.discord.id as number;
|
const discordID = jwt.discord?.id as number;
|
||||||
|
|
||||||
//check if account is available to claim
|
//check if account is available to claim
|
||||||
|
if (discordID)
|
||||||
memberId = await mapDiscordtoID(discordID);
|
memberId = await mapDiscordtoID(discordID);
|
||||||
|
|
||||||
if (memberId === null) {
|
if (discordID && memberId) {
|
||||||
// create new account
|
// claim account
|
||||||
|
console.log("Claiming account");
|
||||||
|
const result = await con.query(
|
||||||
|
`UPDATE members SET authentik_sub = ?, authentik_issuer = ? WHERE id = ?;`,
|
||||||
|
[sub, issuer, memberId]
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
console.log("New Account");
|
||||||
|
// new account
|
||||||
const username = sub.username;
|
const username = sub.username;
|
||||||
const result = await con.query(
|
const result = await con.query(
|
||||||
`INSERT INTO members (name, authentik_sub, authentik_issuer) VALUES (?, ?, ?)`,
|
`INSERT INTO members (name, authentik_sub, authentik_issuer) VALUES (?, ?, ?)`,
|
||||||
[username, sub, issuer]
|
[username, sub, issuer]
|
||||||
)
|
)
|
||||||
memberId = Number(result.insertId);
|
memberId = Number(result.insertId);
|
||||||
} else {
|
|
||||||
// claim existing account
|
|
||||||
const result = await con.query(
|
|
||||||
`UPDATE members SET authentik_sub = ?, authentik_issuer = ? WHERE id = ?;`,
|
|
||||||
[sub, issuer, memberId]
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,11 +118,24 @@ router.get('/callback', (req, res, next) => {
|
|||||||
router.get('/logout', [requireLogin], function (req, res, next) {
|
router.get('/logout', [requireLogin], function (req, res, next) {
|
||||||
req.logout(function (err) {
|
req.logout(function (err) {
|
||||||
if (err) { return next(err); }
|
if (err) { return next(err); }
|
||||||
|
|
||||||
|
req.session.destroy((err) => {
|
||||||
|
if (err) { return next(err); }
|
||||||
|
|
||||||
|
res.clearCookie('connect.sid', {
|
||||||
|
path: '/',
|
||||||
|
domain: process.env.CLIENT_DOMAIN,
|
||||||
|
httpOnly: true,
|
||||||
|
sameSite: 'lax'
|
||||||
|
});
|
||||||
|
|
||||||
var params = {
|
var params = {
|
||||||
client_id: process.env.AUTH_CLIENT_ID,
|
client_id: process.env.AUTH_CLIENT_ID,
|
||||||
returnTo: process.env.CLIENT_URL
|
returnTo: process.env.CLIENT_URL
|
||||||
};
|
};
|
||||||
res.redirect(process.env.AUTH_END_SESSION_URI + '?' + querystring.stringify(params));
|
res.redirect(process.env.AUTH_END_SESSION_URI + '?' + querystring.stringify(params));
|
||||||
|
|
||||||
|
})
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ export async function getUserRoles(userID: number): Promise<Role[]> {
|
|||||||
const sql = `SELECT r.id, r.name
|
const sql = `SELECT r.id, r.name
|
||||||
FROM members_roles mr
|
FROM members_roles mr
|
||||||
INNER JOIN roles r ON mr.role_id = r.id
|
INNER JOIN roles r ON mr.role_id = r.id
|
||||||
WHERE mr.member_id = 190;`;
|
WHERE mr.member_id = ?;`;
|
||||||
|
|
||||||
return await pool.query(sql, [userID]);
|
return await pool.query(sql, [userID]);
|
||||||
}
|
}
|
||||||
@@ -197,7 +197,7 @@ defineExpose({ forceReload })
|
|||||||
<DropdownMenuItem v-if="activeEvent.cancelled" @click="setCancel(false)">
|
<DropdownMenuItem v-if="activeEvent.cancelled" @click="setCancel(false)">
|
||||||
Un-Cancel
|
Un-Cancel
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
<DropdownMenuItem v-else @click="setCancel(true)">
|
<DropdownMenuItem v-else @click="setCancel(true)" class="text-destructive">
|
||||||
Cancel
|
Cancel
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
</DropdownMenuContent>
|
</DropdownMenuContent>
|
||||||
|
|||||||
Reference in New Issue
Block a user