1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Closes: #5278 - Remove Secrets (#6397)

* Remove Secrets

* #5278: Remove secrets javascript from netbox core

* Remove userkey references

* Fix PEP8

* Remove a few more instances of secrets.  Rebundle

* Remove Secrets

Co-authored-by: checktheroads <matt@allroads.io>
This commit is contained in:
Daniel Sheppard
2021-05-17 15:26:02 -05:00
committed by GitHub
parent dc5c765c2a
commit 744792452f
97 changed files with 35 additions and 3731 deletions

View File

@@ -274,23 +274,6 @@
</div>
</div>
{% endif %}
{% if perms.secrets.view_secret %}
<div class="card">
<h5 class="card-header">
Secrets
</h5>
<div class="card-body">
{% include 'secrets/inc/assigned_secrets.html' %}
</div>
{% if perms.secrets.add_secret %}
<div class="card-footer text-end noprint">
<a href="{% url 'secrets:secret_add' %}?device={{ object.pk }}&return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-primary">
<i class="mdi mdi-plus-thick"></i> Add Secret
</a>
</div>
{% endif %}
</div>
{% endif %}
<div class="card">
<h5 class="card-header">
Services
@@ -377,5 +360,4 @@
</div>
</div>
</div>
{% include 'secrets/inc/private_key_modal.html' %}
{% endblock %}

View File

@@ -1,29 +0,0 @@
{% if secrets %}
<form id="secret_form">
{% csrf_token %}
</form>
<table class="table table-hover">
{% for secret in secrets %}
<tr>
<td><a href="{% url 'secrets:secret' pk=secret.pk %}">{{ secret.role }}</a></td>
<td>{{ secret.name }}</td>
<td id="secret_{{ secret.pk }}">********</td>
<td class="text-end noprint">
<button class="btn btn-sm btn-success unlock-secret" secret-id="{{ secret.pk }}">
<i class="mdi mdi-lock"></i> Unlock
</button>
<button class="btn btn-sm btn-outline-dark copy-secret collapse" secret-id="{{ secret.pk }}" data-clipboard-target="#secret_{{ secret.pk }}">
<i class="mdi mdi-content-copy"></i> Copy
</button>
<button class="btn btn-sm btn-danger lock-secret collapse" secret-id="{{ secret.pk }}">
<i class="mdi mdi-lock-open"></i> Lock
</button>
</td>
</tr>
{% endfor %}
</table>
{% else %}
<div class="text-muted">
None found
</div>
{% endif %}

View File

@@ -1,27 +0,0 @@
<div class="modal fade" id="privkey_modal" tabindex="-1" role="dialog">
<div class="modal-dialog modal-md" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="privkey_modal_title">
<span class="mdi mdi-lock" aria-hidden="true"></span>
Enter Private RSA Key
</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<p class="small text-muted">
You do not have an active session key. To request one, please provide your private RSA key below.
Once retrieved, your session key will be saved for future requests.
</p>
<div class="form-group">
<textarea class="form-control font-monospace" id="user_privkey" style="height: 300px;"></textarea>
</div>
</div>
<div class="modal-footer float-end">
<button id="request_session_key" class="btn btn-primary" data-bs-dismiss="modal">
Request Session Key
</button>
</div>
</div>
</div>
</div>

View File

@@ -1,82 +0,0 @@
{% extends 'generic/object.html' %}
{% load buttons %}
{% load helpers %}
{% load static %}
{% load plugins %}
{% block breadcrumbs %}
<li class="breadcrumb-item"><a href="{% url 'secrets:secret_list' %}">Secrets</a></li>
<li class="breadcrumb-item"><a href="{% url 'secrets:secret_list' %}?role_id={{ object.role.pk }}">{{ object.role }}</a></li>
<li class="breadcrumb-item"><a href="{{ object.assigned_object.get_absolute_url }}">{{ object.assigned_object }}</a></li>
<li class="breadcrumb-item">{{ object }}</li>
{% endblock %}
{% block content %}
<div class="row">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Secret Attributes
</h5>
<div class="card-body">
<table class="table table-hover">
<tr>
<th scope="row">Assigned Object</th>
<td>
<a href="{{ object.assigned_object.get_absolute_url }}">{{ object.assigned_object }}</a>
</td>
</tr>
<tr>
<th scope="row">Role</th>
<td>
<a href="{{ object.role.get_absolute_url }}">{{ object.role }}</a>
</td>
</tr>
<tr>
<th scope="row">Name</th>
<td>{{ object.name|placeholder }}</td>
</tr>
</table>
</div>
</div>
{% include 'inc/custom_fields_panel.html' %}
{% plugin_left_page object %}
</div>
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Secret Data
</h5>
<div class="card-body">
<form id="secret_form">
{% csrf_token %}
</form>
<div class="row">
<div class="col col-md-2">Secret</div>
<div class="col col-md-6"><code id="secret_{{ object.pk }}">********</code></div>
<div class="col col-md-4 text-end noprint">
<button class="btn btn-sm btn-success unlock-secret" secret-id="{{ object.pk }}">
<i class="mdi mdi-lock"></i> Unlock
</button>
<button class="btn btn-sm btn-outline-dark copy-secret d-none" secret-id="{{ object.pk }}" data-clipboard-target="#secret_{{ object.pk }}">
<i class="mdi mdi-content-copy"></i> Copy
</button>
<button class="btn btn-sm btn-danger lock-secret d-none" secret-id="{{ object.pk }}">
<i class="mdi mdi-lock-open"></i> Lock
</button>
</div>
</div>
</div>
</div>
{% include 'extras/inc/tags_panel.html' with tags=object.tags.all url='secrets:secret_list' %}
{% plugin_right_page object %}
</div>
</div>
<div class="row">
<div class="col col-md-12">
{% plugin_full_width_page object %}
</div>
</div>
{% include 'secrets/inc/private_key_modal.html' %}
{% endblock %}

View File

@@ -1,8 +0,0 @@
{% extends 'utilities/confirmation_form.html' %}
{% load form_helpers %}
{% block title %}Delete secret {{ secret }}?{% endblock %}
{% block message %}
<p>Are you sure you want to delete secret {{ secret }}?</p>
{% endblock %}

View File

@@ -1,88 +0,0 @@
{% extends 'generic/object_edit.html' %}
{% load static %}
{% load form_helpers %}
{% block title %}{% if obj.pk %}Editing {{ obj }}{% else %}Add a Secret{% endif %}{% endblock %}
{% block form %}
{% render_errors form %}
{{ form.private_key }}
<div class="field-group">
<h4>Secret Assignment</h4>
<ul class="nav nav-tabs mb-3" role="tablist">
<li class="nav-item" role="presentation">
<button
role="tab"
type="button"
id="device_tab"
data-bs-toggle="tab"
class="nav-link{% if not vm_tab_active %} active{% endif %}"
data-bs-target="#device"
aria-controls="device"
>
Device
</button>
</li>
<li class="nav-item" role="presentation">
<button
role="tab"
type="button"
id="vm_tab"
data-bs-toggle="tab"
class="nav-link{% if vm_tab_active %} active{% endif %}"
data-bs-target="#virtualmachine"
aria-controls="virtualmachine"
>
Virtual Machine
</button>
</li>
</ul>
{% with vm_tab_active=form.initial.virtual_machine %}
<div class="tab-content">
<div class="tab-pane{% if not vm_tab_active %} active{% endif %}" id="device">
{% render_field form.device %}
</div>
<div class="tab-pane{% if vm_tab_active %} active{% endif %}" id="virtualmachine">
{% render_field form.virtual_machine %}
</div>
</div>
{% endwith %}
{% render_field form.role %}
{% render_field form.name %}
{% render_field form.userkeys %}
{% render_field form.tags %}
</div>
<div class="field-group">
<h4>Secret Data</h4>
{% if obj.pk %}
<div class="form-floating mb-3">
<input class="form-control" value="********" id="secret_{{ obj.pk }}" />
<label class="required">Current Plain Text</label>
</div>
<div class="col col-md-2 text-end">
<button class="btn btn-sm btn-success unlock-secret" data-secret-id="{{ obj.pk }}">
<i class="mdi mdi-lock"></i> Unlock
</button>
<button class="btn btn-sm, btn-danger lock-secret collapse" data-secret-id="{{ obj.pk }}">
<i class="mdi mdi-lock-open"></i> Lock
</button>
</div>
{% endif %}
{% render_field form.plaintext %}
{% render_field form.plaintext2 %}
</div>
{% if form.custom_fields %}
<div class="card">
<h5 class="card-header">Custom Fields</h5>
<div class="card-body">
{% render_custom_fields form %}
</div>
</div>
{% endif %}
{% include 'secrets/inc/private_key_modal.html' %}
{% endblock %}

View File

@@ -1,7 +0,0 @@
{% extends 'generic/object_bulk_import.html' %}
{% load static %}
{% block content %}
{{ block.super }}
{% include 'secrets/inc/private_key_modal.html' %}
{% endblock %}

View File

@@ -1,64 +0,0 @@
{% extends 'generic/object.html' %}
{% load helpers %}
{% load plugins %}
{% block breadcrumbs %}
<li class="breadcrumb-item"><a href="{% url 'secrets:secretrole_list' %}">Secret Roles</a></li>
<li class="breadcrumb-item">{{ object }}</li>
{% endblock %}
{% block content %}
<div class="row mb-3">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">
Secret Role
</h5>
<div class="card-body">
<table class="table table-hover attr-table">
<tr>
<th scope="row">Name</th>
<td>{{ object.name }}</td>
</tr>
<tr>
<th scope="row">Description</th>
<td>{{ object.description|placeholder }}</td>
</tr>
<tr>
<th scope="row">Secrets</th>
<td>
<a href="{% url 'secrets:secret_list' %}?role_id={{ object.pk }}">{{ secrets_table.rows|length }}</a>
</td>
</tr>
</table>
</div>
</div>
{% plugin_left_page object %}
</div>
<div class="col col-md-6">
{% include 'inc/custom_fields_panel.html' %}
{% plugin_right_page object %}
</div>
</div>
<div class="row">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">
Secrets
</h5>
<div class="card-body">
{% include 'inc/table.html' with table=secrets_table %}
</div>
{% if perms.secrets.add_secret %}
<div class="card-footer text-end noprint">
<a href="{% url 'secrets:secret_add' %}?role={{ object.pk }}" class="btn btn-sm btn-primary">
<span class="mdi mdi-plus-thick" aria-hidden="true"></span> Add Secret
</a>
</div>
{% endif %}
</div>
{% include 'inc/paginator.html' with paginator=secrets_table.paginator page=secrets_table.page %}
{% plugin_full_width_page object %}
</div>
</div>
{% endblock %}

View File

@@ -12,7 +12,6 @@
<a class="nav-link nav-item text-start{% if active_tab == 'change-password' %} active{% endif %}" href="{% url 'user:change_password' %}">Change Password</a>
{% endif %}
<a class="nav-link nav-item text-start{% if active_tab == 'api-tokens' %} active{% endif %}" href="{% url 'user:token_list' %}">API Tokens</a>
<a class="nav-link nav-item text-start{% if active_tab == 'userkey' %} active{% endif %}" href="{% url 'user:userkey' %}">User Key</a>
</nav>
</div>
<div class="col-sm-9 col-md-8 px-4">

View File

@@ -1,5 +0,0 @@
{% extends 'generic/object_delete.html' %}
{% block message %}
<p>Are you sure you want to delete your session key?</p>
{% endblock %}

View File

@@ -1,53 +0,0 @@
{% extends 'users/base.html' %}
{% block title %}User Key{% endblock %}
{% block usercontent %}
{% if object %}
<div class="float-end noprint">
<a href="{% url 'user:userkey_edit' %}" class="btn btn-warning">
<span class="mdi mdi-pencil" aria-hidden="true"></span>
Edit User Key
</a>
</div>
<h4>
Your User Key is
{% if object.is_active %}
<span class="badge bg-success">Active</span>
{% else %}
<span class="badge bg-danger">Inactive</span>
{% endif %}
</h4>
<p>
<small class="text-muted">Created {{ object.created }} &middot; Updated <span title="{{ object.last_updated }}">{{ object.last_updated|timesince }}</span> ago</small>
</p>
{% if not object.is_active %}
<div class="alert alert-warning" role="alert">
<i class="mdi mdi-alert"></i>
Your user key is inactive. Ask an administrator to enable it for you.
</div>
{% endif %}
<pre class="copyable">{{ object.public_key }}</pre>
<hr />
{% if object.session_key %}
<div class="float-end noprint">
<a href="{% url 'user:sessionkey_delete' %}" class="btn btn-danger">
<span class="mdi mdi-trash-can-outline" aria-hidden="true"></span>
Delete Session Key
</a>
</div>
<h4>Session Key: <span class="badge bg-success">Active</span></h4>
<small class="text-muted">Created {{ object.session_key.created }}</small>
{% else %}
<h4>No Active Session Key</h4>
{% endif %}
{% else %}
<p>You don't have a user key on file.</p>
<p>
<a href="{% url 'user:userkey_edit' %}" class="btn btn-primary">
<span class="mdi mdi-plus-thick" aria-hidden="true"></span>
Create a User Key
</a>
</p>
{% endif %}
{% endblock %}

View File

@@ -1,55 +0,0 @@
{% extends 'users/base.html' %}
{% load static %}
{% load form_helpers %}
{% block title %}User Key{% endblock %}
{% block usercontent %}
{% if object.is_active %}
<div class="alert alert-danger" role="alert">
<strong>Warning:</strong> Changing your public key will require your user key to be re-activated by another
user. You will be unable to retrieve any secrets until your key has been reactivated.
</div>
{% endif %}
<form action="." method="post" class="form">
{% csrf_token %}
<div class="field-group">
{% render_field form.public_key %}
</div>
<div class="row my-3">
<div class="col-4 text-start">
<button type="button" class="btn btn-info" id="generate_keypair" data-bs-toggle="modal" data-bs-target="#new_keypair_modal">Generate a New Key Pair</button>
</div>
<div class="col-8 text-end">
<a href="{% url 'user:userkey' %}" class="btn btn-outline-danger">Cancel</a>
<button type="submit" name="_update" class="btn btn-primary">Save</button>
</div>
</div>
</form>
<div class="modal fade" id="new_keypair_modal" tabindex="-1" role="dialog">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="new_keypair_modal_title">
New RSA Key Pair
</h4>
<button type="button" class="btn btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="field-group">
<h5>New Public Key</h5>
<textarea class="form-control" rows="10" id="new_pubkey" style="height: 250px;font-family:var(--bs-font-monospace);"></textarea>
</div>
<div class="field-group">
<h5>New Private Key</h5>
<textarea class="form-control" rows="10" id="new_privkey" style="height: 250px;font-family:var(--bs-font-monospace);"></textarea>
</div>
</div>
<div class="modal-footer text-center">
<button type="button" class="btn btn-danger" id="use_new_pubkey" data-bs-dismiss="modal">I Saved My New Private Key</button>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@@ -161,23 +161,6 @@
</table>
</div>
</div>
{% if perms.secrets.view_secret %}
<div class="card">
<h5 class="card-header">
Secrets
</h5>
<div class="card-body">
{% include 'secrets/inc/assigned_secrets.html' %}
</div>
{% if perms.secrets.add_secret %}
<div class="card-footer text-end noprint">
<a href="{% url 'secrets:secret_add' %}?virtual_machine={{ object.pk }}&return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-primary">
<span class="mdi mdi-plus-thick" aria-hidden="true"></span> Add Secret
</a>
</div>
{% endif %}
</div>
{% endif %}
<div class="card">
<h5 class="card-header">
Services
@@ -209,5 +192,4 @@
{% plugin_full_width_page object %}
</div>
</div>
{% include 'secrets/inc/private_key_modal.html' %}
{% endblock %}