|
|
@@ -250,35 +250,15 @@ module.exports = function(crowi, app) {
|
|
|
})(req, res);
|
|
|
};
|
|
|
|
|
|
- const loginPassportGoogleCallback = async function(req, res, next) {
|
|
|
+ const loginPassportGoogleCallback = async(req, res, next) => {
|
|
|
const provider = 'google';
|
|
|
const response = await __promisifiedPassportAuthentication(req, res, provider);
|
|
|
- let externalAccount;
|
|
|
-
|
|
|
- try {
|
|
|
- externalAccount = await ExternalAccount.findOrRegister(
|
|
|
- provider,
|
|
|
- response.id,
|
|
|
- response.displayName,
|
|
|
- `${response.name.givenName} ${response.name.familyName}`
|
|
|
- );
|
|
|
+ const userInfo = {
|
|
|
+ 'id': response.id,
|
|
|
+ 'username': response.displayName,
|
|
|
+ 'name': `${response.name.givenName} ${response.name.familyName}`
|
|
|
}
|
|
|
- catch (err) {
|
|
|
- if (err.name === 'DuplicatedUsernameException') {
|
|
|
- // get option
|
|
|
- const isSameUsernameTreatedAsIdenticalUser = Config.isSameUsernameTreatedAsIdenticalUser(config, provider);
|
|
|
- if (isSameUsernameTreatedAsIdenticalUser) {
|
|
|
- // associate to existing user
|
|
|
- debug(`ExternalAccount '${response.displayName}' will be created and bound to the exisiting User account`);
|
|
|
- return ExternalAccount.associate(provider, response.id, err.user);
|
|
|
- }
|
|
|
- else {
|
|
|
- req.flash('provider-DuplicatedUsernameException', provider);
|
|
|
- return next();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
+ const externalAccount = await getOrCreateUser(req, next, userInfo, provider);
|
|
|
const user = await externalAccount.getPopulatedUser();
|
|
|
|
|
|
// login
|
|
|
@@ -297,6 +277,34 @@ module.exports = function(crowi, app) {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
+ const getOrCreateUser = async(req, next, userInfo, provider) => {
|
|
|
+ try {
|
|
|
+ const externalAccount = await ExternalAccount.findOrRegister(
|
|
|
+ provider,
|
|
|
+ userInfo.id,
|
|
|
+ userInfo.username,
|
|
|
+ userInfo.name
|
|
|
+ );
|
|
|
+ return externalAccount;
|
|
|
+ }
|
|
|
+ catch (err) {
|
|
|
+ if (err.name === 'DuplicatedUsernameException') {
|
|
|
+ // get option
|
|
|
+ const isSameUsernameTreatedAsIdenticalUser = Config.isSameUsernameTreatedAsIdenticalUser(config, provider);
|
|
|
+ if (isSameUsernameTreatedAsIdenticalUser) {
|
|
|
+ // associate to existing user
|
|
|
+ debug(`ExternalAccount '${userInfo.username}' will be created and bound to the exisiting User account`);
|
|
|
+ return ExternalAccount.associate(provider, userInfo.id, err.user);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ req.flash('provider-DuplicatedUsernameException', provider);
|
|
|
+ return next();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ throw err; // throw again
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return {
|
|
|
loginFailure,
|
|
|
loginWithLdap,
|