mirror of
https://github.com/PretendoNetwork/website.git
synced 2026-09-26 10:36:39 -05:00
Added/remove Discord roles when connecting/removing Discord account
This commit is contained in:
@@ -147,6 +147,7 @@ router.get('/logout', async(_request, response) => {
|
||||
});
|
||||
|
||||
router.get('/connect/discord', requireLoginMiddleware, async (request, response) => {
|
||||
const { pnid } = request;
|
||||
let tokens;
|
||||
try {
|
||||
// Attempt to get OAuth2 tokens
|
||||
@@ -166,8 +167,52 @@ router.get('/connect/discord', requireLoginMiddleware, async (request, response)
|
||||
try {
|
||||
await util.updateDiscordConnection(discordUser, request, response);
|
||||
|
||||
const priceId = pnid.get('connections.stripe.price_id');
|
||||
|
||||
if (priceId && priceId.trim() !== '') {
|
||||
const price = await stripe.prices.retrieve(priceId);
|
||||
const product = await stripe.products.retrieve(price.product);
|
||||
const discordRoleId = product.metadata.discord_role_id;
|
||||
const discordId = discordUser.id;
|
||||
|
||||
await util.assignDiscordMemberSupporterRole(discordId, discordRoleId);
|
||||
|
||||
if (product.metadata.beta === 'true') {
|
||||
await util.assignDiscordMemberTesterRole(discordId);
|
||||
}
|
||||
}
|
||||
|
||||
response.cookie('success_message', 'Discord account linked successfully', { domain: '.pretendo.network' });
|
||||
response.redirect('/account');
|
||||
return response.redirect('/account');
|
||||
} catch (error) {
|
||||
response.cookie('error_message', error.message, { domain: '.pretendo.network' });
|
||||
return response.redirect('/account');
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/remove/discord', requireLoginMiddleware, async (request, response) => {
|
||||
const { account, pnid } = request;
|
||||
|
||||
try {
|
||||
await util.removeDiscordConnection(request, response);
|
||||
|
||||
const priceId = pnid.get('connections.stripe.price_id');
|
||||
|
||||
if (priceId && priceId.trim() !== '') {
|
||||
const price = await stripe.prices.retrieve(priceId);
|
||||
const product = await stripe.products.retrieve(price.product);
|
||||
const discordRoleId = product.metadata.discord_role_id;
|
||||
const discordId = account.connections.discord.id;
|
||||
|
||||
await util.removeDiscordMemberSupporterRole(discordId, discordRoleId);
|
||||
|
||||
if (product.metadata.beta === 'true') {
|
||||
await util.removeDiscordMemberTesterRole(discordId);
|
||||
}
|
||||
}
|
||||
|
||||
response.cookie('success_message', 'Discord account removed successfully', { domain: '.pretendo.network' });
|
||||
return response.redirect('/account');
|
||||
} catch (error) {
|
||||
response.cookie('error_message', error.message, { domain: '.pretendo.network' });
|
||||
return response.redirect('/account');
|
||||
|
||||
23
src/util.js
23
src/util.js
@@ -188,6 +188,22 @@ async function updateDiscordConnection(discordUser, request, response, fromRetry
|
||||
}
|
||||
}
|
||||
|
||||
async function removeDiscordConnection(request, response, fromRetry = false) {
|
||||
const apiResponse = await apiDeleteRequest('/v1/connections/remove/discord', {
|
||||
'Authorization': `${request.cookies.token_type} ${request.cookies.access_token}`
|
||||
});
|
||||
|
||||
if (apiResponse.statusCode !== 200 && fromRetry === true) {
|
||||
// TODO: Error message
|
||||
throw new Error('Bad');
|
||||
}
|
||||
|
||||
if (apiResponse.statusCode !== 200) {
|
||||
await refreshLogin(request, response);
|
||||
await removeDiscordConnection(request, response, true);
|
||||
}
|
||||
}
|
||||
|
||||
function nintendoPasswordHash(password, pid) {
|
||||
const pidBuffer = Buffer.alloc(4);
|
||||
pidBuffer.writeUInt32LE(pid);
|
||||
@@ -444,6 +460,11 @@ module.exports = {
|
||||
refreshLogin,
|
||||
getUserAccountData,
|
||||
updateDiscordConnection,
|
||||
removeDiscordConnection,
|
||||
nintendoPasswordHash,
|
||||
handleStripeEvent
|
||||
handleStripeEvent,
|
||||
assignDiscordMemberSupporterRole,
|
||||
assignDiscordMemberTesterRole,
|
||||
removeDiscordMemberSupporterRole,
|
||||
removeDiscordMemberTesterRole
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user