XenMobile provides an extensive REST API that can be leveraged to extract data and provide it for business needs. This feature provides customers with the facility of calling XenMobile services using REST API. Instead of using XenMobile console, customers can call exposed services by using any REST client.
One of the major benefits of this feature is that customers can carry out different bulk operations in an automated way using scripts. Using these APIs, customers can setup external systems that can authenticate and connect to XenMobile server, retrieve specific information required for business needs such as number of devices enrolled, deploy any device, perform full or selective wipes, information about users, groups, applications, delivery groups and much more. These functions when called can perform the same tasks that an admin can execute from console; however it can also be used to perform certain other tasks that take longer and manual approach such as generating bulk invitations and/or OTP’s.
var request = require('request');
var SERVER_URL = 'https://<SERVER_FQDN>:<PORT>/xenmobile/api/v1/';
function sendRequest(url, method, headers, requestData, cb) {
request({
url : SERVER_URL + url,
method : method,
headers : headers,
json : requestData
}, function (error, response, responseJSON) {
if(error || response.statusCode !== 200 || (responseJSON.status !== undefined && responseJSON.status !== 0)) {
var errorMessage = error ? error : (responseJSON.message || responseJSON);
cb(errorMessage);
} else {
cb(null, responseJSON);
}
});
}
var authToken = null;
function loginUser(cb) {
var url = 'authentication/login';
var requestData = {
'login' : 'username',
'password' : 'password'
}
sendRequest(url, 'POST', {}, requestData, function(err, response) {
if(err) {
cb(err);
} else {
authToken = response.auth_token;
cb(null, {});
}
});
}
var async = require('async');
function main() {
async.waterfall([
function(callback) {
loginUser(callback);
}
],
function(err, result){
if(err) {
console.log("Error Occured" + err);
} else {
console.log("operation completed successfully");
}
});
}
main();
function searchDevice(searchText , cb) {
var url = 'device/filter';
var requestData = {
'search' : searchText
};
sendRequest(url, 'POST', {'auth_token': authToken}, requestData, cb);
}
var async = require('async');
function main() {
async.waterfall([
function(callback) {
loginUser(callback);
},
function(data, callback) {
searchDevice("ABC123456789", callback);
}
],
function(err, result){
if(err) {
console.log("Error Occured" + err);
} else {
console.log("operation completed successfully");
}
});
}
main();
function lockDevices(deviceIds , cb) {
var url = 'device/lock';
var requestData = deviceIds;
sendRequest(url, 'POST', {'auth_token': authToken}, requestData, cb);
}
var async = require('async');
function main() {
async.waterfall([
function(callback) {
loginUser(callback);
},
function(data, callback) {
searchDevice("ABC123456789", callback);
},
function(devices, callback) {
var deviceIds = [];
for(var index in devices.filteredDevicesDataList) {
deviceIds.push(devices.filteredDevicesDataList[index].id);
}
lockDevices(deviceIds, callback);
}
],
function(err, result){
if(err) {
console.log("Error Occured" + err);
} else {
console.log("operation completed successfully");
}
});
}
main();