From 6da69c4ba20a22f1c93a15a458a140b5b12b6f28 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Fri, 10 Feb 2017 19:05:53 -0200 Subject: [PATCH 01/20] Init work with anonymous use --- .../client/hasPermission.js | 13 +++++---- .../client/lib/ChatPermissions.js | 4 ++- .../server/functions/canAccessRoom.js | 6 ++-- .../server/functions/hasPermission.js | 10 ++++--- .../server/startup.js | 5 ++-- .../client/startup/tabBar.coffee | 1 + .../rocketchat-lib/client/defaultTabBars.js | 1 + .../client/lib/cachedCollection.js | 2 +- .../rocketchat-lib/client/lib/openRoom.coffee | 2 +- .../server/methods/getRoomRoles.js | 2 +- .../flex-tab/flexTabBar.js | 4 +++ .../rocketchat-ui-master/master/main.coffee | 4 +-- .../message/message.coffee | 2 +- packages/rocketchat-ui/lib/RoomManager.coffee | 4 +-- packages/rocketchat-ui/lib/collections.coffee | 6 ++++ server/methods/canAccessRoom.js | 28 +++++++++++++------ server/methods/loadHistory.js | 2 +- server/publications/room.js | 2 +- 18 files changed, 64 insertions(+), 34 deletions(-) diff --git a/packages/rocketchat-authorization/client/hasPermission.js b/packages/rocketchat-authorization/client/hasPermission.js index 134a014e34a4..fabe8db0de2b 100644 --- a/packages/rocketchat-authorization/client/hasPermission.js +++ b/packages/rocketchat-authorization/client/hasPermission.js @@ -6,6 +6,10 @@ function atLeastOne(permissions = [], scope) { const roles = (permission && permission.roles) || []; return roles.some((roleName) => { + if (roleName === 'anonymous' && !Meteor.userId()) { + return true; + } + const role = RocketChat.models.Roles.findOne(roleName); const roleScope = role && role.scope; const model = RocketChat.models[roleScope]; @@ -21,6 +25,10 @@ function all(permissions = [], scope) { const roles = (permission && permission.roles) || []; return roles.some((roleName) => { + if (roleName === 'anonymous' && !Meteor.userId()) { + return true; + } + const role = RocketChat.models.Roles.findOne(roleName); const roleScope = role && role.scope; const model = RocketChat.models[roleScope]; @@ -31,11 +39,6 @@ function all(permissions = [], scope) { } function hasPermission(permissions, scope, strategy) { - const userId = Meteor.userId(); - if (!userId) { - return false; - } - if (!RocketChat.authz.cachedCollection.ready.get()) { return false; } diff --git a/packages/rocketchat-authorization/client/lib/ChatPermissions.js b/packages/rocketchat-authorization/client/lib/ChatPermissions.js index d5eb40d050af..156461281108 100644 --- a/packages/rocketchat-authorization/client/lib/ChatPermissions.js +++ b/packages/rocketchat-authorization/client/lib/ChatPermissions.js @@ -1,6 +1,8 @@ RocketChat.authz.cachedCollection = new RocketChat.CachedCollection({ name: 'permissions', - eventType: 'onLogged' + eventType: 'onLogged', + userRelated: false }); +RocketChat.authz.cachedCollection.init(); this.ChatPermissions = RocketChat.authz.cachedCollection.collection; diff --git a/packages/rocketchat-authorization/server/functions/canAccessRoom.js b/packages/rocketchat-authorization/server/functions/canAccessRoom.js index 5e41811e28f8..0cba0a613c1e 100644 --- a/packages/rocketchat-authorization/server/functions/canAccessRoom.js +++ b/packages/rocketchat-authorization/server/functions/canAccessRoom.js @@ -1,14 +1,14 @@ /* globals RocketChat */ RocketChat.authz.roomAccessValidators = [ - function(room, user) { + function(room, user = {}) { const subscription = RocketChat.models.Subscriptions.findOneByRoomIdAndUserId(room._id, user._id); if (subscription) { return subscription._room; } }, - function(room, user) { + function(room, user = {}) { if (room.t === 'c') { - return RocketChat.authz.hasPermission(user._id, 'view-c-room'); + return RocketChat.authz.hasPermission(user._id, 'view-c-room') || RocketChat.authz.hasPermission(user._id, 'preview-c-room'); } } ]; diff --git a/packages/rocketchat-authorization/server/functions/hasPermission.js b/packages/rocketchat-authorization/server/functions/hasPermission.js index 7c11f9c8447d..70b804cb7f61 100644 --- a/packages/rocketchat-authorization/server/functions/hasPermission.js +++ b/packages/rocketchat-authorization/server/functions/hasPermission.js @@ -1,6 +1,9 @@ function atLeastOne(userId, permissions = [], scope) { return permissions.some((permissionId) => { const permission = RocketChat.models.Permissions.findOne(permissionId); + if (!userId && permission.roles.includes('anonymous')) { + return true; + } return RocketChat.models.Roles.isUserInRoles(userId, permission.roles, scope); }); } @@ -8,15 +11,14 @@ function atLeastOne(userId, permissions = [], scope) { function all(userId, permissions = [], scope) { return permissions.every((permissionId) => { const permission = RocketChat.models.Permissions.findOne(permissionId); + if (!userId && permission.roles.includes('anonymous')) { + return true; + } return RocketChat.models.Roles.isUserInRoles(userId, permission.roles, scope); }); } function hasPermission(userId, permissions, scope, strategy) { - if (!userId) { - return false; - } - permissions = [].concat(permissions); return strategy(userId, permissions, scope); } diff --git a/packages/rocketchat-authorization/server/startup.js b/packages/rocketchat-authorization/server/startup.js index 7351ef1d66b4..e729ed72df11 100644 --- a/packages/rocketchat-authorization/server/startup.js +++ b/packages/rocketchat-authorization/server/startup.js @@ -58,7 +58,7 @@ Meteor.startup(function() { { _id: 'view-room-administration', roles : ['admin'] }, { _id: 'view-statistics', roles : ['admin'] }, { _id: 'view-user-administration', roles : ['admin'] }, - { _id: 'preview-c-room', roles : ['admin', 'user'] } + { _id: 'preview-c-room', roles : ['admin', 'user', 'anonymous'] } ]; for (const permission of permissions) { @@ -73,7 +73,8 @@ Meteor.startup(function() { { name: 'owner', scope: 'Subscriptions', description: 'Owner' }, { name: 'user', scope: 'Users', description: '' }, { name: 'bot', scope: 'Users', description: '' }, - { name: 'guest', scope: 'Users', description: '' } + { name: 'guest', scope: 'Users', description: '' }, + { name: 'anonymous', scope: 'Users', description: 'Anonymous' } ]; for (const role of defaultRoles) { diff --git a/packages/rocketchat-channel-settings/client/startup/tabBar.coffee b/packages/rocketchat-channel-settings/client/startup/tabBar.coffee index 52245c27b6a6..647108938376 100644 --- a/packages/rocketchat-channel-settings/client/startup/tabBar.coffee +++ b/packages/rocketchat-channel-settings/client/startup/tabBar.coffee @@ -2,6 +2,7 @@ Meteor.startup -> RocketChat.TabBar.addButton groups: ['channel', 'group', 'direct'] id: 'channel-settings' + anonymous: true i18nTitle: 'Room_Info' icon: 'icon-info-circled' template: 'channelSettings' diff --git a/packages/rocketchat-lib/client/defaultTabBars.js b/packages/rocketchat-lib/client/defaultTabBars.js index aeccd5d4978f..2cba09c1cb9a 100644 --- a/packages/rocketchat-lib/client/defaultTabBars.js +++ b/packages/rocketchat-lib/client/defaultTabBars.js @@ -19,6 +19,7 @@ RocketChat.TabBar.addButton({ RocketChat.TabBar.addButton({ groups: ['channel', 'group'], id: 'members-list', + anonymous: true, i18nTitle: 'Members_List', icon: 'icon-users', template: 'membersList', diff --git a/packages/rocketchat-lib/client/lib/cachedCollection.js b/packages/rocketchat-lib/client/lib/cachedCollection.js index 8d8e03bf8a2f..782a74e1ebeb 100644 --- a/packages/rocketchat-lib/client/lib/cachedCollection.js +++ b/packages/rocketchat-lib/client/lib/cachedCollection.js @@ -165,7 +165,7 @@ class CachedCollection { } localforage.getItem(this.name, (error, data) => { - if (data && (data.version < this.version || data.token !== this.getToken())) { + if (data && (data.version < this.version || data.token !== this.getToken() || this.getToken() === undefined)) { this.clearCache(); callback(false); return; diff --git a/packages/rocketchat-lib/client/lib/openRoom.coffee b/packages/rocketchat-lib/client/lib/openRoom.coffee index af932dfc5aa3..7c586b0e612d 100644 --- a/packages/rocketchat-lib/client/lib/openRoom.coffee +++ b/packages/rocketchat-lib/client/lib/openRoom.coffee @@ -10,7 +10,7 @@ currentTracker = undefined return user = Meteor.user() - unless user?.username + if not user?.username and !RocketChat.authz.hasAllPermission('preview-c-room') return currentTracker = undefined diff --git a/packages/rocketchat-lib/server/methods/getRoomRoles.js b/packages/rocketchat-lib/server/methods/getRoomRoles.js index 18ccaed6dbef..cf84fd1a5a4f 100644 --- a/packages/rocketchat-lib/server/methods/getRoomRoles.js +++ b/packages/rocketchat-lib/server/methods/getRoomRoles.js @@ -3,7 +3,7 @@ Meteor.methods({ check(rid, String); - if (!Meteor.userId()) { + if (!Meteor.userId() && !RocketChat.authz.hasPermission(undefined, 'preview-c-room')) { throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'getRoomRoles' }); } diff --git a/packages/rocketchat-ui-flextab/flex-tab/flexTabBar.js b/packages/rocketchat-ui-flextab/flex-tab/flexTabBar.js index b65246f17486..a6627f9b1c39 100644 --- a/packages/rocketchat-ui-flextab/flex-tab/flexTabBar.js +++ b/packages/rocketchat-ui-flextab/flex-tab/flexTabBar.js @@ -14,6 +14,10 @@ Template.flexTabBar.helpers({ }, visible() { + if (!Meteor.userId() && !this.anonymous) { + return 'hidden'; + } + if (this.groups.indexOf(Template.instance().tabBar.currentGroup()) === -1) { return 'hidden'; } diff --git a/packages/rocketchat-ui-master/master/main.coffee b/packages/rocketchat-ui-master/master/main.coffee index 4b61d0d81693..f0a905a46c1d 100644 --- a/packages/rocketchat-ui-master/master/main.coffee +++ b/packages/rocketchat-ui-master/master/main.coffee @@ -78,7 +78,7 @@ Template.main.helpers return RocketChat.settings.get 'Site_Name' logged: -> - if Meteor.userId()? + if Meteor.userId()? || RocketChat.authz.hasAllPermission('preview-c-room') $('html').addClass("noscroll").removeClass("scroll") return true else @@ -102,7 +102,7 @@ Template.main.helpers return ready hasUsername: -> - return Meteor.userId()? and Meteor.user().username? + return (Meteor.userId()? and Meteor.user().username?) || RocketChat.authz.hasAllPermission('preview-c-room') requirePasswordChange: -> return Meteor.user()?.requirePasswordChange is true diff --git a/packages/rocketchat-ui-message/message/message.coffee b/packages/rocketchat-ui-message/message/message.coffee index 7064827d5105..7a57edde8176 100644 --- a/packages/rocketchat-ui-message/message/message.coffee +++ b/packages/rocketchat-ui-message/message/message.coffee @@ -97,7 +97,7 @@ Template.message.helpers reactions: -> msgReactions = [] - userUsername = Meteor.user().username + userUsername = Meteor.user()?.username for emoji, reaction of @reactions total = reaction.usernames.length diff --git a/packages/rocketchat-ui/lib/RoomManager.coffee b/packages/rocketchat-ui/lib/RoomManager.coffee index 99296113cb0e..941af78748e7 100644 --- a/packages/rocketchat-ui/lib/RoomManager.coffee +++ b/packages/rocketchat-ui/lib/RoomManager.coffee @@ -80,8 +80,6 @@ Tracker.autorun -> do (typeName, record) -> user = Meteor.user() - unless user?.username - return if record.ready is true return @@ -158,7 +156,7 @@ Tracker.autorun -> if openedRooms[typeName].ready closeOlderRooms() - if CachedChatSubscription.ready.get() is true && Meteor.userId() + if CachedChatSubscription.ready.get() is true if openedRooms[typeName].active isnt true openedRooms[typeName].active = true diff --git a/packages/rocketchat-ui/lib/collections.coffee b/packages/rocketchat-ui/lib/collections.coffee index cadd479719bb..e6936b773225 100644 --- a/packages/rocketchat-ui/lib/collections.coffee +++ b/packages/rocketchat-ui/lib/collections.coffee @@ -14,3 +14,9 @@ RocketChat.models.Users = _.extend {}, RocketChat.models.Users, Meteor.users RocketChat.models.Subscriptions = _.extend {}, RocketChat.models.Subscriptions, @ChatSubscription RocketChat.models.Rooms = _.extend {}, RocketChat.models.Rooms, @ChatRoom RocketChat.models.Messages = _.extend {}, RocketChat.models.Messages, @ChatMessage + +Meteor.startup -> + Tracker.autorun -> + if !Meteor.userId() and RocketChat.authz.hasAllPermission('preview-c-room') + CachedChatRoom.ready.set(true) + CachedChatSubscription.ready.set(true) diff --git a/server/methods/canAccessRoom.js b/server/methods/canAccessRoom.js index b3c6bd42cbbd..6500b82e8531 100644 --- a/server/methods/canAccessRoom.js +++ b/server/methods/canAccessRoom.js @@ -1,20 +1,30 @@ Meteor.methods({ canAccessRoom(rid, userId) { check(rid, String); - check(userId, String); + check(userId, Match.Maybe(String)); - const user = RocketChat.models.Users.findOneById(userId, { - fields: { - username: 1 - } - }); + let user; - if (!user || !user.username) { + if (!userId && !RocketChat.authz.hasPermission(undefined, 'preview-c-room')) { throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'canAccessRoom' }); } + if (userId) { + user = RocketChat.models.Users.findOneById(userId, { + fields: { + username: 1 + } + }); + + if (!user || !user.username) { + throw new Meteor.Error('error-invalid-user', 'Invalid user', { + method: 'canAccessRoom' + }); + } + } + if (!rid) { throw new Meteor.Error('error-invalid-room', 'Invalid room', { method: 'canAccessRoom' @@ -24,7 +34,9 @@ Meteor.methods({ const room = RocketChat.models.Rooms.findOneById(rid); if (room) { if (RocketChat.authz.canAccessRoom.call(this, room, user)) { - room.username = user.username; + if (user) { + room.username = user.username; + } return room; } diff --git a/server/methods/loadHistory.js b/server/methods/loadHistory.js index 299ec022061b..6a61dadf25f2 100644 --- a/server/methods/loadHistory.js +++ b/server/methods/loadHistory.js @@ -21,7 +21,7 @@ Meteor.methods({ loadHistory(rid, end, limit = 20, ls) { check(rid, String); - if (!Meteor.userId()) { + if (!Meteor.userId() && !RocketChat.authz.hasAllPermission(undefined, 'preview-c-room')) { throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'loadHistory' }); diff --git a/server/publications/room.js b/server/publications/room.js index c665df94131f..faec38d85c46 100644 --- a/server/publications/room.js +++ b/server/publications/room.js @@ -54,7 +54,7 @@ Meteor.methods({ }, getRoomByTypeAndName(type, name) { - if (!Meteor.userId()) { + if (!Meteor.userId() && !RocketChat.authz.hasAllPermission(undefined, 'preview-c-room')) { throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'getRoomByTypeAndName' }); } From 94f580654ccfde90582e2ee3d66afb03f58555da Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Sat, 11 Feb 2017 09:20:24 -0200 Subject: [PATCH 02/20] Show username window when necessary --- packages/rocketchat-ui-master/master/main.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rocketchat-ui-master/master/main.coffee b/packages/rocketchat-ui-master/master/main.coffee index f0a905a46c1d..c41156694bfb 100644 --- a/packages/rocketchat-ui-master/master/main.coffee +++ b/packages/rocketchat-ui-master/master/main.coffee @@ -102,7 +102,7 @@ Template.main.helpers return ready hasUsername: -> - return (Meteor.userId()? and Meteor.user().username?) || RocketChat.authz.hasAllPermission('preview-c-room') + return (Meteor.userId()? and Meteor.user().username?) || (!Meteor.userId()? && RocketChat.authz.hasAllPermission('preview-c-room')) requirePasswordChange: -> return Meteor.user()?.requirePasswordChange is true From 9427501b4675cbac0666a4724af8c7b698206975 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Sat, 11 Feb 2017 09:40:21 -0200 Subject: [PATCH 03/20] Code improvement --- packages/rocketchat-lib/client/lib/openRoom.coffee | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/rocketchat-lib/client/lib/openRoom.coffee b/packages/rocketchat-lib/client/lib/openRoom.coffee index 7c586b0e612d..0e8e6fc044fe 100644 --- a/packages/rocketchat-lib/client/lib/openRoom.coffee +++ b/packages/rocketchat-lib/client/lib/openRoom.coffee @@ -5,12 +5,13 @@ currentTracker = undefined Meteor.defer -> currentTracker = Tracker.autorun (c) -> - if RoomManager.open(type + name).ready() isnt true - BlazeLayout.render 'main', { modal: RocketChat.Layout.isEmbedded(), center: 'loading' } + user = Meteor.user() + if (user? and not user.username?) or (not user? and !RocketChat.authz.hasAllPermission('preview-c-room')) + BlazeLayout.render 'main' return - user = Meteor.user() - if not user?.username and !RocketChat.authz.hasAllPermission('preview-c-room') + if RoomManager.open(type + name).ready() isnt true + BlazeLayout.render 'main', { modal: RocketChat.Layout.isEmbedded(), center: 'loading' } return currentTracker = undefined From 66ec972d5d5cb7dc8b633677bc5bdafb8270021d Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Sat, 11 Feb 2017 10:20:39 -0200 Subject: [PATCH 04/20] Use setting instead of permission --- .../client/hasPermission.js | 8 -------- .../server/functions/canAccessRoom.js | 14 +++++++++----- .../server/functions/hasPermission.js | 6 ------ .../rocketchat-authorization/server/startup.js | 5 ++--- packages/rocketchat-lib/client/defaultTabBars.js | 1 - packages/rocketchat-lib/client/lib/openRoom.coffee | 2 +- .../rocketchat-lib/server/methods/getRoomRoles.js | 2 +- .../rocketchat-lib/server/startup/settings.coffee | 1 + packages/rocketchat-ui-master/master/main.coffee | 4 ++-- packages/rocketchat-ui/lib/collections.coffee | 2 +- packages/rocketchat-ui/views/app/room.coffee | 3 +++ server/methods/canAccessRoom.js | 2 +- server/methods/loadHistory.js | 6 ++++-- server/publications/room.js | 2 +- 14 files changed, 26 insertions(+), 32 deletions(-) diff --git a/packages/rocketchat-authorization/client/hasPermission.js b/packages/rocketchat-authorization/client/hasPermission.js index fabe8db0de2b..d9a635eb9931 100644 --- a/packages/rocketchat-authorization/client/hasPermission.js +++ b/packages/rocketchat-authorization/client/hasPermission.js @@ -6,10 +6,6 @@ function atLeastOne(permissions = [], scope) { const roles = (permission && permission.roles) || []; return roles.some((roleName) => { - if (roleName === 'anonymous' && !Meteor.userId()) { - return true; - } - const role = RocketChat.models.Roles.findOne(roleName); const roleScope = role && role.scope; const model = RocketChat.models[roleScope]; @@ -25,10 +21,6 @@ function all(permissions = [], scope) { const roles = (permission && permission.roles) || []; return roles.some((roleName) => { - if (roleName === 'anonymous' && !Meteor.userId()) { - return true; - } - const role = RocketChat.models.Roles.findOne(roleName); const roleScope = role && role.scope; const model = RocketChat.models[roleScope]; diff --git a/packages/rocketchat-authorization/server/functions/canAccessRoom.js b/packages/rocketchat-authorization/server/functions/canAccessRoom.js index 0cba0a613c1e..faf4164698f5 100644 --- a/packages/rocketchat-authorization/server/functions/canAccessRoom.js +++ b/packages/rocketchat-authorization/server/functions/canAccessRoom.js @@ -1,14 +1,18 @@ /* globals RocketChat */ RocketChat.authz.roomAccessValidators = [ function(room, user = {}) { - const subscription = RocketChat.models.Subscriptions.findOneByRoomIdAndUserId(room._id, user._id); - if (subscription) { - return subscription._room; + if (room.t === 'c') { + if (!user._id && RocketChat.settings.get('Accounts_AllowAnonymousAccess') === true) { + return true; + } + + return RocketChat.authz.hasPermission(user._id, 'view-c-room'); } }, function(room, user = {}) { - if (room.t === 'c') { - return RocketChat.authz.hasPermission(user._id, 'view-c-room') || RocketChat.authz.hasPermission(user._id, 'preview-c-room'); + const subscription = RocketChat.models.Subscriptions.findOneByRoomIdAndUserId(room._id, user._id); + if (subscription) { + return subscription._room; } } ]; diff --git a/packages/rocketchat-authorization/server/functions/hasPermission.js b/packages/rocketchat-authorization/server/functions/hasPermission.js index 70b804cb7f61..488a0522d922 100644 --- a/packages/rocketchat-authorization/server/functions/hasPermission.js +++ b/packages/rocketchat-authorization/server/functions/hasPermission.js @@ -1,9 +1,6 @@ function atLeastOne(userId, permissions = [], scope) { return permissions.some((permissionId) => { const permission = RocketChat.models.Permissions.findOne(permissionId); - if (!userId && permission.roles.includes('anonymous')) { - return true; - } return RocketChat.models.Roles.isUserInRoles(userId, permission.roles, scope); }); } @@ -11,9 +8,6 @@ function atLeastOne(userId, permissions = [], scope) { function all(userId, permissions = [], scope) { return permissions.every((permissionId) => { const permission = RocketChat.models.Permissions.findOne(permissionId); - if (!userId && permission.roles.includes('anonymous')) { - return true; - } return RocketChat.models.Roles.isUserInRoles(userId, permission.roles, scope); }); } diff --git a/packages/rocketchat-authorization/server/startup.js b/packages/rocketchat-authorization/server/startup.js index e729ed72df11..7351ef1d66b4 100644 --- a/packages/rocketchat-authorization/server/startup.js +++ b/packages/rocketchat-authorization/server/startup.js @@ -58,7 +58,7 @@ Meteor.startup(function() { { _id: 'view-room-administration', roles : ['admin'] }, { _id: 'view-statistics', roles : ['admin'] }, { _id: 'view-user-administration', roles : ['admin'] }, - { _id: 'preview-c-room', roles : ['admin', 'user', 'anonymous'] } + { _id: 'preview-c-room', roles : ['admin', 'user'] } ]; for (const permission of permissions) { @@ -73,8 +73,7 @@ Meteor.startup(function() { { name: 'owner', scope: 'Subscriptions', description: 'Owner' }, { name: 'user', scope: 'Users', description: '' }, { name: 'bot', scope: 'Users', description: '' }, - { name: 'guest', scope: 'Users', description: '' }, - { name: 'anonymous', scope: 'Users', description: 'Anonymous' } + { name: 'guest', scope: 'Users', description: '' } ]; for (const role of defaultRoles) { diff --git a/packages/rocketchat-lib/client/defaultTabBars.js b/packages/rocketchat-lib/client/defaultTabBars.js index 2cba09c1cb9a..aeccd5d4978f 100644 --- a/packages/rocketchat-lib/client/defaultTabBars.js +++ b/packages/rocketchat-lib/client/defaultTabBars.js @@ -19,7 +19,6 @@ RocketChat.TabBar.addButton({ RocketChat.TabBar.addButton({ groups: ['channel', 'group'], id: 'members-list', - anonymous: true, i18nTitle: 'Members_List', icon: 'icon-users', template: 'membersList', diff --git a/packages/rocketchat-lib/client/lib/openRoom.coffee b/packages/rocketchat-lib/client/lib/openRoom.coffee index 0e8e6fc044fe..33e023abf9c9 100644 --- a/packages/rocketchat-lib/client/lib/openRoom.coffee +++ b/packages/rocketchat-lib/client/lib/openRoom.coffee @@ -6,7 +6,7 @@ currentTracker = undefined Meteor.defer -> currentTracker = Tracker.autorun (c) -> user = Meteor.user() - if (user? and not user.username?) or (not user? and !RocketChat.authz.hasAllPermission('preview-c-room')) + if (user? and not user.username?) or (not user? and RocketChat.settings.get('Accounts_AllowAnonymousAccess') is false) BlazeLayout.render 'main' return diff --git a/packages/rocketchat-lib/server/methods/getRoomRoles.js b/packages/rocketchat-lib/server/methods/getRoomRoles.js index cf84fd1a5a4f..e35fdb3e33e9 100644 --- a/packages/rocketchat-lib/server/methods/getRoomRoles.js +++ b/packages/rocketchat-lib/server/methods/getRoomRoles.js @@ -3,7 +3,7 @@ Meteor.methods({ check(rid, String); - if (!Meteor.userId() && !RocketChat.authz.hasPermission(undefined, 'preview-c-room')) { + if (!Meteor.userId() && RocketChat.settings.get('Accounts_AllowAnonymousAccess') === false) { throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'getRoomRoles' }); } diff --git a/packages/rocketchat-lib/server/startup/settings.coffee b/packages/rocketchat-lib/server/startup/settings.coffee index f95bd3d3662c..117b21876996 100644 --- a/packages/rocketchat-lib/server/startup/settings.coffee +++ b/packages/rocketchat-lib/server/startup/settings.coffee @@ -4,6 +4,7 @@ RocketChat.settings.add('uniqueID', process.env.DEPLOYMENT_ID or Random.id(), { # When you define a setting and want to add a description, you don't need to automatically define the i18nDescription # if you add a node to the i18n.json with the same setting name but with `_Description` it will automatically work. RocketChat.settings.addGroup 'Accounts', -> + @add 'Accounts_AllowAnonymousAccess', false, { type: 'boolean', public: true} @add 'Accounts_AllowDeleteOwnAccount', false, { type: 'boolean', public: true, enableQuery: { _id: 'Accounts_AllowUserProfileChange', value: true } } @add 'Accounts_AllowUserProfileChange', true, { type: 'boolean', public: true } @add 'Accounts_AllowUserAvatarChange', true, { type: 'boolean', public: true } diff --git a/packages/rocketchat-ui-master/master/main.coffee b/packages/rocketchat-ui-master/master/main.coffee index c41156694bfb..cbfd565787e5 100644 --- a/packages/rocketchat-ui-master/master/main.coffee +++ b/packages/rocketchat-ui-master/master/main.coffee @@ -78,7 +78,7 @@ Template.main.helpers return RocketChat.settings.get 'Site_Name' logged: -> - if Meteor.userId()? || RocketChat.authz.hasAllPermission('preview-c-room') + if Meteor.userId()? || RocketChat.settings.get('Accounts_AllowAnonymousAccess') is true $('html').addClass("noscroll").removeClass("scroll") return true else @@ -102,7 +102,7 @@ Template.main.helpers return ready hasUsername: -> - return (Meteor.userId()? and Meteor.user().username?) || (!Meteor.userId()? && RocketChat.authz.hasAllPermission('preview-c-room')) + return (Meteor.userId()? and Meteor.user().username?) || (!Meteor.userId()? && RocketChat.settings.get('Accounts_AllowAnonymousAccess') is true) requirePasswordChange: -> return Meteor.user()?.requirePasswordChange is true diff --git a/packages/rocketchat-ui/lib/collections.coffee b/packages/rocketchat-ui/lib/collections.coffee index e6936b773225..60f2c7b713cb 100644 --- a/packages/rocketchat-ui/lib/collections.coffee +++ b/packages/rocketchat-ui/lib/collections.coffee @@ -17,6 +17,6 @@ RocketChat.models.Messages = _.extend {}, RocketChat.models.Messages, @ChatMessa Meteor.startup -> Tracker.autorun -> - if !Meteor.userId() and RocketChat.authz.hasAllPermission('preview-c-room') + if !Meteor.userId() and RocketChat.settings.get('Accounts_AllowAnonymousAccess') is true CachedChatRoom.ready.set(true) CachedChatSubscription.ready.set(true) diff --git a/packages/rocketchat-ui/views/app/room.coffee b/packages/rocketchat-ui/views/app/room.coffee index aa501bc39a35..761d02570cdc 100644 --- a/packages/rocketchat-ui/views/app/room.coffee +++ b/packages/rocketchat-ui/views/app/room.coffee @@ -158,6 +158,9 @@ Template.room.helpers if room.t isnt 'c' return true + if RocketChat.settings.get('Accounts_AllowAnonymousAccess') is true + return true + if RocketChat.authz.hasAllPermission('preview-c-room') return true diff --git a/server/methods/canAccessRoom.js b/server/methods/canAccessRoom.js index 6500b82e8531..8c4a04ad98a9 100644 --- a/server/methods/canAccessRoom.js +++ b/server/methods/canAccessRoom.js @@ -5,7 +5,7 @@ Meteor.methods({ let user; - if (!userId && !RocketChat.authz.hasPermission(undefined, 'preview-c-room')) { + if (!userId && RocketChat.settings.get('Accounts_AllowAnonymousAccess') === false) { throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'canAccessRoom' }); diff --git a/server/methods/loadHistory.js b/server/methods/loadHistory.js index 6a61dadf25f2..5a78f55766d2 100644 --- a/server/methods/loadHistory.js +++ b/server/methods/loadHistory.js @@ -21,7 +21,7 @@ Meteor.methods({ loadHistory(rid, end, limit = 20, ls) { check(rid, String); - if (!Meteor.userId() && !RocketChat.authz.hasAllPermission(undefined, 'preview-c-room')) { + if (!Meteor.userId() && RocketChat.settings.get('Accounts_AllowAnonymousAccess') === false) { throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'loadHistory' }); @@ -34,7 +34,9 @@ Meteor.methods({ return false; } - if (room.t === 'c' && !RocketChat.authz.hasPermission(fromId, 'preview-c-room') && room.usernames.indexOf(room.username) === -1) { + const canAnonymous = RocketChat.settings.get('Accounts_AllowAnonymousAccess'); + const canPreview = RocketChat.authz.hasPermission(fromId, 'preview-c-room'); + if (room.t === 'c' && !canAnonymous && !canPreview && room.usernames.indexOf(room.username) === -1) { return false; } diff --git a/server/publications/room.js b/server/publications/room.js index faec38d85c46..3fe2a33fe53d 100644 --- a/server/publications/room.js +++ b/server/publications/room.js @@ -54,7 +54,7 @@ Meteor.methods({ }, getRoomByTypeAndName(type, name) { - if (!Meteor.userId() && !RocketChat.authz.hasAllPermission(undefined, 'preview-c-room')) { + if (!Meteor.userId() && RocketChat.settings.get('Accounts_AllowAnonymousAccess') === false) { throw new Meteor.Error('error-invalid-user', 'Invalid user', { method: 'getRoomByTypeAndName' }); } From 29c16f8046d520f7cedcce66daa1d406ab4141ac Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Sat, 11 Feb 2017 10:22:30 -0200 Subject: [PATCH 05/20] Back old code --- .../server/functions/hasPermission.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/rocketchat-authorization/server/functions/hasPermission.js b/packages/rocketchat-authorization/server/functions/hasPermission.js index 488a0522d922..7c11f9c8447d 100644 --- a/packages/rocketchat-authorization/server/functions/hasPermission.js +++ b/packages/rocketchat-authorization/server/functions/hasPermission.js @@ -13,6 +13,10 @@ function all(userId, permissions = [], scope) { } function hasPermission(userId, permissions, scope, strategy) { + if (!userId) { + return false; + } + permissions = [].concat(permissions); return strategy(userId, permissions, scope); } From 0cf06d5a56746390adc7590c6b4acb86a9caf6fc Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Sat, 11 Feb 2017 10:23:26 -0200 Subject: [PATCH 06/20] Back old code --- packages/rocketchat-authorization/client/hasPermission.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/rocketchat-authorization/client/hasPermission.js b/packages/rocketchat-authorization/client/hasPermission.js index d9a635eb9931..134a014e34a4 100644 --- a/packages/rocketchat-authorization/client/hasPermission.js +++ b/packages/rocketchat-authorization/client/hasPermission.js @@ -31,6 +31,11 @@ function all(permissions = [], scope) { } function hasPermission(permissions, scope, strategy) { + const userId = Meteor.userId(); + if (!userId) { + return false; + } + if (!RocketChat.authz.cachedCollection.ready.get()) { return false; } From c5bad07f319979f5033b3017b7157e6096ab2634 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Sat, 11 Feb 2017 10:30:50 -0200 Subject: [PATCH 07/20] Show account information --- .../rocketchat-ui-sidenav/side-nav/accountBox.coffee | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/rocketchat-ui-sidenav/side-nav/accountBox.coffee b/packages/rocketchat-ui-sidenav/side-nav/accountBox.coffee index b0f2bf2741b2..bd13aef59da6 100644 --- a/packages/rocketchat-ui-sidenav/side-nav/accountBox.coffee +++ b/packages/rocketchat-ui-sidenav/side-nav/accountBox.coffee @@ -1,5 +1,13 @@ Template.accountBox.helpers myUserInfo: -> + if not Meteor.user()? and RocketChat.settings.get('Accounts_AllowAnonymousAccess') + return { + name: t('Anonymous') + status: 'online' + visualStatus: t('online') + username: 'anonymous' + } + visualStatus = "online" username = Meteor.user()?.username switch Session.get('user_' + username + '_status') @@ -30,6 +38,9 @@ Template.accountBox.events RocketChat.callbacks.run('userStatusManuallySet', event.currentTarget.dataset.status) 'click .account-box': (event) -> + if not Meteor.userId()? and RocketChat.settings.get('Accounts_AllowAnonymousAccess') + return + AccountBox.toggle() 'click #logout': (event) -> From 2d534a250690d87acf05829dc4bfd128da35fff2 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Sat, 11 Feb 2017 10:39:45 -0200 Subject: [PATCH 08/20] Make sportlight work for anonymous --- .../rocketchat-lib/server/models/Rooms.coffee | 7 +++ .../side-nav/sideNav.html | 2 +- .../rocketchat-ui-sidenav/side-nav/toolbar.js | 5 +- server/publications/spotlight.js | 51 +++++++++++-------- 4 files changed, 41 insertions(+), 24 deletions(-) diff --git a/packages/rocketchat-lib/server/models/Rooms.coffee b/packages/rocketchat-lib/server/models/Rooms.coffee index 0830b53f773d..0b5c5e6ee828 100644 --- a/packages/rocketchat-lib/server/models/Rooms.coffee +++ b/packages/rocketchat-lib/server/models/Rooms.coffee @@ -188,6 +188,13 @@ class ModelRooms extends RocketChat.models._Base return @find query, options + findByNameAndType: (name, type, username, options) -> + query = + t: type + name: name + + return @find query, options + findByNameAndTypeNotContainingUsername: (name, type, username, options) -> query = t: type diff --git a/packages/rocketchat-ui-sidenav/side-nav/sideNav.html b/packages/rocketchat-ui-sidenav/side-nav/sideNav.html index eec0bc309fd2..fc187a96f047 100644 --- a/packages/rocketchat-ui-sidenav/side-nav/sideNav.html +++ b/packages/rocketchat-ui-sidenav/side-nav/sideNav.html @@ -3,8 +3,8 @@
{{> accountBox }}
+ {{> toolbar}} {{#if currentUser}} - {{> toolbar}} diff --git a/packages/rocketchat-ui-sidenav/side-nav/toolbar.js b/packages/rocketchat-ui-sidenav/side-nav/toolbar.js index b3a6f91f5ca9..b51da08688a6 100644 --- a/packages/rocketchat-ui-sidenav/side-nav/toolbar.js +++ b/packages/rocketchat-ui-sidenav/side-nav/toolbar.js @@ -127,7 +127,10 @@ Template.toolbar.helpers({ resultsFromClient = collection.find(query, {limit: 20, sort: {unread: -1, ls: -1}}).fetch(); const resultsFromClientLength = resultsFromClient.length; - usernamesFromClient = [Meteor.user().username]; + const user = Meteor.user(); + if (user) { + usernamesFromClient = [Meteor.user().username]; + } for (let i = 0; i < resultsFromClientLength; i++) { if (resultsFromClient[i].t === 'd') { diff --git a/server/publications/spotlight.js b/server/publications/spotlight.js index a7a86e0121cc..15bc970425f4 100644 --- a/server/publications/spotlight.js +++ b/server/publications/spotlight.js @@ -5,23 +5,39 @@ Meteor.methods({ rooms: [] }; + const roomOptions = { + limit: 5, + fields: { + t: 1, + name: 1 + }, + sort: { + name: 1 + } + }; + + const userOptions = { + limit: 5, + fields: { + username: 1, + status: 1 + }, + sort: { + username: 1 + } + }; + + const regex = new RegExp(s.trim(s.escapeRegExp(text)), 'i'); + if (this.userId == null) { + if (RocketChat.settings.get('Accounts_AllowAnonymousAccess') === true) { + result.rooms = RocketChat.models.Rooms.findByNameAndType(regex, 'c', roomOptions).fetch(); + } return result; } - const regex = new RegExp(s.trim(s.escapeRegExp(text)), 'i'); - if (type.users === true && RocketChat.authz.hasPermission(this.userId, 'view-d-room')) { - result.users = RocketChat.models.Users.findByActiveUsersUsernameExcept(text, usernames, { - limit: 5, - fields: { - username: 1, - status: 1 - }, - sort: { - username: 1 - } - }).fetch(); + result.users = RocketChat.models.Users.findByActiveUsersUsernameExcept(text, usernames, userOptions).fetch(); } if (type.rooms === true && RocketChat.authz.hasPermission(this.userId, 'view-c-room')) { @@ -29,16 +45,7 @@ Meteor.methods({ username: 1 }).username; - result.rooms = RocketChat.models.Rooms.findByNameAndTypeNotContainingUsername(regex, 'c', username, { - limit: 5, - fields: { - t: 1, - name: 1 - }, - sort: { - name: 1 - } - }).fetch(); + result.rooms = RocketChat.models.Rooms.findByNameAndTypeNotContainingUsername(regex, 'c', username, roomOptions).fetch(); } return result; } From 70198c91c5489db33d2eeb901cd272f0e2a07907 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Sat, 11 Feb 2017 11:02:50 -0200 Subject: [PATCH 09/20] Add button to go to login when anonymous --- packages/rocketchat-i18n/i18n/en.i18n.json | 2 ++ packages/rocketchat-theme/client/imports/base.less | 2 +- packages/rocketchat-ui-master/master/main.coffee | 2 +- .../rocketchat-ui-message/message/messageBox.coffee | 10 +++++++++- packages/rocketchat-ui-message/message/messageBox.html | 5 +++++ 5 files changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index 857f0c40fb07..dbade904b81e 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -17,6 +17,7 @@ "Accessing_permissions": "Accessing permissions", "Account_SID": "Account SID", "Accounts": "Accounts", + "Accounts_AllowAnonymousAccess": "Allow anonymous access", "Accounts_AllowDeleteOwnAccount": "Allow users to delete own account", "Accounts_AllowedDomainsList": "Allowed Domains List", "Accounts_AllowedDomainsList_Description": "Comma-separated list of allowed domains", @@ -1116,6 +1117,7 @@ "Refresh_your_page_after_install_to_enable_screen_sharing": "Refresh your page after install to enable screen sharing", "Register": "Register a new account", "Registration_Succeeded": "Registration Succeeded", + "Register_or_login_to_send_messages": "Register or login to send messages", "Release": "Release", "Remove": "Remove", "Remove_Admin": "Remove Admin", diff --git a/packages/rocketchat-theme/client/imports/base.less b/packages/rocketchat-theme/client/imports/base.less index a686df6492a5..f0b6e5032e6b 100644 --- a/packages/rocketchat-theme/client/imports/base.less +++ b/packages/rocketchat-theme/client/imports/base.less @@ -2558,7 +2558,7 @@ label.required::after { margin: 60px 20px 0 0; overflow: hidden; width: 100%; - .calc(height, ~'100% - 120px'); + .calc(height, ~'100% - 130px'); .message-cog-container { .message-action { diff --git a/packages/rocketchat-ui-master/master/main.coffee b/packages/rocketchat-ui-master/master/main.coffee index cbfd565787e5..017a5057b08f 100644 --- a/packages/rocketchat-ui-master/master/main.coffee +++ b/packages/rocketchat-ui-master/master/main.coffee @@ -78,7 +78,7 @@ Template.main.helpers return RocketChat.settings.get 'Site_Name' logged: -> - if Meteor.userId()? || RocketChat.settings.get('Accounts_AllowAnonymousAccess') is true + if Meteor.userId()? || (RocketChat.settings.get('Accounts_AllowAnonymousAccess') is true && Session.get('forceLogin') isnt true) $('html').addClass("noscroll").removeClass("scroll") return true else diff --git a/packages/rocketchat-ui-message/message/messageBox.coffee b/packages/rocketchat-ui-message/message/messageBox.coffee index 0948937f8e13..3b46d536f0df 100644 --- a/packages/rocketchat-ui-message/message/messageBox.coffee +++ b/packages/rocketchat-ui-message/message/messageBox.coffee @@ -28,7 +28,7 @@ Template.messageBox.helpers showFormattingTips: -> return RocketChat.settings.get('Message_ShowFormattingTips') and (RocketChat.Markdown or RocketChat.MarkdownCode or katexSyntax()) canJoin: -> - return RocketChat.roomTypes.verifyShowJoinLink @_id + return Meteor.userId()? and RocketChat.roomTypes.verifyShowJoinLink @_id joinCodeRequired: -> return Session.get('roomData' + this._id)?.joinCodeRequired subscribed: -> @@ -116,6 +116,9 @@ Template.messageBox.helpers showSandstorm: -> return Meteor.settings.public.sandstorm && !Meteor.isCordova + isAnonymous: -> + return not Meteor.userId()? and RocketChat.settings.get('Accounts_AllowAnonymousAccess') is true + Template.messageBox.events 'click .join': (event) -> @@ -131,6 +134,11 @@ Template.messageBox.events RoomHistoryManager.getRoom(@_id).loaded = undefined RoomManager.computation.invalidate() + 'click .register': (event) -> + event.stopPropagation() + event.preventDefault() + Session.set('forceLogin', true) + 'focus .input-message': (event, instance) -> KonchatNotification.removeRoomNotification @_id chatMessages[@_id].input = instance.find('.input-message') diff --git a/packages/rocketchat-ui-message/message/messageBox.html b/packages/rocketchat-ui-message/message/messageBox.html index 65a36bf0e109..f2bf4ccf2501 100644 --- a/packages/rocketchat-ui-message/message/messageBox.html +++ b/packages/rocketchat-ui-message/message/messageBox.html @@ -123,6 +123,11 @@ {{/if}} + {{#if isAnonymous}} +
+ +
+ {{/if}} {{/with}} {{/if}} From a4d71efcd722bbb5eea21e17977ea83f0d83d7a5 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Mon, 13 Feb 2017 11:14:18 -0200 Subject: [PATCH 10/20] Reload current room after user registration --- packages/rocketchat-ui-login/username/username.coffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/rocketchat-ui-login/username/username.coffee b/packages/rocketchat-ui-login/username/username.coffee index 225d190b79cb..ca5a2dad9ce5 100644 --- a/packages/rocketchat-ui-login/username/username.coffee +++ b/packages/rocketchat-ui-login/username/username.coffee @@ -52,3 +52,5 @@ Template.username.events RocketChat.Button.reset(button) instance.username.set(username) RocketChat.callbacks.run('usernameSet') + RoomManager.closeAllRooms() + FlowRouter._current.route.callAction(FlowRouter._current) From fe807cd74b0a6cc7f7511008bfc7ddb21c13779c Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Tue, 14 Feb 2017 11:01:35 -0200 Subject: [PATCH 11/20] List default channels for anonymous users --- .../startup/defaultRoomTypes.js | 2 +- packages/rocketchat-ui-sidenav/package.js | 2 ++ .../side-nav/channels-anonymous.html | 13 ++++++++++ .../side-nav/channels-anonymous.js | 24 +++++++++++++++++++ .../side-nav/chatRoomItem.coffee | 2 +- .../side-nav/sideNav.html | 6 +++++ packages/rocketchat-ui/lib/collections.coffee | 2 +- server/publications/room.js | 3 +++ 8 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 packages/rocketchat-ui-sidenav/side-nav/channels-anonymous.html create mode 100644 packages/rocketchat-ui-sidenav/side-nav/channels-anonymous.js diff --git a/packages/rocketchat-lib/startup/defaultRoomTypes.js b/packages/rocketchat-lib/startup/defaultRoomTypes.js index c4a73a56ccd5..44d19182b3db 100644 --- a/packages/rocketchat-lib/startup/defaultRoomTypes.js +++ b/packages/rocketchat-lib/startup/defaultRoomTypes.js @@ -29,7 +29,7 @@ RocketChat.roomTypes.add('c', 10, { }, condition() { - return RocketChat.authz.hasAtLeastOnePermission(['view-c-room', 'view-joined-room']); + return RocketChat.authz.hasAtLeastOnePermission(['view-c-room', 'view-joined-room']) || RocketChat.settings.get('Accounts_AllowAnonymousAccess') === true; }, showJoinLink(roomId) { diff --git a/packages/rocketchat-ui-sidenav/package.js b/packages/rocketchat-ui-sidenav/package.js index 7b697810b5ed..9cc933c78321 100644 --- a/packages/rocketchat-ui-sidenav/package.js +++ b/packages/rocketchat-ui-sidenav/package.js @@ -24,6 +24,7 @@ Package.onUse(function(api) { api.addFiles('side-nav/combined.html', 'client'); api.addFiles('side-nav/chatRoomItem.html', 'client'); api.addFiles('side-nav/channels.html', 'client'); + api.addFiles('side-nav/channels-anonymous.html', 'client'); api.addFiles('side-nav/createCombinedFlex.html', 'client'); api.addFiles('side-nav/directMessages.html', 'client'); api.addFiles('side-nav/listChannelsFlex.html', 'client'); @@ -41,6 +42,7 @@ Package.onUse(function(api) { api.addFiles('side-nav/combined.coffee', 'client'); api.addFiles('side-nav/chatRoomItem.coffee', 'client'); api.addFiles('side-nav/channels.coffee', 'client'); + api.addFiles('side-nav/channels-anonymous.js', 'client'); api.addFiles('side-nav/createCombinedFlex.coffee', 'client'); api.addFiles('side-nav/directMessages.coffee', 'client'); api.addFiles('side-nav/listChannelsFlex.coffee', 'client'); diff --git a/packages/rocketchat-ui-sidenav/side-nav/channels-anonymous.html b/packages/rocketchat-ui-sidenav/side-nav/channels-anonymous.html new file mode 100644 index 000000000000..71f67470c1ad --- /dev/null +++ b/packages/rocketchat-ui-sidenav/side-nav/channels-anonymous.html @@ -0,0 +1,13 @@ + diff --git a/packages/rocketchat-ui-sidenav/side-nav/channels-anonymous.js b/packages/rocketchat-ui-sidenav/side-nav/channels-anonymous.js new file mode 100644 index 000000000000..ffbc6940d828 --- /dev/null +++ b/packages/rocketchat-ui-sidenav/side-nav/channels-anonymous.js @@ -0,0 +1,24 @@ +Template.channelsAnonymous.helpers({ + isActive() { + const currentRoom = RocketChat.models.Rooms.findOne({ _id: Session.get('openedRoom') }); + console.log(currentRoom); + if (currentRoom) { + return 'active'; + } + }, + + rooms() { + const query = { + t: 'c' + }; + + return RocketChat.models.Rooms.find(query, { sort: { name: 1 } }); + } +}); + +Template.channelsAnonymous.events({ + 'click .more-channels'() { + SideNav.setFlex('listChannelsFlex'); + SideNav.openFlex(); + } +}); diff --git a/packages/rocketchat-ui-sidenav/side-nav/chatRoomItem.coffee b/packages/rocketchat-ui-sidenav/side-nav/chatRoomItem.coffee index 99b126be3492..2b4066017a2b 100644 --- a/packages/rocketchat-ui-sidenav/side-nav/chatRoomItem.coffee +++ b/packages/rocketchat-ui-sidenav/side-nav/chatRoomItem.coffee @@ -19,7 +19,7 @@ Template.chatRoomItem.helpers return RocketChat.roomTypes.getIcon this.t active: -> - if Session.get('openedRoom') is this.rid + if Session.get('openedRoom') and (Session.get('openedRoom') is this.rid or Session.get('openedRoom') is this._id) return 'active' canLeave: -> diff --git a/packages/rocketchat-ui-sidenav/side-nav/sideNav.html b/packages/rocketchat-ui-sidenav/side-nav/sideNav.html index fc187a96f047..389eae9a8b9b 100644 --- a/packages/rocketchat-ui-sidenav/side-nav/sideNav.html +++ b/packages/rocketchat-ui-sidenav/side-nav/sideNav.html @@ -34,6 +34,12 @@

+ {{else}} +
+
+ {{> channelsAnonymous}} +
+
{{/if}}