homebridge-irobot
Version:
A homebridge plugin for controlling iRobot devices
119 lines • 4.53 kB
JavaScript
;
const request = require('request');
if (!process.argv[2] || !process.argv[3]) {
console.log('Usage: npm run get-password-cloud <iRobot username> <iRobot password> [Gigya API Key]');
process.exit();
}
const username = process.argv[2];
const password = process.argv[3];
const apiKey = '3_rWtvxmUKwgOzu3AUPTMLnM46lj-LxURGflmu5PcE_sGptTbD-wMeshVbLvYpq01K';
const gigyaLoginOptions = {
'method': 'POST',
'uri': 'https://accounts.us1.gigya.com/accounts.login',
'json': true,
'qs': {
'apiKey': apiKey,
'targetenv': 'mobile',
'loginID': username,
'password': password,
'format': 'json',
'targetEnv': 'mobile'
},
'headers': {
'Connection': 'close'
}
};
request(gigyaLoginOptions, loginGigyaResponseHandler);
function loginGigyaResponseHandler(error, response, body) {
if (error) {
console.log('Fatal error login into Gigya API. Please check your credentials or Gigya API Key.');
console.log(error);
process.exit(0);
}
if (response.statusCode === 401 || response.statusCode === 403) {
console.log('Authentication error. Check your credentials.');
console.log(response);
process.exit(0);
}
else if (response.statusCode === 400) {
console.log(response);
process.exit(0);
}
else if (response.statusCode === 200) {
if (body && body.statusCode && body.statusCode === 403) {
console.log('Authentication error. Please check your credentials.');
console.log(body);
process.exit(0);
}
if (body && body.statusCode && body.statusCode === 400) {
console.log('Error login into Gigya API.');
console.log(body);
process.exit(0);
}
if (body && body.statusCode && body.statusCode === 200 && body.errorCode === 0 && body.UID && body.UIDSignature && body.signatureTimestamp && body.sessionInfo && body.sessionInfo.sessionToken) {
const iRobotLoginOptions = {
'method': 'POST',
'uri': 'https://unauth2.prod.iot.irobotapi.com/v2/login',
'json': true,
'body': {
'app_id': 'ANDROID-C7FB240E-DF34-42D7-AE4E-A8C17079A294',
'assume_robot_ownership': 0,
'gigya': {
'signature': body.UIDSignature,
'timestamp': body.signatureTimestamp,
'uid': body.UID
}
},
'headers': {
'Connection': 'close'
}
};
request(iRobotLoginOptions, loginIrobotResponseHandler);
}
else {
console.log('Error login into iRobot account. Missing fields in login response.');
console.log(body);
process.exit(0);
}
}
else {
console.log('Unespected response. Checking again...');
}
}
function loginIrobotResponseHandler(error, response, body) {
let index = 0;
if (error) {
console.log('Fatal error login into iRobot account. Please check your credentials or API Key.');
console.log(error);
process.exit(0);
}
if (body && body.robots) {
const robotCount = Object.keys(body.robots).length;
//console.log('Found ' + robotCount + ' robot(s)!');
console.log('[');
Object.keys(body.robots).map(function (r) {
index++;
console.log('{"name": "' + body.robots[r].name + '", "blid": "' + r + '", "password": "' + body.robots[r].password + '", "ip": "' + body.robots[r].ip + '"}');
/*
console.log('Robot "' + body.robots[r].name + '" (sku: ' + body.robots[r].sku + ' SoftwareVer: ' + body.robots[r].softwareVer + '):');
console.log('BLID=> ' + r);
console.log('Password=> ' + body.robots[r].password + ' <= Yes, all this string.');
console.log('');
*/
if (index == robotCount) {
console.log(']');
}
else {
console.log(',');
}
});
//console.log('Use this credentials in dorita980 lib :)');
}
else {
console.log('Fatal error login into iRobot account. Please check your credentials or API Key.');
console.log(body);
process.exit(0);
}
}
//# sourceMappingURL=getRoombaCredentials.js.map