UNPKG

erm-cli

Version:

Reekoh CLI - command line tool for publishing reekoh plugins.

159 lines (142 loc) 4.45 kB
let _ = require('lodash') let service = require('./service') let path = require('path') class Command { login (options) { let data = {} service.getUserCredentials(options).then(credentials => { if (_.isEmpty(credentials)) { process.exit() } data.credentials = credentials credentials.email = credentials.username return service.userAuth(credentials) }).then(({idToken}) => { return service.getUserRoles(idToken) }).then(userRoles => { data.userRoles = userRoles return service.selectUserRole(userRoles) }).then(userRole => { data.selectedUserRole = userRole let {credentials} = data credentials.account = userRole.account._id credentials.role = userRole.role._id return service.userAuth(credentials) }).then(token => { let {username, account, role} = data.credentials Object.assign(token, { username, account, role }) return service.saveUserData(token) }).then(() => { console.log('Login succeeded') }).catch(service.handleError) .catch(service.processExit) } switchRole () { let data = {} service.getUserData().then(userData => { Object.assign(data, userData) return service.getUserRoles(userData.idToken) }).then(accountRoles => { return service.selectUserRole(accountRoles) }).then(({account, role}) => { return service.switchRole({ account: account._id, role: role._id }, data.idToken) }).then(newToken => { Object.assign(data, newToken) return service.saveUserData(data) }).then(() => { console.log('Successfully switched to selected account role.') }).catch(service.handleError) .catch(service.processExit) } logout () { service.removeUserData().then(() => { console.log('Logged out successfully') }).catch(service.handleError) .catch(service.processExit) } updatePlugin (pathToManifest) { pathToManifest = path.resolve(process.cwd(), pathToManifest || 'reekoh.yml') let manifestDir = path.dirname(pathToManifest) let data = {} service.getUserData().then((userData) => { data.token = userData.idToken return service.getPluginDetails(pathToManifest) }).then((plugin) => { let icon = { manifestDir, key: 'metadata.icon', path: './icon.png', validExtensions: ['jpeg', 'png', 'jpg', 'gif'] } return service.validateFile(icon, plugin) }).then((plugin) => { return service.saveIcon({ manifestDir, token: data.token }, plugin) }).then((plugin) => { return service.submitPlugin(data.token, 'PATCH', plugin) }).then(() => { console.log('Plugin updated') }).catch(service.handleError) .catch(service.processExit) } publish (pathToManifest) { pathToManifest = path.resolve(process.cwd(), pathToManifest || 'reekoh.yml') let manifestDir = path.dirname(pathToManifest) let data = {} service.getUserData().then((userData) => { data.token = userData.idToken return service.getPluginDetails(pathToManifest) }).then(plugin => { let notes = { manifestDir, key: 'metadata.release.notes', path: './RELEASENOTES.md', validExtensions: ['md'], getContent: true } return service.validateFile(notes, plugin) }).then((plugin) => { let documentation = { manifestDir, key: 'metadata.release.documentation', path: './README.md', validExtensions: ['md'], getContent: true } return service.validateFile(documentation, plugin) }).then((plugin) => { let icon = { manifestDir, key: 'metadata.icon', path: './icon.png', validExtensions: ['jpeg', 'png', 'jpg', 'gif'] } return service.validateFile(icon, plugin) }).then((plugin) => { return service.saveIcon({ manifestDir, token: data.token }, plugin) }).then((plugin) => { return service.savePluginCode({ manifestDir, token: data.token }, plugin) }).then((plugin) => { return service.submitPlugin(data.token, 'POST', plugin) }).then(() => { console.log(`Plugin submitted`) }).catch(service.handleError) .catch(service.processExit) } } module.exports = new Command()