You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

482 lines
12 KiB

define(function (require) {
var $ = require("jquery"),
_ = require("lodash"),
monster = require("monster");
var app = {
name: "provisioner",
css: ["app"],
i18n: {
"en-US": { customCss: false },
},
// Defines API requests not included in the SDK
requests: {
'provisioner.provurl.get': {
'apiRoot': monster.config.api.provisioner,
'url': 'api/{accountId}/initialtoken',
'verb': 'GET'
},
'provisioner.phone_configfile.list': {
'apiRoot': monster.config.api.provisioner,
'url': 'api/{accountId}/files/customconfigs',
'verb': 'GET'
},
'provisioner.phone_configfile.get': {
'apiRoot': monster.config.api.provisioner,
'url': 'api/{accountId}/files/customconfigs',
'verb': 'GET'
},
'provisioner.phone_configfile.add': {
'apiRoot': monster.config.api.provisioner,
'url': 'api/{accountId}/files/customconfigs',
'verb': 'PUT'
},
'provisioner.phone_configfile.remove': {
'apiRoot': monster.config.api.provisioner,
'url': 'api/{accountId}/files/customconfigs',
'verb': 'DELETE'
},
'provisioner.account_configfile.list': {
'apiRoot': monster.config.api.provisioner,
'url': 'api/{accountId}/files/accountconfigs',
'verb': 'GET'
},
'provisioner.account_configfile.get': {
'apiRoot': monster.config.api.provisioner,
'url': 'api/{accountId}/files/accountconfigs',
'verb': 'GET'
},
'provisioner.account_configfile.add': {
'apiRoot': monster.config.api.provisioner,
'url': 'api/{accountId}/files/accountconfigs',
'verb': 'PUT'
},
'provisioner.account_configfile.remove': {
'apiRoot': monster.config.api.provisioner,
'url': 'api/{accountId}/files/accountconfigs',
'verb': 'DELETE'
},
'provisioner.acls.list': {
'apiRoot': monster.config.api.provisioner,
'url': 'api/{accountId}/acl',
'verb': 'GET'
},
'provisioner.acls.add': {
'apiRoot': monster.config.api.provisioner,
'url': 'api/{accountId}/acl',
'verb': 'PUT'
},
'provisioner.acls.delete': {
'apiRoot': monster.config.api.provisioner,
'url': 'api/{accountId}/acl',
'verb': 'DELETE'
},
'provisioner.devicepassword.get': {
'apiRoot': monster.config.api.provisioner,
'url': 'api/{accountId}/devicepassword',
'verb': 'GET'
},
'provisioner.devicepassword.set': {
'apiRoot': monster.config.api.provisioner,
'url': 'api/{accountId}/devicepassword',
'verb': 'POST'
},
'provisioner.devicepassword.delete': {
'apiRoot': monster.config.api.provisioner,
'url': 'api/{accountId}/devicepassword',
'verb': 'DELETE'
}
},
// Define the events available for other apps
subscribe: {},
// Method used by the Monster-UI Framework, shouldn't be touched unless you're doing some advanced kind of stuff!
load: function (callback) {
var self = this;
self.initApp(function () {
callback && callback(self);
});
},
// Method used by the Monster-UI Framework, shouldn't be touched unless you're doing some advanced kind of stuff!
initApp: function (callback) {
var self = this;
// Used to init the auth token and account id of this app
monster.pub("auth.initApp", {
app: self,
callback: callback,
});
},
//////////////////////////////////////////////////////////
// Entry Point of the app
//////////////////////////////////////////////////////////
render: function (container) {
var self = this,
$container = _.isEmpty(container)
? $("#monster_content")
: container,
$layout = $(
self.getTemplate({
name: "layout",
})
);
monster.ui.tooltips($layout);
self.bindEvents({
template: $layout,
});
$container.empty().append($layout); //draw the main part of the page in views/layout.html
},
bindEvents: function (args) {
var self = this,
$template = args.template;
//load the parked calls on document ready, and repeat every 30 seconds
$(document).ready(function (e) {
loadProvUrl();
loadAcls();
loadDevicePassword();
//setInterval(loadParkingLot, 30000);
});
//Refresh parked calls button binding event:
$template.find("#refresh").on("click", function (e) {
loadProvUrl();
loadAcls();
loadDevicePassword();
});
//Add Acls Help
$template.find("#acl-add-help").on("click", function (e) {
var helptemplate = $(app.getTemplate({
name: 'dialog-help'
}));
monster.ui.dialog(helptemplate, {
title: app.i18n.active().provisioner.help.title,
width: '600px',
onClose: function() {
//doStuff();
}
});
});
//Help Button/Dialog
$template.find("#help-button").on("click", function (e) {
var helptemplate = $(app.getTemplate({
name: 'dialog-help'
}));
monster.ui.dialog(helptemplate, {
title: app.i18n.active().provisioner.help.title,
width: '600px',
onClose: function() {
//doStuff();
}
});
});
function loadProvUrl() {
monster.request({
resource: "provisioner.provurl.get",
data: {
accountId: self.accountId,
userId: monster.apps.auth.currentUser.id,
},
success: function(res) {
$('#provurl').html(res.data.provision_url);
},
error: function(res) {
if (res.status == 401) {
monster.util.logoutAndReload();
} else {
monster.ui.alert("ERROR: Failed to get provisioning URL: " + parsedError);
}
}
});
} //end function loadProvUrl();
function loadAcls() {
self.getAcls(function (aclinfo) {
var $aclinfo = $(
self.getTemplate({
name: "aclinfo",
data: {
acls: aclinfo,
},
})
);
$template.find(".aclinfo").empty().append($aclinfo);
///Delete ACL binding
$template.find(".acl-delete").on("click", function (e) {
let aclEntry = $(this)
.closest(".acl-entry")
//.data("title"); //get the title, which is the ACL itself
.attr("id"); //get the id, which is the ACL itself
self.deleteAcl(aclEntry);
});
//Add ACL binding
$template.find("#acl-add-button").on("click", function (e) {
let acl = $template.find("#acl-add-input")[0].value;
self.addAcl(acl);
});
});
} //end function loadAcls();
function loadDevicePassword() {
self.getDevicePassword(function (devicepassword) {
var $devicepassword = $(
self.getTemplate({
name: "devicepassword",
data: {
devicepassword: devicepassword,
},
})
);
$template.find(".devicepassword").empty().append($devicepassword);
///Delete device password binding
$template.find(".devicepassword-delete").on("click", function (e) {
self.deleteDevicePassword("#devicepassword");
});
//Add device password binding
$template.find("#devicepassword-set-button").on("click", function (e) {
let dp = $template.find("#devicepassword-set-input")[0].value;
if (dp.length >= 3) { //min length 3 chars
self.setDevicePassword(dp);
} else {
monster.ui.alert("Password too short: must be at least 3 characters.");
}
});
});
} //end function loadDevicePassword();
}, //bindEvents
updateDevicePasswordTemplate: function (devicepassword) {
var self = this;
var $aclinfo = $(
app.getTemplate({
name: "devicepassword",
data: {
devicepassword: devicepassword,
},
})
);
},
getDevicePassword: function (callback) {
var self = this;
monster.request({
resource: "provisioner.devicepassword.get",
data: {
accountId: self.accountId,
userId: monster.apps.auth.currentUser.id,
},
success: function(res) {
//console.log(data);
callback(res.data);
},
error: function(res) {
if (res.status == 404) {
callback([]); //Populate results with nothing
} else if (res.status == 401) {
monster.util.logoutAndReload();
} else {
monster.ui.alert("ERROR: Failed to get account device password: " + parsedError);
callback([]); //Populate results with nothing
}
}
});
}, //end getDevicePassword
setDevicePassword: function(devicepassword) {
var self = this;
monster.request({
resource: "provisioner.devicepassword.set",
data: {
accountId: self.accountId,
userId: monster.apps.auth.currentUser.id,
data: {
password: devicepassword
}
},
success: function(res) {
//console.log(data);
let newpassword = `<div id="devicepassword" title="account-device-password" class="devicepassword-entry">${devicepassword}&nbsp;&nbsp;<i class="fa fa-remove devicepassword-delete"></i></div>`;
$("#devicepassword-list").append(newpassword);
$('#refresh').click(); //??
},
error: function(res) {
if (res.status == 401) {
//monster.util.logoutAndReload();
} else {
monster.ui.alert("ERROR: Failed to add account device password: " + parsedError);
}
}
});
},
deleteDevicePassword: function(devicepassword) {
var self = this;
monster.request({
resource: "provisioner.devicepassword.delete",
data: {
accountId: self.accountId,
userId: monster.apps.auth.currentUser.id,
data: {
devicepassword: devicepassword
}
},
success: function(res) {
//console.log(data);
//self.getAcls(self.updateAclsTemplate);
//"select[title='" + acl + "']").remove();
$('#refresh').click();
},
error: function(res) {
if (res.status == 401) {
monster.util.logoutAndReload();
} else {
monster.ui.alert("ERROR: Failed to delete account device password: " + parsedError);
}
}
});
},
updateAclsTemplate: function (aclinfo) {
var self = this;
var $aclinfo = $(
app.getTemplate({
name: "aclinfo",
data: {
acls: aclinfo,
},
})
);
//$(".aclinfo").empty().append($aclinfo);
/*
$(".acl-delete").on("click", function (e) {
console.log(self);
let aclEntry = $(this).closest(".acl-entry").attr("id"); //get the id, which is the ACL itself
self.deleteAcl(aclEntry);
});
*/
},
getAcls: function (callback) {
var self = this;
//$.ajax({
// url: monster.config.api.provisioner + 'api/' + self.accountId + '/acl' ,
monster.request({
resource: "provisioner.acls.list",
data: {
accountId: self.accountId,
userId: monster.apps.auth.currentUser.id,
//number: dialNumber,
},
success: function(res) {
//console.log(data);
//$('#oncalldr').html(data.data.doctor);
//$('#oncallthru').html(data.data.end);
callback(res.data.acls);
},
error: function(res) {
if (res.status == 404) {
callback([]); //Populate results with nothing
} else if (res.status == 401) {
monster.util.logoutAndReload();
} else {
monster.ui.alert("ERROR: Failed to get ACLs: " + parsedError);
callback([]); //Populate results with nothing
}
}
});
}, //end getAcls
addAcl: function (acl) {
var self = this;
monster.request({
resource: "provisioner.acls.add",
data: {
accountId: self.accountId,
userId: monster.apps.auth.currentUser.id,
data: {
net: acl
}
},
success: function(res) {
//console.log(data);
//acl = res.data.acls[res.data.acls.length - 1];
let newacl = `<div id="${acl}" title="${acl}" class="acl-entry">${acl}&nbsp;&nbsp;<i class="fa fa-remove acl-delete"></i></div>`;
$("#acl-list").append(newacl);
$('#refresh').click();
},
error: function(res) {
if (res.status == 401) {
//monster.util.logoutAndReload();
} else {
monster.ui.alert("ERROR: Failed to add ACL: " + parsedError);
}
}
});
},
deleteAcl: function (acl) {
var self = this;
monster.request({
resource: "provisioner.acls.delete",
data: {
accountId: self.accountId,
userId: monster.apps.auth.currentUser.id,
data: {
net: acl
}
},
success: function(res) {
//console.log(data);
//self.getAcls(self.updateAclsTemplate);
//"select[title='" + acl + "']").remove();
$('#refresh').click();
},
error: function(res) {
if (res.status == 401) {
monster.util.logoutAndReload();
} else {
monster.ui.alert("ERROR: Failed to add ACL: " + parsedError);
}
}
});
},
////////////////////////////////////////////////////////
};
return app;
});