From d49677581b59fa6e7e6b670e99fea6b90373b3f8 Mon Sep 17 00:00:00 2001 From: Juan Cruz Viotti Date: Fri, 16 Jan 2015 09:34:59 -0300 Subject: [PATCH] Make use of Capitano permissions feature --- lib/actions/app.coffee | 19 +++++--- lib/actions/auth.coffee | 7 +-- lib/actions/device.coffee | 19 +++++--- lib/actions/environment-variables.coffee | 13 ++++-- lib/actions/examples.coffee | 10 ++-- lib/actions/keys.coffee | 13 ++++-- lib/actions/logs.coffee | 4 +- lib/actions/notes.coffee | 4 +- lib/actions/os.coffee | 2 +- lib/actions/preferences.coffee | 4 +- lib/app.coffee | 6 +++ lib/permissions/permissions.coffee | 16 ------- lib/permissions/permissions.spec.coffee | 59 ------------------------ package.json | 2 +- 14 files changed, 64 insertions(+), 114 deletions(-) delete mode 100644 lib/permissions/permissions.coffee delete mode 100644 lib/permissions/permissions.spec.coffee diff --git a/lib/actions/app.coffee b/lib/actions/app.coffee index 9a28f96d..fd18ebea 100644 --- a/lib/actions/app.coffee +++ b/lib/actions/app.coffee @@ -2,7 +2,6 @@ _ = require('lodash-contrib') async = require('async') resin = require('resin-sdk') ui = require('../ui') -permissions = require('../permissions/permissions') commandOptions = require('./command-options') exports.create = @@ -29,7 +28,8 @@ exports.create = alias: 't' } ] - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> async.waterfall([ (callback) -> @@ -58,7 +58,8 @@ exports.list = Examples: $ resin apps ''' - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> resin.models.application.getAll (error, applications) -> return done(error) if error? console.log ui.widgets.table.horizontal applications, [ @@ -79,7 +80,8 @@ exports.info = Examples: $ resin app 91 ''' - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> resin.models.application.get params.id, (error, application) -> return done(error) if error? console.log ui.widgets.table.vertical application, [ @@ -100,7 +102,8 @@ exports.restart = Examples: $ resin app restart 91 ''' - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> resin.models.application.restart(params.id, done) exports.remove = @@ -117,7 +120,8 @@ exports.remove = $ resin app rm 91 --yes ''' options: [ commandOptions.yes ] - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> ui.patterns.remove 'application', options.yes, (callback) -> resin.models.application.remove(params.id, callback) , done @@ -134,7 +138,8 @@ exports.init = Examples: $ cd myApp && resin init 91 ''' - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> currentDirectory = process.cwd() async.waterfall [ diff --git a/lib/actions/auth.coffee b/lib/actions/auth.coffee index 6ec8ca49..6919419d 100644 --- a/lib/actions/auth.coffee +++ b/lib/actions/auth.coffee @@ -3,7 +3,6 @@ url = require('url') async = require('async') resin = require('resin-sdk') ui = require('../ui') -permissions = require('../permissions/permissions') helpers = require('../helpers/helpers') exports.login = @@ -43,7 +42,8 @@ exports.logout = Examples: $ resin logout ''' - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> resin.auth.logout(done) exports.signup = @@ -90,7 +90,8 @@ exports.whoami = Examples: $ resin whoami ''' - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> resin.auth.whoami (error, username) -> if not username? diff --git a/lib/actions/device.coffee b/lib/actions/device.coffee index 2ba943ca..31340dc5 100644 --- a/lib/actions/device.coffee +++ b/lib/actions/device.coffee @@ -2,7 +2,6 @@ _ = require('lodash-contrib') async = require('async') resin = require('resin-sdk') ui = require('../ui') -permissions = require('../permissions/permissions') commandOptions = require('./command-options') exports.list = @@ -15,7 +14,8 @@ exports.list = $ resin devices --application 91 ''' options: [ commandOptions.application ] - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> resin.models.device.getAllByApplication options.application, (error, devices) -> return done(error) if error? console.log ui.widgets.table.horizontal devices, [ @@ -39,7 +39,8 @@ exports.info = Examples: $ resin device 317 ''' - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> resin.models.device.get params.id, (error, device) -> return done(error) if error? console.log ui.widgets.table.vertical device, [ @@ -74,7 +75,8 @@ exports.remove = $ resin device rm 317 --yes ''' options: [ commandOptions.yes ] - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> ui.patterns.remove 'device', options.yes, (callback) -> resin.models.device.remove(params.id, callback) , done @@ -90,7 +92,8 @@ exports.identify = Examples: $ resin device identify 23c73a12e3527df55c60b9ce647640c1b7da1b32d71e6a39849ac0f00db828 ''' - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> resin.models.device.identify(params.uuid, done) exports.rename = @@ -105,7 +108,8 @@ exports.rename = $ resin device rename 317 MyPi $ resin device rename 317 ''' - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> async.waterfall [ (callback) -> @@ -127,6 +131,7 @@ exports.supported = Examples: $ resin devices supported ''' - action: permissions.user -> + permission: 'user' + action: -> devices = resin.models.device.getSupportedDeviceTypes() _.each(devices, _.unary(console.log)) diff --git a/lib/actions/environment-variables.coffee b/lib/actions/environment-variables.coffee index d2a975c5..47578eb5 100644 --- a/lib/actions/environment-variables.coffee +++ b/lib/actions/environment-variables.coffee @@ -1,7 +1,6 @@ _ = require('lodash-contrib') resin = require('resin-sdk') ui = require('../ui') -permissions = require('../permissions/permissions') commandOptions = require('./command-options') exports.list = @@ -29,7 +28,8 @@ exports.list = alias: 'v' } ] - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> resin.models.environmentVariables.getAllByApplication options.application, (error, environmentVariables) -> return done(error) if error? @@ -55,7 +55,8 @@ exports.remove = $ resin env rm 215 --yes ''' options: [ commandOptions.yes ] - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> ui.patterns.remove 'environment variable', options.yes, (callback) -> resin.models.environmentVariables.remove(params.id, callback) , done @@ -79,7 +80,8 @@ exports.add = $ resin env add TERM -a 91 ''' options: [ commandOptions.application ] - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> if not params.value? params.value = process.env[params.key] @@ -99,5 +101,6 @@ exports.rename = Examples: $ resin env rename 376 emacs ''' - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> resin.models.environmentVariables.update(params.id, params.value, done) diff --git a/lib/actions/examples.coffee b/lib/actions/examples.coffee index c0b40aaa..dc261031 100644 --- a/lib/actions/examples.coffee +++ b/lib/actions/examples.coffee @@ -4,7 +4,6 @@ path = require('path') _ = require('lodash') gitCli = require('git-cli') resin = require('resin-sdk') -permissions = require('../permissions/permissions') ui = require('../ui') examplesData = require('../data/examples.json') @@ -17,7 +16,8 @@ exports.list = Example: $ resin examples ''' - action: permissions.user -> + permission: 'user' + action: -> examplesData = _.map examplesData, (example, index) -> example.id = index + 1 return example @@ -42,7 +42,8 @@ exports.info = Example: $ resin example 3 ''' - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> id = params.id - 1 example = examplesData[id] @@ -74,7 +75,8 @@ exports.clone = Example: $ resin example clone 3 ''' - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> example = examplesData[params.id - 1] if not example? diff --git a/lib/actions/keys.coffee b/lib/actions/keys.coffee index 1d394b64..be0548c2 100644 --- a/lib/actions/keys.coffee +++ b/lib/actions/keys.coffee @@ -5,7 +5,6 @@ fs = require('fs') resin = require('resin-sdk') helpers = require('../helpers/helpers') ui = require('../ui') -permissions = require('../permissions/permissions') commandOptions = require('./command-options') exports.list = @@ -17,7 +16,8 @@ exports.list = Examples: $ resin keys ''' - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> resin.models.key.getAll (error, keys) -> return done(error) if error? console.log ui.widgets.table.horizontal keys, [ 'ID', 'Title' ] @@ -32,7 +32,8 @@ exports.info = Examples: $ resin key 17 ''' - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> resin.models.key.get params.id, (error, key) -> return done(error) if error? key.public_key = '\n' + _.str.chop(key.public_key, resin.settings.get('sshKeyWidth')).join('\n') @@ -53,7 +54,8 @@ exports.remove = $ resin key rm 17 --yes ''' options: [ commandOptions.yes ] - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> ui.patterns.remove 'key', options.yes, (callback) -> resin.models.key.remove(params.id, callback) , done @@ -71,7 +73,8 @@ exports.add = $ resin key add Main ~/.ssh/id_rsa.pub $ cat ~/.ssh/id_rsa.pub | resin key add Main ''' - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> async.waterfall [ (callback) -> diff --git a/lib/actions/logs.coffee b/lib/actions/logs.coffee index 6c74e66d..a5fa1baa 100644 --- a/lib/actions/logs.coffee +++ b/lib/actions/logs.coffee @@ -1,6 +1,5 @@ _ = require('lodash') resin = require('resin-sdk') -permissions = require('../permissions/permissions') LOGS_HISTORY_COUNT = 200 @@ -41,7 +40,8 @@ exports.logs = alias: 't' } ] - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> resin.logs.subscribe params.uuid, { history: options.num or LOGS_HISTORY_COUNT tail: options.tail diff --git a/lib/actions/notes.coffee b/lib/actions/notes.coffee index 779ac4b0..bdd4b1a2 100644 --- a/lib/actions/notes.coffee +++ b/lib/actions/notes.coffee @@ -1,5 +1,4 @@ async = require('async') -permissions = require('../permissions/permissions') helpers = require('../helpers/helpers') resin = require('resin-sdk') @@ -24,7 +23,8 @@ exports.set = alias: [ 'd', 'dev' ] required: 'You have to specify a device' ] - action: permissions.user (params, options, done) -> + permission: 'user' + action: (params, options, done) -> async.waterfall([ (callback) -> diff --git a/lib/actions/os.coffee b/lib/actions/os.coffee index 058d08f8..5e2ef131 100644 --- a/lib/actions/os.coffee +++ b/lib/actions/os.coffee @@ -4,7 +4,6 @@ path = require('path') mkdirp = require('mkdirp') ProgressBar = require('progress') resin = require('resin-sdk') -permissions = require('../permissions/permissions') exports.download = signature: 'os download ' @@ -53,6 +52,7 @@ exports.download = alias: 'o' } ] + permission: 'user' action: (params, options, done) -> osParams = network: options.network diff --git a/lib/actions/preferences.coffee b/lib/actions/preferences.coffee index 3d25655c..d0a61590 100644 --- a/lib/actions/preferences.coffee +++ b/lib/actions/preferences.coffee @@ -1,7 +1,6 @@ open = require('open') url = require('url') resin = require('resin-sdk') -permissions = require('../permissions/permissions') exports.preferences = signature: 'preferences' @@ -15,7 +14,8 @@ exports.preferences = Examples: $ resin preferences ''' - action: permissions.user -> + permission: 'user' + action: -> preferencesUrl = resin.settings.get('urls.preferences') absUrl = url.resolve(resin.settings.get('remoteUrl'), preferencesUrl) open(absUrl) diff --git a/lib/app.coffee b/lib/app.coffee index 32edbbc3..92270c5c 100644 --- a/lib/app.coffee +++ b/lib/app.coffee @@ -6,6 +6,12 @@ actions = require('./actions') errors = require('./errors/errors') plugin = require('./plugin/plugin') +capitano.permission 'user', (done) -> + resin.auth.isLoggedIn (isLoggedIn) -> + if not isLoggedIn + return done(new Error('You have to log in')) + return done() + capitano.command signature: '*' action: -> diff --git a/lib/permissions/permissions.coffee b/lib/permissions/permissions.coffee deleted file mode 100644 index 51a53963..00000000 --- a/lib/permissions/permissions.coffee +++ /dev/null @@ -1,16 +0,0 @@ -resin = require('resin-sdk') - -exports.user = (fn, onError) -> - return -> - args = arguments - resin.auth.isLoggedIn (isLoggedIn) -> - - if not isLoggedIn - error = new Error('You have to log in') - if onError? - return onError(error) - else - console.error(error.message) - process.exit(1) - - fn.apply(null, args) diff --git a/lib/permissions/permissions.spec.coffee b/lib/permissions/permissions.spec.coffee deleted file mode 100644 index 546c4b83..00000000 --- a/lib/permissions/permissions.spec.coffee +++ /dev/null @@ -1,59 +0,0 @@ -_ = require('lodash') -sinon = require('sinon') -expect = require('chai').expect -resin = require('resin-sdk') -permissions = require('./permissions') - -describe 'Permissions:', -> - - describe '#user()', -> - - describe 'if not logged in', -> - - beforeEach -> - @isLoggedInStub = sinon.stub(resin.auth, 'isLoggedIn') - @isLoggedInStub.yields(false) - - afterEach -> - @isLoggedInStub.restore() - - it 'should not call the function', (done) -> - spy = sinon.spy() - permissions.user(spy, _.noop)() - - _.defer -> - expect(spy).to.not.have.been.called - done() - - it 'it should call the second function with an error', (done) -> - func = permissions.user _.noop, (error) -> - expect(error).to.be.an.instanceof(Error) - done() - func() - - describe 'if logged in', -> - - beforeEach -> - @isLoggedInStub = sinon.stub(resin.auth, 'isLoggedIn') - @isLoggedInStub.yields(true) - - afterEach -> - @isLoggedInStub.restore() - - it 'should call the function with the correct arguments', (done) -> - args = [ 1, 2, 3, 'foo', 'bar' ] - - spy = sinon.spy() - permissions.user(spy, _.noop).apply(null, args) - - _.defer -> - expect(spy).to.have.been.calledWith(args...) - done() - - it 'should not call the second function', (done) -> - spy = sinon.spy() - permissions.user(_.noop, spy)() - - _.defer -> - expect(spy).to.not.have.been.called - done() diff --git a/package.json b/package.json index 8ae5db15..960819c8 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ }, "dependencies": { "async": "~0.9.0", - "capitano": "~1.2.0", + "capitano": "~1.3.0", "cliff": "~0.1.9", "coffee-script": "~1.8.0", "conf.js": "^0.1.1",