From 7bd299f6da870bcd23b753dbf331575f4fbba595 Mon Sep 17 00:00:00 2001 From: Marcelo Schmidt Date: Wed, 12 Aug 2015 17:55:36 -0300 Subject: [PATCH] Settings/Users --- client/methods/setUserActiveStatus.coffee | 4 ++ client/views/settings/settingsUsers.coffee | 45 +++++++++++++++++++--- client/views/settings/settingsUsers.html | 7 +++- server/lib/accounts.coffee | 4 ++ server/methods/deleteUser.coffee | 11 ++++++ server/methods/setUserActiveStatus.coffee | 15 ++++++++ server/publications/fullUsers.coffee | 8 ++-- server/startup/migrations/v13.coffee | 7 ++++ 8 files changed, 90 insertions(+), 11 deletions(-) create mode 100644 client/methods/setUserActiveStatus.coffee create mode 100644 server/methods/deleteUser.coffee create mode 100644 server/methods/setUserActiveStatus.coffee create mode 100644 server/startup/migrations/v13.coffee diff --git a/client/methods/setUserActiveStatus.coffee b/client/methods/setUserActiveStatus.coffee new file mode 100644 index 00000000000..ac4c9614e43 --- /dev/null +++ b/client/methods/setUserActiveStatus.coffee @@ -0,0 +1,4 @@ +Meteor.methods + setUserActiveStatus: (userId, active) -> + Meteor.users.update userId, { $set: { active: active } } + return true \ No newline at end of file diff --git a/client/views/settings/settingsUsers.coffee b/client/views/settings/settingsUsers.coffee index 068855c5d89..fe2e3b3c869 100644 --- a/client/views/settings/settingsUsers.coffee +++ b/client/views/settings/settingsUsers.coffee @@ -10,8 +10,7 @@ Template.settingsUsers.helpers query = { $or: [ { username: filterReg }, { name: filterReg }, { "emails.address": filterReg } ] } else query = {} - - return Meteor.users.find(query).fetch() + return Meteor.users.find(query, { limit: Template.instance().limit?.get(), sort: { username: 1 } }).fetch() name: -> return if @name then @name else TAPi18next.t 'project:Unnamed' email: -> @@ -40,17 +39,14 @@ Template.settingsUsers.helpers Template.settingsUsers.onCreated -> instance = @ - @loaded = new ReactiveVar 0 @limit = new ReactiveVar 50 - @skip = new ReactiveVar 0 @filter = new ReactiveVar '' @ready = new ReactiveVar true @autorun -> filter = instance.filter.get() limit = instance.limit.get() - skip = instance.skip.get() - subscription = instance.subscribe 'fullUsers', filter, limit, skip + subscription = instance.subscribe 'fullUsers', filter, limit instance.ready.set subscription.ready() Template.settingsUsers.onRendered -> @@ -79,3 +75,40 @@ Template.settingsUsers.events e.preventDefault() Session.set 'settingsUsersSelected', $(e.currentTarget).data('id') Session.set 'flexOpened', true + + 'click .deactivate': -> + Meteor.call 'setUserActiveStatus', Session.get('settingsUsersSelected'), false, (error, result) -> + if result + toastr.success t('User_has_been_deactivated') + if error + toastr.error error.reason + + 'click .activate': -> + Meteor.call 'setUserActiveStatus', Session.get('settingsUsersSelected'), true, (error, result) -> + if result + toastr.success t('User_has_been_activated') + if error + toastr.error error.reason + + 'click .delete': -> + swal { + title: t('Are_you_sure') + text: t('Delete_User_Warning') + type: 'warning' + showCancelButton: true + confirmButtonColor: '#DD6B55' + confirmButtonText: t('Yes_delete_it') + cancelButtonText: t('Cancel') + closeOnConfirm: false + html: false + }, -> + swal + title: t('Deleted') + text: t('User_has_been_deleted') + type: 'success' + timer: 2000 + showConfirmButton: false + + Meteor.call 'deleteUser', Session.get('settingsUsersSelected'), (error, result) -> + if error + toastr.error error.reason \ No newline at end of file diff --git a/client/views/settings/settingsUsers.html b/client/views/settings/settingsUsers.html index daaba1d347a..3d03106b411 100644 --- a/client/views/settings/settingsUsers.html +++ b/client/views/settings/settingsUsers.html @@ -56,7 +56,8 @@ {{> avatar username=username}}
-

{{username}}

+

{{name}}

+

{{username}}

{{#if utcOffset}}

{{utcOffset}}

{{/if}} {{#each emails}}

{{address}}{{#if verified}} {{/if}}

{{/each}} {{#each phone}}

{{phoneNumber}}

{{/each}} @@ -64,7 +65,11 @@
{{/with}} diff --git a/server/lib/accounts.coffee b/server/lib/accounts.coffee index a9b5a2c68f7..6d1dfc91310 100644 --- a/server/lib/accounts.coffee +++ b/server/lib/accounts.coffee @@ -53,6 +53,10 @@ Accounts.validateLoginAttempt (login) -> if login.allowed isnt true return login.allowed + if login.user?.active isnt true + throw new Meteor.Error 'inactive-user', 'Your_user_has_been_deactivated' + return false + if login.type is 'password' and RocketChat.settings.get 'Accounts_denyUnverifiedEmails' is true validEmail = login.user.emails.filter (email) -> return email.verified is true diff --git a/server/methods/deleteUser.coffee b/server/methods/deleteUser.coffee new file mode 100644 index 00000000000..fd935f0f9a4 --- /dev/null +++ b/server/methods/deleteUser.coffee @@ -0,0 +1,11 @@ +Meteor.methods + deleteUser: (userId) -> + if not Meteor.userId() + throw new Meteor.Error('invalid-user', "[methods] deleteUser -> Invalid user") + + user = Meteor.users.findOne Meteor.userId() + unless user?.admin is true + throw new Meteor.Error 'not-authorized', '[methods] deleteUser -> Not authorized' + + return true + # Meteor.users.remove userId \ No newline at end of file diff --git a/server/methods/setUserActiveStatus.coffee b/server/methods/setUserActiveStatus.coffee new file mode 100644 index 00000000000..e56878646f3 --- /dev/null +++ b/server/methods/setUserActiveStatus.coffee @@ -0,0 +1,15 @@ +Meteor.methods + setUserActiveStatus: (userId, active) -> + if not Meteor.userId() + throw new Meteor.Error 'invalid-user', '[methods] setUserActiveStatus -> Invalid user' + + user = Meteor.users.findOne Meteor.userId() + unless user?.admin is true + throw new Meteor.Error 'not-authorized', '[methods] setUserActiveStatus -> Not authorized' + + Meteor.users.update userId, { $set: { active: active } } + + if active is false + Meteor.users.update userId, { $set: { "services.resume.loginTokens" : [] } } + + return true \ No newline at end of file diff --git a/server/publications/fullUsers.coffee b/server/publications/fullUsers.coffee index 5ccbe2470f3..6073f2452b5 100644 --- a/server/publications/fullUsers.coffee +++ b/server/publications/fullUsers.coffee @@ -1,4 +1,4 @@ -Meteor.publish 'fullUsers', (filter, limit, skip) -> +Meteor.publish 'fullUsers', (filter, limit) -> unless this.userId return this.ready() @@ -15,7 +15,7 @@ Meteor.publish 'fullUsers', (filter, limit, skip) -> limit = Math.min limit, 50 - console.log '[publish] fullUsers'.green, filter, limit, skip + console.log '[publish] fullUsers'.green, filter, limit Meteor.users.find query, fields: @@ -31,6 +31,6 @@ Meteor.publish 'fullUsers', (filter, limit, skip) -> utcOffset: 1 language: 1 lastLogin: 1 - utcOffset: 1 + active: 1 limit: limit - skip: skip + sort: { username: 1 } \ No newline at end of file diff --git a/server/startup/migrations/v13.coffee b/server/startup/migrations/v13.coffee new file mode 100644 index 00000000000..be8b90dbee5 --- /dev/null +++ b/server/startup/migrations/v13.coffee @@ -0,0 +1,7 @@ +Meteor.startup -> + Migrations.add + version: 13 + up: -> + # Set all current users as active + Meteor.users.update {}, { $set: { active: true } }, { multi: true } + console.log "Set all users as active" \ No newline at end of file