diff --git a/client/views/admin/admin.coffee b/client/views/admin/admin.coffee index 6765518f2de49be4c92719ae589d86a3fdfff19e..0450a3af66c8180c1d9e78e768c46b0963336246 100644 --- a/client/views/admin/admin.coffee +++ b/client/views/admin/admin.coffee @@ -36,8 +36,11 @@ Template.admin.helpers description = 'project:' + description return TAPi18next.t description + sectionIsCustomOath: (section) -> + return /^Custom OAuth:\s.+/.test section + Template.admin.events - "click .submit": (e, t) -> + "click .submit .save": (e, t) -> group = FlowRouter.getParam('group') settings = Settings.find({ group: group }).fetch() console.log 'will save settings', JSON.stringify settings @@ -61,7 +64,42 @@ Template.admin.events return toastr.error TAPi18next.t 'project:Error_updating_settings' if err toastr.success TAPi18next.t 'project:Settings_updated' + "click .submit .add-custom-oauth": (e, t) -> + config = + title: TAPi18next.t 'project:Add_custom_oauth' + text: TAPi18next.t 'project:Give_a_unique_name_for_the_custom_oauth' + type: "input", + showCancelButton: true, + closeOnConfirm: true, + inputPlaceholder: TAPi18next.t 'project:Custom_oauth_unique_name' + + swal config, (inputValue) -> + if inputValue is false + return false + + if inputValue is "" + swal.showInputError TAPi18next.t 'project:Name_cant_be_empty' + return false + + Meteor.call 'addOAuthService', inputValue + + "click .submit .remove-custom-oauth": (e, t) -> + name = this.section.replace('Custom OAuth: ', '') + config = + title: TAPi18next.t 'project:Are_you_sure' + type: "input", + type: 'warning' + showCancelButton: true + confirmButtonColor: '#DD6B55' + confirmButtonText: TAPi18next.t 'project:Yes_delete_it' + cancelButtonText: TAPi18next.t 'project:Cancel' + closeOnConfirm: true + + swal config, -> + Meteor.call 'removeOAuthService', name + + Template.admin.onRendered -> Tracker.afterFlush -> SideNav.setFlex "adminFlex" - SideNav.openFlex() \ No newline at end of file + SideNav.openFlex() diff --git a/client/views/admin/admin.html b/client/views/admin/admin.html index b559af0e10cb1f03f1386205baa5b43a2a3939a6..0303b9f8e096916955b2957cc825ce52b76eace1 100644 --- a/client/views/admin/admin.html +++ b/client/views/admin/admin.html @@ -63,15 +63,26 @@ </div> {{/if}} {{/each}} + + {{#if section}} + {{#if sectionIsCustomOath section}} + <div class="submit"> + <button class="button delete remove-custom-oauth"><span>{{_ "Remove_custom_oauth"}}</span></button> + </div> + {{/if}} + {{/if}} </div> </div> {{/each}} </fieldset> <div class="submit"> - <button class="button"><i class="icon-send"></i><span>{{_ "Save_changes"}}</span></button> + {{#if $eq group._id 'Accounts'}} + <button class="button secondary add-custom-oauth"><span>{{_ "Add_custom_oauth"}}</span></button> + {{/if}} + <button class="button save"><i class="icon-send"></i><span>{{_ "Save_changes"}}</span></button> </div> </div> {{/unless}} </div> </section> -</template> \ No newline at end of file +</template> diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 9c414f0a6c74e88ac26282ed128349a93048a621..f1dbd0891f2672febc69b4f82ce84d362a5b0ec6 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -35,6 +35,7 @@ "Accounts_OAuth_Custom_Button_Label_Color" : "Button Text Color", "Accounts_OAuth_Custom_Button_Color" : "Button Color", "Activate" : "Activate", + "Add_custom_oauth" : "Add custom oauth", "Add_Members" : "Add Members", "Add_users" : "Add users", "Administration" : "Administration", @@ -79,6 +80,7 @@ "Create_new_private_group" : "Create a new private group", "Create_new_public_channel" : "Create a new public channel", "Created_at" : "Created at", + "Custom_oauth_unique_name" : "Custom oauth unique name", "days" : "days", "Deactivate" : "Deactivate", "Delete_User_Warning" : "Deleting a user will delete all messages from that user as well. This cannot be undone.", @@ -109,6 +111,7 @@ "General": "General", "Get_to_know_the_team" : "Get to know the Rocket.Team", "github_no_public_email" : "You don't have any email as public email in your GitHub account", + "Give_a_unique_name_for_the_custom_oauth" : "Give a unique name for the custom oauth", "Have_your_own_chat" : "Have your own web chat. Developed with Meteor.com, the Rocket.Chat is a great solution for developers looking forward to build and evolve their own chat platform.", "Has_more" : "Has more", "Hide_room" : "Hide room", @@ -193,6 +196,7 @@ "My_Account" : "My Account", "n_messages" : "%s messages", "Name" : "Name", + "Name_cant_be_empty" : "Name can't be empty", "New_messages" : "New messages", "New_password" : "New password", "No_channels_yet" : "You aren't part of any channel yet.", @@ -244,6 +248,7 @@ "Registration_Succeeded" : "Registration Succeeded", "Remember_me" : "Remember me", "Remove" : "Remove", + "Remove_custom_oauth" : "Remove custom oauth", "Remove_Admin" : "Remove Admin", "Reset_password" : "Reset password", "Room" : "Room", diff --git a/packages/rocketchat-authorization/client/hasPermission.coffee b/packages/rocketchat-authorization/client/hasPermission.coffee index 5155bf54c486b533ad4daa88aaee23662077d545..8efa87d497734730fa98853403977176780290fe 100644 --- a/packages/rocketchat-authorization/client/hasPermission.coffee +++ b/packages/rocketchat-authorization/client/hasPermission.coffee @@ -9,7 +9,7 @@ all = (toFind, toSearch) -> return _.isEmpty( _.difference( toFind, toSearch)) Template.registerHelper 'hasPermission', (permission, scope) -> - unless _.isString( scope ) + unless _.isString( scope ) scope = Roles.GLOBAL_GROUP return hasPermission( permission, scope, atLeastOne) @@ -31,7 +31,7 @@ hasPermission = (permissions, scope=Roles.GLOBAL_GROUP, strategy) -> unless _.isArray(permissions) permissions = [permissions] - roleNames = Roles.getRolesForUser(userId, scope) + roleNames = Roles.getRolesForUser(userId, scope) userPermissions = [] for roleName in roleNames diff --git a/packages/rocketchat-authorization/server/startup.coffee b/packages/rocketchat-authorization/server/startup.coffee index 9edeec2d97582b78fb11f5d6187d55606f05ba16..c684bd25d86987a3da6c01bc1ee180ed1e777adc 100644 --- a/packages/rocketchat-authorization/server/startup.coffee +++ b/packages/rocketchat-authorization/server/startup.coffee @@ -6,70 +6,70 @@ Meteor.startup -> # 2. admin, moderator, and user roles should not be deleted as they are referened in the code. permissions = [ - { _id: 'view-statistics', + { _id: 'view-statistics', roles : ['admin', 'temp-role']} - { _id: 'view-privileged-setting', + { _id: 'view-privileged-setting', roles : ['admin']} - { _id: 'edit-privileged-setting', + { _id: 'edit-privileged-setting', roles : ['admin']} - { _id: 'view-room-administration', + { _id: 'view-room-administration', roles : ['admin']} - { _id: 'view-user-administration', + { _id: 'view-user-administration', roles : ['admin']} - { _id: 'view-full-other-user-info', + { _id: 'view-full-other-user-info', roles : ['admin']} - { _id: 'edit-other-user-info', + { _id: 'edit-other-user-info', roles : ['admin']} - { _id: 'assign-admin-role', + { _id: 'assign-admin-role', roles : ['admin']} - { _id: 'edit-other-user-active-status', + { _id: 'edit-other-user-active-status', roles : ['admin', 'site-moderator']} - { _id: 'delete-user', + { _id: 'delete-user', roles : ['admin']} - { _id: 'view-other-user-channels', + { _id: 'view-other-user-channels', roles : ['admin']} - { _id: 'add-oath-service', + { _id: 'add-oauth-service', roles : ['admin']} - { _id: 'run-migration', + { _id: 'run-migration', roles : ['admin']} - { _id: 'create-c', + { _id: 'create-c', roles : ['admin', 'site-moderator', 'user']} - { _id: 'delete-c', + { _id: 'delete-c', roles : ['admin', 'site-moderator']} - { _id: 'edit-room', + { _id: 'edit-room', roles : ['admin', 'site-moderator', 'moderator']} - { _id: 'edit-message', + { _id: 'edit-message', roles : ['admin', 'site-moderator', 'moderator']} - { _id: 'delete-message', + { _id: 'delete-message', roles : ['admin', 'site-moderator', 'moderator']} - { _id: 'ban-user', + { _id: 'ban-user', roles : ['admin', 'site-moderator', 'moderator']} - { _id: 'create-p', + { _id: 'create-p', roles : ['admin', 'site-moderator', 'user']} - { _id: 'delete-p', + { _id: 'delete-p', roles : ['admin', 'site-moderator']} - { _id: 'delete-d', + { _id: 'delete-d', roles : ['admin', 'site-moderator']} ] diff --git a/packages/rocketchat-lib/settings/server/addOAuthService.coffee b/packages/rocketchat-lib/settings/server/addOAuthService.coffee index 8a42ff2df70c3fe6d317606803ac801b7a880bab..479877939ac4bd8ab575e310c96e9ef9c0cabe4d 100644 --- a/packages/rocketchat-lib/settings/server/addOAuthService.coffee +++ b/packages/rocketchat-lib/settings/server/addOAuthService.coffee @@ -5,17 +5,38 @@ Meteor.methods console.log '[methods] addOAuthService -> '.green, 'userId:', Meteor.userId(), 'arguments:', arguments - unless RocketChat.authz.hasALeastOnePermission( Meteor.userId(), 'add-oath-service') is true + unless RocketChat.authz.hasPermission( Meteor.userId(), 'add-oauth-service') is true throw new Meteor.Error 'not-authorized', '[methods] addOAuthService -> Not authorized' name = s.capitalize(name) - RocketChat.settings.add "Accounts_OAuth_Custom_#{name}" , false , { type: 'boolean', group: 'Accounts', section: name, i18nLabel: 'Accounts_OAuth_Custom_Enable'} - RocketChat.settings.add "Accounts_OAuth_Custom_#{name}_url" , '' , { type: 'string' , group: 'Accounts', section: name, i18nLabel: 'Accounts_OAuth_Custom_URL'} - RocketChat.settings.add "Accounts_OAuth_Custom_#{name}_token_path" , '/oauth/token' , { type: 'string' , group: 'Accounts', section: name, i18nLabel: 'Accounts_OAuth_Custom_Token_Path'} - RocketChat.settings.add "Accounts_OAuth_Custom_#{name}_identity_path" , '/me' , { type: 'string' , group: 'Accounts', section: name, i18nLabel: 'Accounts_OAuth_Custom_Identity_Path'} - RocketChat.settings.add "Accounts_OAuth_Custom_#{name}_authorize_path" , '/oauth/authorize', { type: 'string' , group: 'Accounts', section: name, i18nLabel: 'Accounts_OAuth_Custom_Authorize_Path'} - RocketChat.settings.add "Accounts_OAuth_Custom_#{name}_id" , '' , { type: 'string' , group: 'Accounts', section: name, i18nLabel: 'Accounts_OAuth_Custom_ID'} - RocketChat.settings.add "Accounts_OAuth_Custom_#{name}_secret" , '' , { type: 'string' , group: 'Accounts', section: name, i18nLabel: 'Accounts_OAuth_Custom_Secret'} - RocketChat.settings.add "Accounts_OAuth_Custom_#{name}_button_label_text" , '' , { type: 'string' , group: 'Accounts', section: name, i18nLabel: 'Accounts_OAuth_Custom_Button_Label_Text'} - RocketChat.settings.add "Accounts_OAuth_Custom_#{name}_button_label_color", '#FFFFFF' , { type: 'string' , group: 'Accounts', section: name, i18nLabel: 'Accounts_OAuth_Custom_Button_Label_Color'} - RocketChat.settings.add "Accounts_OAuth_Custom_#{name}_button_color" , '#13679A' , { type: 'string' , group: 'Accounts', section: name, i18nLabel: 'Accounts_OAuth_Custom_Button_Color'} + RocketChat.settings.add "Accounts_OAuth_Custom_#{name}" , false , { type: 'boolean', group: 'Accounts', section: "Custom OAuth: #{name}", i18nLabel: 'Accounts_OAuth_Custom_Enable'} + RocketChat.settings.add "Accounts_OAuth_Custom_#{name}_url" , '' , { type: 'string' , group: 'Accounts', section: "Custom OAuth: #{name}", i18nLabel: 'Accounts_OAuth_Custom_URL'} + RocketChat.settings.add "Accounts_OAuth_Custom_#{name}_token_path" , '/oauth/token' , { type: 'string' , group: 'Accounts', section: "Custom OAuth: #{name}", i18nLabel: 'Accounts_OAuth_Custom_Token_Path'} + RocketChat.settings.add "Accounts_OAuth_Custom_#{name}_identity_path" , '/me' , { type: 'string' , group: 'Accounts', section: "Custom OAuth: #{name}", i18nLabel: 'Accounts_OAuth_Custom_Identity_Path'} + RocketChat.settings.add "Accounts_OAuth_Custom_#{name}_authorize_path" , '/oauth/authorize', { type: 'string' , group: 'Accounts', section: "Custom OAuth: #{name}", i18nLabel: 'Accounts_OAuth_Custom_Authorize_Path'} + RocketChat.settings.add "Accounts_OAuth_Custom_#{name}_id" , '' , { type: 'string' , group: 'Accounts', section: "Custom OAuth: #{name}", i18nLabel: 'Accounts_OAuth_Custom_ID'} + RocketChat.settings.add "Accounts_OAuth_Custom_#{name}_secret" , '' , { type: 'string' , group: 'Accounts', section: "Custom OAuth: #{name}", i18nLabel: 'Accounts_OAuth_Custom_Secret'} + RocketChat.settings.add "Accounts_OAuth_Custom_#{name}_button_label_text" , '' , { type: 'string' , group: 'Accounts', section: "Custom OAuth: #{name}", i18nLabel: 'Accounts_OAuth_Custom_Button_Label_Text'} + RocketChat.settings.add "Accounts_OAuth_Custom_#{name}_button_label_color", '#FFFFFF' , { type: 'string' , group: 'Accounts', section: "Custom OAuth: #{name}", i18nLabel: 'Accounts_OAuth_Custom_Button_Label_Color'} + RocketChat.settings.add "Accounts_OAuth_Custom_#{name}_button_color" , '#13679A' , { type: 'string' , group: 'Accounts', section: "Custom OAuth: #{name}", i18nLabel: 'Accounts_OAuth_Custom_Button_Color'} + + removeOAuthService: (name) -> + if not Meteor.userId() + throw new Meteor.Error('invalid-user', "[methods] addOAuthService -> Invalid user") + + console.log '[methods] addOAuthService -> '.green, 'userId:', Meteor.userId(), 'arguments:', arguments + + unless RocketChat.authz.hasPermission( Meteor.userId(), 'add-oauth-service') is true + throw new Meteor.Error 'not-authorized', '[methods] addOAuthService -> Not authorized' + + name = s.capitalize(name) + Settings.remove _id: "Accounts_OAuth_Custom_#{name}" + Settings.remove _id: "Accounts_OAuth_Custom_#{name}_url" + Settings.remove _id: "Accounts_OAuth_Custom_#{name}_token_path" + Settings.remove _id: "Accounts_OAuth_Custom_#{name}_identity_path" + Settings.remove _id: "Accounts_OAuth_Custom_#{name}_authorize_path" + Settings.remove _id: "Accounts_OAuth_Custom_#{name}_id" + Settings.remove _id: "Accounts_OAuth_Custom_#{name}_secret" + Settings.remove _id: "Accounts_OAuth_Custom_#{name}_button_label_text" + Settings.remove _id: "Accounts_OAuth_Custom_#{name}_button_label_color" + Settings.remove _id: "Accounts_OAuth_Custom_#{name}_button_color"