|
|
@@ -274,6 +274,41 @@ module.exports = function(crowi, app) {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
+ const loginWithTwitter = function(req, res, next) {
|
|
|
+ if (!passportService.isTwitterStrategySetup) {
|
|
|
+ debug('TwitterStrategy has not been set up');
|
|
|
+ req.flash('warningMessage', 'TwitterStrategy has not been set up');
|
|
|
+ return next();
|
|
|
+ }
|
|
|
+
|
|
|
+ passport.authenticate('twitter')(req, res);
|
|
|
+ };
|
|
|
+
|
|
|
+ const loginPassportTwitterCallback = async(req, res, next) => {
|
|
|
+ const providerId = 'twitter';
|
|
|
+ const strategyName = 'twitter';
|
|
|
+ const response = await promisifiedPassportAuthentication(req, res, next, strategyName);
|
|
|
+ const userInfo = {
|
|
|
+ 'id': response.id,
|
|
|
+ 'username': response.username,
|
|
|
+ 'name': response.displayName
|
|
|
+ };
|
|
|
+
|
|
|
+ const externalAccount = await getOrCreateUser(req, res, next, userInfo, providerId);
|
|
|
+ if (!externalAccount) {
|
|
|
+ return loginFailure(req, res, next);
|
|
|
+ }
|
|
|
+
|
|
|
+ const user = await externalAccount.getPopulatedUser();
|
|
|
+
|
|
|
+ // login
|
|
|
+ req.logIn(user, err => {
|
|
|
+ if (err) { return next(err) }
|
|
|
+ return loginSuccess(req, res, user);
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
+
|
|
|
const promisifiedPassportAuthentication = (req, res, next, strategyName) => {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
passport.authenticate(strategyName, (err, response, info) => {
|
|
|
@@ -332,7 +367,9 @@ module.exports = function(crowi, app) {
|
|
|
loginWithLocal,
|
|
|
loginWithGoogle,
|
|
|
loginWithGitHub,
|
|
|
+ loginWithTwitter,
|
|
|
loginPassportGoogleCallback,
|
|
|
loginPassportGitHubCallback,
|
|
|
+ loginPassportTwitterCallback,
|
|
|
};
|
|
|
};
|