diff --git a/.meteor/packages b/.meteor/packages index 2ebba48b6d1..f0d44057a8f 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -46,6 +46,7 @@ rocketchat:webrtc #rocketchat:livechat #rocketchat:hubot #rocketchat:irc +rocketchat:importer-test konecty:change-case konecty:delayed-task diff --git a/.meteor/versions b/.meteor/versions index 9f9137e44a7..2d1456e36af 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -110,6 +110,7 @@ rocketchat:favico@0.0.1 rocketchat:file@0.0.1 rocketchat:gitlab@0.0.1 rocketchat:highlight@0.0.1 +rocketchat:importer-test@0.0.1 rocketchat:ldap@0.0.1 rocketchat:lib@0.0.1 rocketchat:logger@0.0.1 diff --git a/client/routes/adminRouter.coffee b/client/routes/adminRouter.coffee index ee8a4ed0e1e..feeedf6aa6e 100644 --- a/client/routes/adminRouter.coffee +++ b/client/routes/adminRouter.coffee @@ -24,6 +24,12 @@ FlowRouter.route '/admin/statistics', action: -> BlazeLayout.render 'main', {center: 'adminStatistics'} +FlowRouter.route '/admin/import', + name: 'admin-import' + triggersEnter: [tabReset] + triggersExit: [tabReset] + action: -> + BlazeLayout.render 'main', {center: 'adminImport'} FlowRouter.route '/admin/:group?', name: 'admin' diff --git a/client/views/admin/adminFlex.html b/client/views/admin/adminFlex.html index cc7ebf87317..77ccfb2fe5b 100644 --- a/client/views/admin/adminFlex.html +++ b/client/views/admin/adminFlex.html @@ -13,6 +13,12 @@ {{/if}} + {{#if hasPermission 'run-import'}} +
  • + Import +
  • + {{/if}} + {{#if hasPermission 'view-room-administration'}}
  • {{_ "Rooms"}} diff --git a/client/views/admin/adminImport.coffee b/client/views/admin/adminImport.coffee new file mode 100644 index 00000000000..71566c46a13 --- /dev/null +++ b/client/views/admin/adminImport.coffee @@ -0,0 +1,18 @@ +Template.adminImport.helpers + isAdmin: -> + return RocketChat.authz.hasRole(Meteor.userId(), 'admin') + isImporters: -> + return Object.keys(RocketChat.importTool.importers).length > 0 + importers: -> + importers = [] + _.each RocketChat.importTool.importers, (importer, key) -> + importer.key = key + importers.push importer + console.log importers + return importers + +Template.adminImport.events + 'click .start-import': (event) -> + importer = @ + + console.log importer diff --git a/client/views/admin/adminImport.html b/client/views/admin/adminImport.html new file mode 100644 index 00000000000..d8f23cad1a3 --- /dev/null +++ b/client/views/admin/adminImport.html @@ -0,0 +1,34 @@ + diff --git a/packages/rocketchat-authorization/server/startup.coffee b/packages/rocketchat-authorization/server/startup.coffee index a8072af4f3c..20e8f3dbb77 100644 --- a/packages/rocketchat-authorization/server/startup.coffee +++ b/packages/rocketchat-authorization/server/startup.coffee @@ -9,6 +9,9 @@ Meteor.startup -> { _id: 'view-statistics', roles : ['admin', 'temp-role']} + { _id: 'run-import', + roles : ['admin']} + { _id: 'view-privileged-setting', roles : ['admin']} @@ -83,5 +86,3 @@ Meteor.startup -> unless role in roles Roles.createRole role roles.push(role) - - diff --git a/packages/rocketchat-importer-test/main.coffee b/packages/rocketchat-importer-test/main.coffee new file mode 100644 index 00000000000..31380c9cdbe --- /dev/null +++ b/packages/rocketchat-importer-test/main.coffee @@ -0,0 +1,19 @@ +### +# Invite is a named function that will replace /invite commands +# @param {Object} message - The message object +### +if Meteor.isClient + Test = undefined +else + class Test + constructor: () -> + console.log 'Importer Test initialized' + prepare: -> + console.log 'test' + doImport: (data) -> + console.log data + +RocketChat.importTool.add 'test', Test, + name: '[Platform X] Import' + fileType: 'application/zip' + description: 'Imports [Platform X] data into Rocket.Chat' diff --git a/packages/rocketchat-importer-test/package.js b/packages/rocketchat-importer-test/package.js new file mode 100644 index 00000000000..98a2d286921 --- /dev/null +++ b/packages/rocketchat-importer-test/package.js @@ -0,0 +1,22 @@ +Package.describe({ + name: 'rocketchat:importer-test', + version: '0.0.1', + summary: 'Importer for test', + git: '' +}); + +Package.onUse(function(api) { + api.versionsFrom('1.0'); + + api.use([ + 'coffeescript', + 'check', + 'rocketchat:lib@0.0.1' + ]); + + api.addFiles('main.coffee'); +}); + +Package.onTest(function(api) { + +}); diff --git a/packages/rocketchat-lib/lib/importTool.coffee b/packages/rocketchat-lib/lib/importTool.coffee new file mode 100644 index 00000000000..c56002cc3f9 --- /dev/null +++ b/packages/rocketchat-lib/lib/importTool.coffee @@ -0,0 +1,48 @@ +RocketChat.importTool = + importers: {} + +RocketChat.importTool.add = (name, importer, options) -> + if not RocketChat.importTool.importers[name]? + RocketChat.importTool.importers[name] = + name: options?.name + importer: importer + fileType: options?.fileType + description: options?.description + + return + +RocketChat.importTool.setup = (name) -> + if RocketChat.importTool.importers[name]?.importer? + importer = RocketChat.importTool.importers[name]?.importer() + RocketChat.importTool.importers[name].importerInstance = importer + +# Takes name and a file stream +RocketChat.importTool.prepare = (name, file) -> + if RocketChat.importTool.importers[name]?.importerInstance? + prepare = RocketChat.importTool.importers[name].importerInstance.prepare + prepare name, file + +# Takes name and object with users / channels selected to import +RocketChat.importTool.import = (name, input) -> + if RocketChat.importTool.importers[name]?.importerInstance? + importer = RocketChat.importTool.importers[name].importerInstance.import + importer name, input + +Meteor.methods + setupImport: (name) -> + if not Meteor.userId() + throw new Meteor.Error 203, t('User_logged_out') + + RocketChat.importTool.setup name + + prepareImport: (name, file) -> + if not Meteor.userId() + throw new Meteor.Error 203, t('User_logged_out') + + RocketChat.importTool.prepare name, file + + startImport: (name, input) -> + if not Meteor.userId() + throw new Meteor.Error 203, t('User_logged_out') + + RocketChat.importTool.import name, input diff --git a/packages/rocketchat-lib/package.js b/packages/rocketchat-lib/package.js index 71da41c68a1..a514c9951ad 100644 --- a/packages/rocketchat-lib/package.js +++ b/packages/rocketchat-lib/package.js @@ -35,6 +35,7 @@ Package.onUse(function(api) { api.addFiles('lib/core.coffee'); api.addFiles('lib/callbacks.coffee'); api.addFiles('lib/slashCommand.coffee'); + api.addFiles('lib/importTool.coffee'); // MODELS SERVER api.addFiles('server/models/_Base.coffee', 'server');