@remote.it/cli
Version:
remote.it cross-platform command line
94 lines (79 loc) • 2.82 kB
text/typescript
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}`)
},
}