From 326063bc956a3d5c4035e26d9ff887ce3aa4f822 Mon Sep 17 00:00:00 2001 From: Eliot Partridge Date: Fri, 30 Aug 2019 10:34:14 -0500 Subject: [PATCH] Discord auth --- src/ts/server/oauth.ts | 9 +++++++++ src/ts/server/routes/auth.ts | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ts/server/oauth.ts b/src/ts/server/oauth.ts index abadcb9..dbc87ad 100644 --- a/src/ts/server/oauth.ts +++ b/src/ts/server/oauth.ts @@ -8,6 +8,7 @@ import { Strategy as FacebookStrategy } from '@passport-next/passport-facebook'; import { Strategy as GithubStrategy } from 'passport-github2'; import { Strategy as VKontakteStrategy } from 'passport-vkontakte'; import { Strategy as PatreonStrategy } from 'passport-patreon'; +import { Strategy as DiscordStrategy } from 'passport-discord'; import { Profile } from '../common/interfaces'; import { PATREON_COLOR } from '../common/colors'; import { colorToCSS } from '../common/color'; @@ -87,6 +88,12 @@ const providerList: OAuthProviderInfo[] = [ color: colorToCSS(PATREON_COLOR), strategy: PatreonStrategy, }, + { + id: 'discord', + name: 'Discord', + color: '#7289DA', + strategy: DiscordStrategy, + }, ]; providerList.forEach(p => p.auth = config.oauth[p.id]); @@ -101,6 +108,8 @@ export function getProfileUrl(profile: OAuthProfile): string | undefined { return `http://${profile.username}.tumblr.com/`; } else if (profile.provider === 'facebook') { return `http://www.facebook.com/${profile.id}`; + } else if (profile.provider === 'discord') { + return undefined; } else if (profile._json.attributes && profile._json.attributes.url) { // patreon return profile._json.attributes.url; } else { diff --git a/src/ts/server/routes/auth.ts b/src/ts/server/routes/auth.ts index bd18565..577f415 100644 --- a/src/ts/server/routes/auth.ts +++ b/src/ts/server/routes/auth.ts @@ -239,7 +239,7 @@ export function authRoutes( providers.filter(p => !!p.auth).forEach(({ id, strategy, auth, connectOnly, additionalOptions = {} }) => { const callbackURL = `${host}auth/${id}/callback`; - const scope = id === 'patreon' ? ['users'] : ['email']; + const scope = id === 'patreon' ? ['users'] : id === 'discord' ? ['identify', 'email'] : ['email']; const options = { ...additionalOptions, ...auth,