'use strict';
require(['jquery',
'underscore',
'splunkjs/mvc',
'splunkjs/mvc/utils',
'splunkjs/mvc/tokenutils',
'splunkjs/mvc/messages',
'splunkjs/mvc/searchmanager',
'splunkjs/mvc/multidropdownview',
'splunkjs/mvc/dropdownview',
'/static/app/rest-storage-passwords-manager/Modal.js',
'splunkjs/mvc/simpleform/input/dropdown',
'splunkjs/mvc/simplexml/ready!'],
function ($,
_,
mvc,
utils,
TokenUtils,
Messages,
SearchManager,
MultiDropdownView,
DropdownView,
Modal,
Dropdown) {
function showPassword(row) {
var dfd = $.Deferred();
var splunkJsComponent = mvc.Components.getInstance("passwordSearch");
if(splunkJsComponent) {
splunkJsComponent.dispose();
}
var passwordSearch = new SearchManager({
"id": "passwordSearch",
"cancelOnUnload": true,
"status_buckets": 0,
"earliest_time": "-24h@h",
"latest_time": "now",
"sample_ratio": 1,
"search": "| rest /servicesNS/-/-/storage/passwords \
| search title=" + row.realm + ":" + row.username + ": \
| table clear_password",
"app": utils.getCurrentApp(),
"auto_cancel": 90,
"preview": true,
"tokenDependencies": {
},
"runWhenTimeIsUndefined": false
}, {tokens: true, tokenNamespace: "submitted"});
var mainSearch = mvc.Components.getInstance("passwordSearch");
var myResults = mainSearch.data('results', { output_mode:'json', count:0 });
mainSearch.on('search:done', function(properties) {
if(properties.content.resultCount == 0) {
return renderModal("password-not-found",
"Not Found",
"
No password found. Verify list_storage_passwords capability role is enabled.
",
"Close")
}
});
myResults.on("data", function() {
var data = myResults.data().results;
dfd.resolve(renderModal("show-password",
"Password",
"" + data[0].clear_password + "
",
"Close"));
});
return dfd.promise();
}
function anonCallback(callback=function(){}, callbackArgs=null) {
if(callbackArgs) {
callback.apply(this, callbackArgs);
} else {
callback();
}
}
function genericPromise() {
var dfd = $.Deferred();
dfd.resolve();
return dfd.promise();
}
// Wrapper to execute multiple searches in order and resolve when they've all finished
function all(array){
var deferred = $.Deferred();
var fulfilled = 0, length = array.length;
var results = [];
if (length === 0) {
deferred.resolve(results);
} else {
_.each(array, function(promise, i){
$.when(promise()).then(function(value) {
results[i] = value;
fulfilled++;
if(fulfilled === length){
deferred.resolve(results);
}
});
});
}
return deferred.promise();
};
// Helper to figure out if the create form is open
function isFormOpen() {
var formOpen = window.sessionStorage.getItem("formOpen");
if(_.isNull(formOpen) || _.isUndefined(formOpen) || formOpen === "false") {
return false;
} else {
return true;
}
}
// Callback to refresh window and hide create-user
function refreshWindow() {
setTimeout(function () {
location.reload()
$('#create-user').show();
}, 500);
}
function renderModal(id, title, body, buttonText, callback=function(){}, callbackArgs=null) {
// Create the modal
var myModal = new Modal(id, {
title: title,
backdrop: 'static',
keyboard: false,
destroyOnHide: true,
type: 'wide'
});
// Add content
myModal.body.append($(body));
// Add cancel button for update/delete action
if(id == "user-delete-confirm" || id == "update-user-form") {
myModal.footer.append($('').attr({
type: 'button',
'data-dismiss': 'modal'
})
.addClass('btn btn-secondary').text("Cancel")).on('click', function(){});
}
// Add footer
myModal.footer.append($('