Make use of Capitano permissions feature

This commit is contained in:
Juan Cruz Viotti 2015-01-16 09:34:59 -03:00
parent 5abc4e550f
commit d49677581b
14 changed files with 64 additions and 114 deletions

View File

@ -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 [

View File

@ -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?

View File

@ -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))

View File

@ -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)

View File

@ -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?

View File

@ -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) ->

View File

@ -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

View File

@ -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) ->

View File

@ -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 <id>'
@ -53,6 +52,7 @@ exports.download =
alias: 'o'
}
]
permission: 'user'
action: (params, options, done) ->
osParams =
network: options.network

View File

@ -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)

View File

@ -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: ->

View File

@ -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)

View File

@ -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()

View File

@ -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",