hexlet-volunteers/interviews

View on GitHub
auth/github.js

Summary

Maintainability
A
0 mins
Test Coverage
// @flow

type EnvContainer = {
  github_client_id: ?string,
  github_client_secret: ?string,
  github_callback: ?string,
}

import passport from 'passport';
import Strategy from 'passport-github';
import debug from 'debug';
const debugServer = debug('interview:server');

export default function configurePassport(env: EnvContainer) {
  process.nextTick(() => {
    passport.serializeUser((user, cb) => cb(null, user));
    passport.deserializeUser((obj, cb) => cb(null, obj));

    passport.use(
        new Strategy(
          {
            clientID: env.github_client_id,
            clientSecret: env.github_client_secret,
            callbackURL: env.github_callback,
            passReqToCallback: true,
            scope: 'user:email',
          },
        (req, accessToken, refreshToken, profile, done) => {
          if (!accessToken) {
            return done(new Error('Shit just happen'));
          }

          return process.nextTick(() => {
            debugServer('Access token obtain. Proceeding to redirect');
            return done(null, profile);
          });
        })
    );
  });
}