UNPKG

@remote.it/cli

Version:

remote.it cross-platform command line

94 lines (79 loc) 2.82 kB
import { GluegunToolbox } from 'gluegun' import { ConfigFile, Service, User } from '@remote.it/core' export default { name: 'remove', alias: 'rm', description: 'Remove a given service from this device', async run(toolbox: GluegunToolbox) { const { parameters, print, prompt } = toolbox const config = new ConfigFile() let uid = parameters.first // Prompt for uid if they don't provide it if (!uid) { // Show them the available services they can remove print.info('') print.info(print.colors.blue('Available services to remove:')) print.info('') print.table( [ ['Name', 'Port', 'UID'], ...config.services.map(s => [s.name, s.port, s.uid]), ], { format: 'markdown' } ) print.info('') const result = await prompt.ask({ type: 'input', name: 'uid', message: 'What is the UID for the service you want to remove?', }) if (result && result.uid) uid = result.uid } if (!uid) { print.error('No UID specified!') process.exit(1) return } // Find the service from the list of avaialbe services to remove. const service = config.services.find(s => s.uid === uid) if (!service) { print.warning(`No service found running on uid ${uid}`) } // TODO: Handle missing user credentials // TODO: if token is valid dont require user to login //------------------------------------------------------- // Get info from config file //------------------------------------------------------- if ( !config || !config.exists || !config.user || !config.user.username || !config.user.authHash ) { print.error(`Config file "${config.location}" is invalid or missing`) process.exit(1) return } const username = config.user.username const authHash = config.user.authHash //------------------------------------------------------- // Get an API token //------------------------------------------------------- const signInSpinner = toolbox.print.spin( `Authenticating user "${username}"` ) await User.authHashSignIn(username, authHash) signInSpinner.succeed(`User "${username}" authenticated`) //------------------------------------------------------- // Remove service //------------------------------------------------------- const name = !service ? uid : `${service.name} (${service.uid})` const deleteSpinner = toolbox.print.spin(`Deleting service ${name}...`) // Remove service from filestystem config.services = config.services.filter(s => s.uid !== uid) // Delete the service from the API await Service.delete(uid) deleteSpinner.succeed(`Deleted service ${name}`) }, }