@ -6,6 +6,18 @@
const DiscordStrategy = require ( 'passport-discord' ) . Strategy
const DiscordStrategy = require ( 'passport-discord' ) . Strategy
const _ = require ( 'lodash' )
const _ = require ( 'lodash' )
const DiscordOauth2 = require ( 'discord-oauth2' )
// Checks for the existence of all of the configured role IDs in the member's guild IDs.
function hasRoles ( memberRoles , authRoles ) {
if ( memberRoles . every ( value => {
return authRoles . includes ( value )
} ) ) {
return true
} else {
return false
}
} ;
module . exports = {
module . exports = {
init ( passport , conf ) {
init ( passport , conf ) {
@ -19,9 +31,16 @@ module.exports = {
passReqToCallback : true
passReqToCallback : true
} , async ( req , accessToken , refreshToken , profile , cb ) => {
} , async ( req , accessToken , refreshToken , profile , cb ) => {
try {
try {
if ( conf . guildId && ! _ . some ( profile . guilds , { id : conf . guildId } ) ) {
if ( conf . roles ) {
const discord = new DiscordOauth2 ( )
const memberRoles = await discord . getGuildMember ( accessToken , conf . guildId )
if ( ! hasRoles ( memberRoles . roles , conf . roles ) ) {
throw new WIKI . Error . AuthLoginFailed ( )
}
} else if ( conf . guildId && ! _ . some ( profile . guilds , { id : conf . guildId } ) ) {
throw new WIKI . Error . AuthLoginFailed ( )
throw new WIKI . Error . AuthLoginFailed ( )
}
}
const user = await WIKI . models . users . processProfile ( {
const user = await WIKI . models . users . processProfile ( {
providerKey : req . params . strategy ,
providerKey : req . params . strategy ,
profile : {
profile : {