From bc6984ed078de11964e0fb1cfe447183a95e1390 Mon Sep 17 00:00:00 2001 From: unixtam <148286+unixtam@users.noreply.github.com> Date: Fri, 19 Apr 2019 17:53:54 +0200 Subject: [PATCH 1/5] Add services property when creating user on SAML login --- app/meteor-accounts-saml/server/saml_server.js | 1 + 1 file changed, 1 insertion(+) diff --git a/app/meteor-accounts-saml/server/saml_server.js b/app/meteor-accounts-saml/server/saml_server.js index ae750b8a79f8e..25ab6b82ed116 100644 --- a/app/meteor-accounts-saml/server/saml_server.js +++ b/app/meteor-accounts-saml/server/saml_server.js @@ -124,6 +124,7 @@ Accounts.registerLoginHandler(function(loginRequest) { address: email, verified: true, })), + services: {}, }; if (Accounts.saml.settings.generateUsername === true) { From 7764bcefa42795cb414767e5c6c68186608c59d4 Mon Sep 17 00:00:00 2001 From: unixtam <148286+unixtam@users.noreply.github.com> Date: Fri, 19 Apr 2019 18:45:06 +0200 Subject: [PATCH 2/5] Added SAML parameter 'language' to set interface language for new users --- app/meteor-accounts-saml/server/saml_server.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/meteor-accounts-saml/server/saml_server.js b/app/meteor-accounts-saml/server/saml_server.js index 25ab6b82ed116..83ca075b1dc67 100644 --- a/app/meteor-accounts-saml/server/saml_server.js +++ b/app/meteor-accounts-saml/server/saml_server.js @@ -3,6 +3,7 @@ import { Accounts } from 'meteor/accounts-base'; import { Random } from 'meteor/random'; import { WebApp } from 'meteor/webapp'; import { RoutePolicy } from 'meteor/routepolicy'; +import { TAPi18n } from 'meteor/tap:i18n'; import { CredentialTokens } from '../../models'; import { generateUsernameSuggestion } from '../../lib'; import { SAML } from './saml_utils'; @@ -136,6 +137,11 @@ Accounts.registerLoginHandler(function(loginRequest) { newUser.username = loginResult.profile.username; } + const languages = TAPi18n.getLanguages(); + if (languages[loginResult.profile.language]) { + newUser.language = loginResult.profile.language; + } + const userId = Accounts.insertUserDoc({}, newUser); user = Meteor.users.findOne(userId); } From e37fd5b3147f6f34d6795f43df5f21242d88ba99 Mon Sep 17 00:00:00 2001 From: unixtam <148286+unixtam@users.noreply.github.com> Date: Fri, 19 Apr 2019 21:28:34 +0200 Subject: [PATCH 3/5] Added SAML parameter 'channels' to provide default channels for new users --- .../server/saml_server.js | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/app/meteor-accounts-saml/server/saml_server.js b/app/meteor-accounts-saml/server/saml_server.js index 83ca075b1dc67..e4d334b7636b3 100644 --- a/app/meteor-accounts-saml/server/saml_server.js +++ b/app/meteor-accounts-saml/server/saml_server.js @@ -4,7 +4,7 @@ import { Random } from 'meteor/random'; import { WebApp } from 'meteor/webapp'; import { RoutePolicy } from 'meteor/routepolicy'; import { TAPi18n } from 'meteor/tap:i18n'; -import { CredentialTokens } from '../../models'; +import { Rooms, Subscriptions, CredentialTokens } from '../../models'; import { generateUsernameSuggestion } from '../../lib'; import { SAML } from './saml_utils'; import bodyParser from 'body-parser'; @@ -144,6 +144,28 @@ Accounts.registerLoginHandler(function(loginRequest) { const userId = Accounts.insertUserDoc({}, newUser); user = Meteor.users.findOne(userId); + + if (loginResult.profile.channels) { + _.each(loginResult.profile.channels.split(','), function(room_name) { + if (room_name) { + let room = Rooms.findOneByNameAndType(room_name, 'c'); + if (!room) { + room = Rooms.createWithIdTypeAndName(Random.id(), 'c', room_name); + } + + if (!Subscriptions.findOneByRoomIdAndUserId(room._id, userId)) { + Subscriptions.createWithRoomAndUser(room, user, { + ts: new Date(), + open: true, + alert: true, + unread: 1, + userMentions: 1, + groupMentions: 0, + }); + } + } + }); + } } // creating the token and adding to the user From 033e72c1ea3a4ec12b02838c2f0e3461b374d80b Mon Sep 17 00:00:00 2001 From: Pierre Lehnen Date: Thu, 22 Aug 2019 14:34:48 -0300 Subject: [PATCH 4/5] Updated Tapi18n reference --- app/meteor-accounts-saml/server/saml_server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/meteor-accounts-saml/server/saml_server.js b/app/meteor-accounts-saml/server/saml_server.js index 00c7273c28d64..ebdcf16f12688 100644 --- a/app/meteor-accounts-saml/server/saml_server.js +++ b/app/meteor-accounts-saml/server/saml_server.js @@ -3,7 +3,7 @@ import { Accounts } from 'meteor/accounts-base'; import { Random } from 'meteor/random'; import { WebApp } from 'meteor/webapp'; import { RoutePolicy } from 'meteor/routepolicy'; -import { TAPi18n } from 'meteor/tap:i18n'; +import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; import bodyParser from 'body-parser'; import fiber from 'fibers'; import _ from 'underscore'; From a4fc45d9e2072405da49fc2fad42c3be27204f2e Mon Sep 17 00:00:00 2001 From: Pierre Lehnen Date: Thu, 22 Aug 2019 15:04:35 -0300 Subject: [PATCH 5/5] Code Formatting --- .../server/saml_server.js | 50 ++++++++++++------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/app/meteor-accounts-saml/server/saml_server.js b/app/meteor-accounts-saml/server/saml_server.js index ebdcf16f12688..470d13f7ba5ff 100644 --- a/app/meteor-accounts-saml/server/saml_server.js +++ b/app/meteor-accounts-saml/server/saml_server.js @@ -198,25 +198,8 @@ Accounts.registerLoginHandler(function(loginRequest) { user = Meteor.users.findOne(userId); if (loginResult.profile.channels) { - _.each(loginResult.profile.channels.split(','), function(room_name) { - if (room_name) { - let room = Rooms.findOneByNameAndType(room_name, 'c'); - if (!room) { - room = Rooms.createWithIdTypeAndName(Random.id(), 'c', room_name); - } - - if (!Subscriptions.findOneByRoomIdAndUserId(room._id, userId)) { - Subscriptions.createWithRoomAndUser(room, user, { - ts: new Date(), - open: true, - alert: true, - unread: 1, - userMentions: 1, - groupMentions: 0, - }); - } - } - }); + const channels = loginResult.profile.channels.split(','); + Accounts.saml.subscribeToSAMLChannels(channels, user); } } @@ -301,6 +284,35 @@ Accounts.registerLoginHandler(function(loginRequest) { throw new Error('SAML Profile did not contain an email address'); }); +Accounts.saml.subscribeToSAMLChannels = function(channels, user) { + try { + for (let roomName of channels) { + roomName = roomName.trim(); + if (!roomName) { + continue; + } + + let room = Rooms.findOneByNameAndType(roomName, 'c'); + if (!room) { + room = Rooms.createWithIdTypeAndName(Random.id(), 'c', roomName); + } + + if (!Subscriptions.findOneByRoomIdAndUserId(room._id, user._id)) { + Subscriptions.createWithRoomAndUser(room, user, { + ts: new Date(), + open: true, + alert: true, + unread: 1, + userMentions: 1, + groupMentions: 0, + }); + } + } + } catch (err) { + console.error(err); + } +}; + Accounts.saml.hasCredential = function(credentialToken) { return CredentialTokens.findOneById(credentialToken) != null; };