UNPKG

3.37 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _keys = require('babel-runtime/core-js/object/keys');
8
9var _keys2 = _interopRequireDefault(_keys);
10
11var _extends2 = require('babel-runtime/helpers/extends');
12
13var _extends3 = _interopRequireDefault(_extends2);
14
15var _passport = require('passport');
16
17var _passport2 = _interopRequireDefault(_passport);
18
19var _passportGithub = require('passport-github2');
20
21var _passportFacebook = require('passport-facebook');
22
23var _passportTwitter = require('passport-twitter');
24
25var _bodyParser = require('body-parser');
26
27var _bodyParser2 = _interopRequireDefault(_bodyParser);
28
29var _cookieParser = require('cookie-parser');
30
31var _cookieParser2 = _interopRequireDefault(_cookieParser);
32
33var _expressSession = require('express-session');
34
35var _expressSession2 = _interopRequireDefault(_expressSession);
36
37function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
38
39var strategies = {
40 github: _passportGithub.Strategy,
41 facebook: _passportFacebook.Strategy,
42 twitter: _passportTwitter.Strategy
43};
44
45var applyStrategy = function applyStrategy(authenticator, config, Strategy, origin) {
46 _passport2.default.use(new Strategy({
47 clientID: config.appId,
48 clientSecret: config.secret,
49 callbackURL: origin + '/auth/' + authenticator + '/callback'
50 }, function (accessToken, refreshToken, profile, cb) {
51 return cb(null, (0, _extends3.default)({}, profile, { token: accessToken }));
52 }));
53};
54
55var applyEndpoint = function applyEndpoint(app, authenticator) {
56 app.get('/auth/' + authenticator, _passport2.default.authenticate(authenticator, { session: true }));
57
58 app.get('/auth/' + authenticator + '/callback', _passport2.default.authenticate(authenticator, { session: true, failureRedirect: '/auth/' + authenticator }), function (req, res) {
59 var redirect = req.cookies.redirect || '/';
60 res.clearCookie('redirect');
61 res.redirect(redirect);
62 });
63};
64
65exports.default = {
66
67 use: function use(config, app, origin) {
68 app.use((0, _cookieParser2.default)());
69 app.use(_bodyParser2.default.json());
70 app.use(_bodyParser2.default.urlencoded({ extended: false }));
71 app.use((0, _expressSession2.default)({ secret: 'keyboard cat', resave: true, saveUninitialized: true }));
72 var authenticators = (0, _keys2.default)(config);
73
74 if (!authenticators.length) {
75 return;
76 }
77
78 // passport setup Strategy
79 _passport2.default.serializeUser(function (user, cb) {
80 cb(null, user);
81 });
82
83 _passport2.default.deserializeUser(function (obj, cb) {
84 cb(null, obj);
85 });
86
87 authenticators.forEach(function (authenticator) {
88 applyStrategy(authenticator, config[authenticator], strategies[authenticator], origin);
89 });
90
91 app.use(_passport2.default.initialize());
92 app.use(_passport2.default.session());
93
94 // Endpoint to confirm authentication is still in valid
95 app.get('/auth', function (req, res, next) {
96 if (req.isAuthenticated()) {
97 return next();
98 }
99 return res.status(401).json({});
100 }, function (req, res) {
101 res.status(200).json({
102 id: req.user.id,
103 token: req.user.token
104 });
105 });
106
107 authenticators.forEach(function (authenticator) {
108 applyEndpoint(app, authenticator);
109 });
110 }
111};
112module.exports = exports['default'];
\No newline at end of file