mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
298152bc50
* Added clipboard.min.js * Added copy button to secrets * renamed clipboard JS library
134 lines
4.8 KiB
JavaScript
134 lines
4.8 KiB
JavaScript
$(document).ready(function() {
|
|
// Instantiate ClipboardJS on all copy buttons
|
|
new ClipboardJS('button.copy-secret');
|
|
|
|
// Unlocking a secret
|
|
$('button.unlock-secret').click(function(event) {
|
|
var secret_id = $(this).attr('secret-id');
|
|
unlock_secret(secret_id);
|
|
event.preventDefault();
|
|
});
|
|
|
|
// Locking a secret
|
|
$('button.lock-secret').click(function(event) {
|
|
var secret_id = $(this).attr('secret-id');
|
|
lock_secret(secret_id);
|
|
event.preventDefault();
|
|
});
|
|
|
|
// Adding/editing a secret
|
|
$('form').submit(function(event) {
|
|
$(this).find('.requires-session-key').each(function() {
|
|
if (this.value && document.cookie.indexOf('session_key') == -1) {
|
|
console.log('Field ' + this.name + ' requires a session key');
|
|
$('#privkey_modal').modal('show');
|
|
event.preventDefault();
|
|
return false;
|
|
}
|
|
});
|
|
});
|
|
|
|
// Retrieve a session key
|
|
$('#request_session_key').click(function() {
|
|
var private_key_field = $('#user_privkey');
|
|
var private_key = private_key_field.val();
|
|
get_session_key(private_key);
|
|
private_key_field.val("");
|
|
});
|
|
|
|
// Retrieve a secret via the API
|
|
function unlock_secret(secret_id) {
|
|
$.ajax({
|
|
url: netbox_api_path + 'secrets/secrets/' + secret_id + '/',
|
|
type: 'GET',
|
|
dataType: 'json',
|
|
success: function (response, status) {
|
|
if (response.plaintext) {
|
|
console.log("Secret retrieved successfully");
|
|
$('#secret_' + secret_id).text(response.plaintext);
|
|
$('button.unlock-secret[secret-id=' + secret_id + ']').hide();
|
|
$('button.copy-secret[secret-id=' + secret_id + ']').show();
|
|
$('button.lock-secret[secret-id=' + secret_id + ']').show();
|
|
} else {
|
|
console.log("Secret was not decrypted. Prompt user for private key.");
|
|
$('#privkey_modal').modal('show');
|
|
}
|
|
},
|
|
error: function (xhr, ajaxOptions, thrownError) {
|
|
console.log("Error: " + xhr.responseText);
|
|
if (xhr.status == 403) {
|
|
alert("Permission denied");
|
|
} else {
|
|
alert(xhr.responseText);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
// Remove secret data from the DOM
|
|
function lock_secret(secret_id) {
|
|
var secret_div = $('#secret_' + secret_id);
|
|
secret_div.html('********');
|
|
$('button.lock-secret[secret-id=' + secret_id + ']').hide();
|
|
$('button.copy-secret[secret-id=' + secret_id + ']').hide();
|
|
$('button.unlock-secret[secret-id=' + secret_id + ']').show();
|
|
}
|
|
|
|
// Request a session key via the API
|
|
function get_session_key(private_key) {
|
|
var csrf_token = $('input[name=csrfmiddlewaretoken]').val();
|
|
$.ajax({
|
|
url: netbox_api_path + 'secrets/get-session-key/',
|
|
type: 'POST',
|
|
data: {
|
|
private_key: private_key
|
|
},
|
|
dataType: 'json',
|
|
beforeSend: function(xhr, settings) {
|
|
xhr.setRequestHeader("X-CSRFToken", csrf_token);
|
|
},
|
|
success: function (response, status) {
|
|
console.log("Received a new session key");
|
|
alert('Session key received! You may now unlock secrets.');
|
|
},
|
|
error: function (xhr, ajaxOptions, thrownError) {
|
|
if (xhr.status == 403) {
|
|
alert("Permission denied");
|
|
} else {
|
|
var json = jQuery.parseJSON(xhr.responseText);
|
|
alert("Failed to retrieve a session key: " + json['error']);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
// Generate a new public/private key pair via the API
|
|
$('#generate_keypair').click(function() {
|
|
$('#new_keypair_modal').modal('show');
|
|
$.ajax({
|
|
url: netbox_api_path + 'secrets/generate-rsa-key-pair/',
|
|
type: 'GET',
|
|
dataType: 'json',
|
|
success: function (response, status) {
|
|
var public_key = response.public_key;
|
|
var private_key = response.private_key;
|
|
$('#new_pubkey').val(public_key);
|
|
$('#new_privkey').val(private_key);
|
|
},
|
|
error: function (xhr, ajaxOptions, thrownError) {
|
|
alert("There was an error generating a new key pair.");
|
|
}
|
|
});
|
|
});
|
|
|
|
// Accept a new RSA key pair generated via the API
|
|
$('#use_new_pubkey').click(function() {
|
|
var new_pubkey = $('#new_pubkey');
|
|
|
|
if (new_pubkey.val()) {
|
|
$('#id_public_key').val(new_pubkey.val());
|
|
}
|
|
});
|
|
|
|
});
|