blob: b055cff63e99db32180957129087dacab9bff1ae [file] [log] [blame]
#!/usr/bin/env node
/*
* Copyright 2013 Research In Motion Limited.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var path = require('path'),
fs = require('fs'),
utils = require('./utils'),
commander = require('commander'),
properties = utils.getProperties(),
ERROR_VALUE = 2,
NOTIMPLEMENTED_VALUE = 1,
command,
name,
ip,
type,
password,
pin,
pinRegex = new RegExp("[0-9A-Fa-f]{8}");
function isValidIp(ip) {
var num,
result = true,
ipArray;
if (typeof ip !== 'string') {
console.log("IP is required");
console.log(commander.helpInformation());
process.exit(ERROR_VALUE);
} else {
ipArray = ip.split('.');
if (ipArray.length !== 4) {
result = false;
}
ipArray.forEach(function (quadrant) {
num = Number(quadrant);
if (isNaN(num) || (num < 0) || (num > 255)) {
result = false;
}
});
}
return result;
}
function isValidType(type) {
var result = true;
if (typeof type !== 'string') {
console.log("target type is required");
console.log(commander.helpInformation());
process.exit(ERROR_VALUE);
}
else if (!(type === 'device' || type === 'simulator')) {
result = false;
}
return result;
}
function isValidPin(pin) {
var result = true;
if (typeof pin !== 'undefined' && !pinRegex.test(pin)) {
result = false;
}
return result;
}
commander
.usage('[command] [params]')
.option('-p, --password <password>', 'Specifies password for this target')
.option('--pin <devicepin>', 'Specifies PIN for this device')
.option('-t, --type <device | simulator>', 'Specifies the target type');
commander
.on('--help', function () {
console.log(' Synopsis:');
console.log(' $ target');
console.log(' $ target add <name> <ip> [-t | --type <device | simulator>] [-p | --password <password>] [--pin <devicepin>]');
console.log(' $ target remove <name>');
console.log(' $ target default [name]');
console.log(' ');
});
commander
.command('add')
.description("Add specified target")
.action(function () {
if (commander.args.length === 1) {
console.log("Target details not specified");
console.log(commander.helpInformation());
process.exit(ERROR_VALUE);
}
name = commander.args[0];
ip = commander.args[1];
type = commander.type ? commander.type : "device";
if (commander.password && typeof commander.password === 'string') {
password = commander.password;
}
if (commander.pin && typeof commander.pin === 'string') {
pin = commander.pin;
}
if (!isValidIp(ip)) {
console.log("Invalid IP: " + ip);
console.log(commander.helpInformation());
process.exit(ERROR_VALUE);
}
if (!isValidType(type)) {
console.log("Invalid target type: " + type);
console.log(commander.helpInformation());
process.exit(ERROR_VALUE);
}
if (!isValidPin(pin)) {
console.log("Invalid PIN: " + pin);
console.log(commander.helpInformation());
process.exit(ERROR_VALUE);
}
if (properties.targets.hasOwnProperty(name)) {
console.log("Overwriting target: " + name);
}
properties.targets[name] = {"ip": ip, "type": type, "password": password, "pin": pin};
});
commander
.command('remove')
.description("Remove specified target")
.action(function () {
if (commander.args.length === 1) {
console.log('No target specified');
console.log(commander.helpInformation());
process.exit(ERROR_VALUE);
}
name = commander.args[0];
if (!properties.targets.hasOwnProperty(name)) {
console.log("Target: '" + name + "' not found");
console.log(commander.helpInformation());
process.exit(ERROR_VALUE);
}
if (name === properties.defaultTarget) {
console.log("Deleting default target, please set a new default target");
properties.defaultTarget = "";
}
delete properties.targets[name];
});
commander
.command('default')
.description("Get or set default target")
.action(function () {
if (commander.args.length === 1) {
console.log(properties.defaultTarget);
process.exit();
}
name = commander.args[0];
if (properties.targets.hasOwnProperty(name)) {
properties.defaultTarget = name;
} else {
console.log("Target '" + name + "' not found");
console.log(commander.helpInformation());
process.exit(ERROR_VALUE);
}
});
commander
.command('*')
.action(function () {
console.log('Unrecognized command');
console.log(commander.helpInformation());
process.exit(NOTIMPLEMENTED_VALUE);
});
try {
commander.parse(process.argv);
if (commander.args.length === 0) {
Object.keys(properties.targets).forEach(function (target) {
if (target === properties.defaultTarget) {
console.log('* ' + target);
} else {
console.log(' ' + target);
}
});
process.exit();
}
if (Object.keys(properties.targets).length === 1) {
properties.defaultTarget = Object.keys(properties.targets)[0];
}
utils.writeToPropertiesFile(properties);
} catch (e) {
console.log(e);
process.exit();
}