Skip to content

Commit

Permalink
Allowed domains env variable for Google Auth (#682)
Browse files Browse the repository at this point in the history
* Allowed domains env variable for Google Auth

* Fixing lint errors

* PR comments. Use includes instead of indexOf
  • Loading branch information
satyadeepk authored and tommoor committed Jun 16, 2018
1 parent 19c5caf commit fad5976
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 1 deletion.
3 changes: 3 additions & 0 deletions .env.sample
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ SLACK_SECRET=d2dc414f9953226bad0a356cXXXXYYYY

GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
# Comma separated list of domains to be allowed (optional)
# If not set, all Google apps domains are allowed by default
GOOGLE_ALLOWED_DOMAINS=

# Third party credentials (optional)
SLACK_VERIFICATION_TOKEN=PLxk6OlXXXXXVj3YYYY
Expand Down
8 changes: 8 additions & 0 deletions server/auth/google.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ const client = new OAuth2Client(
process.env.GOOGLE_CLIENT_SECRET,
`${process.env.URL}/auth/google.callback`
);
const allowedDomainsEnv = process.env.GOOGLE_ALLOWED_DOMAINS;

// start the oauth process and redirect user to Google
router.get('google', async ctx => {
Expand Down Expand Up @@ -43,6 +44,13 @@ router.get('google.callback', async ctx => {
return;
}

// allow all domains by default if the env is not set
const allowedDomains = allowedDomainsEnv && allowedDomainsEnv.split(',');
if (allowedDomains && !allowedDomains.includes(profile.data.hd)) {
ctx.redirect('/?notice=hd-not-allowed');
return;
}

const googleId = profile.data.hd;
const teamName = capitalize(profile.data.hd.split('.')[0]);

Expand Down
8 changes: 7 additions & 1 deletion server/pages/Home.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import SigninButtons from './components/SigninButtons';
import { developers, githubUrl } from '../../shared/utils/routeHelpers';

type Props = {
notice?: 'google-hd' | 'auth-error',
notice?: 'google-hd' | 'auth-error' | 'hd-not-allowed',
lastSignedIn: string,
googleSigninEnabled: boolean,
slackSigninEnabled: boolean,
Expand Down Expand Up @@ -38,6 +38,12 @@ function Home(props: Props) {
try signing in with your company Google account.
</Notice>
)}
{props.notice === 'hd-not-allowed' && (
<Notice>
Sorry, your Google apps domain is not allowed. Please try again
with an allowed company domain.
</Notice>
)}
{props.notice === 'auth-error' && (
<Notice>
Authentication failed - we were unable to sign you in at this
Expand Down

0 comments on commit fad5976

Please sign in to comment.