2026-01-25 10:08:36 -03:00
|
|
|
{% extends "base.html" %}
|
|
|
|
|
{% load i18n %}
|
|
|
|
|
|
|
|
|
|
{% block content %}
|
|
|
|
|
<div class="row">
|
|
|
|
|
<div class="col-md-6">
|
|
|
|
|
<div class="card card-primary card-outline">
|
|
|
|
|
<div class="card-body box-profile">
|
|
|
|
|
<h3 class="profile-username text-center">wg{{ instance.instance_id }}</h3>
|
|
|
|
|
<ul class="list-group list-group-unbordered mb-3">
|
2026-01-25 10:17:42 -03:00
|
|
|
<li class="list-group-item">
|
|
|
|
|
<b>{% trans 'Name' %}</b>
|
|
|
|
|
<span class="float-right">{{ instance.name|default_if_none:"-" }}</span>
|
|
|
|
|
</li>
|
|
|
|
|
|
2026-01-25 10:08:36 -03:00
|
|
|
<li class="list-group-item">
|
|
|
|
|
<b>{% trans 'Public Key' %}</b>
|
2026-01-25 10:17:42 -03:00
|
|
|
<div class="float-right">
|
|
|
|
|
<span id="publicKeyTruncated" title="{{ instance.public_key }}">
|
|
|
|
|
{{ instance.public_key|truncatechars:16 }}
|
|
|
|
|
</span>
|
|
|
|
|
<span id="publicKeyFull" style="display: none;">
|
|
|
|
|
{{ instance.public_key }}
|
|
|
|
|
</span>
|
|
|
|
|
<a href="javascript:void(0);" onclick="togglePublicKey()" class="text-primary ml-2">
|
|
|
|
|
<i class="fas fa-eye" id="toggleIcon"></i>
|
|
|
|
|
</a>
|
|
|
|
|
</div>
|
2026-01-25 10:08:36 -03:00
|
|
|
</li>
|
|
|
|
|
<li class="list-group-item">
|
|
|
|
|
<b>{% trans 'Listen Port' %}</b>
|
|
|
|
|
<a class="float-right">{{ instance.listen_port }}</a>
|
|
|
|
|
</li>
|
|
|
|
|
<li class="list-group-item">
|
|
|
|
|
<b>{% trans 'Address' %}</b>
|
|
|
|
|
<a class="float-right">{{ instance.address }}/{{ instance.netmask }}</a>
|
|
|
|
|
</li>
|
|
|
|
|
<li class="list-group-item">
|
|
|
|
|
<b>{% trans 'Hostname' %}</b>
|
|
|
|
|
<a class="float-right">{{ instance.hostname }}</a>
|
|
|
|
|
</li>
|
|
|
|
|
<li class="list-group-item">
|
|
|
|
|
<b>{% trans 'Peers' %}</b>
|
|
|
|
|
<a class="float-right">{{ instance.peer_set.count }}</a>
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
<a href="{% url 'wireguard_manage_instance' %}?uuid={{ instance.uuid }}"
|
2026-01-25 10:17:42 -03:00
|
|
|
class="btn btn-primary btn-block">
|
2026-01-25 10:08:36 -03:00
|
|
|
<b>{% trans 'Edit Instance' %}</b>
|
|
|
|
|
</a>
|
|
|
|
|
<a href="{% url 'wireguard_server_list' %}" class="btn btn-default btn-block">
|
|
|
|
|
<b>{% trans 'Back to List' %}</b>
|
|
|
|
|
</a>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- /.card-body -->
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="col-md-6">
|
|
|
|
|
<div class="card card-primary card-outline">
|
|
|
|
|
<div class="card-header">
|
|
|
|
|
<h3 class="card-title">{% trans 'Traffic Graph' %}</h3>
|
|
|
|
|
<div class="card-tools">
|
|
|
|
|
<form method="get" class="form-inline">
|
2026-01-25 10:17:42 -03:00
|
|
|
<input type="hidden" name="uuid" value="{{ instance.uuid }}">
|
2026-01-25 10:08:36 -03:00
|
|
|
<select name="period" class="form-control form-control-sm" onchange="this.form.submit()">
|
|
|
|
|
<option value="6h" {% if request.GET.period == '6h' %}selected{% endif %}>6h</option>
|
|
|
|
|
<option value="1d" {% if request.GET.period == '1d' %}selected{% endif %}>1d</option>
|
|
|
|
|
<option value="7d" {% if request.GET.period == '7d' %}selected{% endif %}>7d</option>
|
|
|
|
|
<option value="30d" {% if request.GET.period == '30d' %}selected{% endif %}>1m</option>
|
|
|
|
|
<option value="365d" {% if request.GET.period == '365d' %}selected{% endif %}>1y</option>
|
|
|
|
|
</select>
|
|
|
|
|
</form>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="card-body">
|
|
|
|
|
<img src="/rrd/graph/?instance={{ instance.uuid }}&period={{ request.GET.period|default:'6h' }}"
|
|
|
|
|
class="img-fluid" alt="RRD Graph">
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2026-01-25 10:17:42 -03:00
|
|
|
{% endblock %}
|
|
|
|
|
|
|
|
|
|
{% block custom_page_scripts %}
|
|
|
|
|
<script>
|
|
|
|
|
function togglePublicKey() {
|
|
|
|
|
var truncated = document.getElementById('publicKeyTruncated');
|
|
|
|
|
var full = document.getElementById('publicKeyFull');
|
|
|
|
|
var icon = document.getElementById('toggleIcon');
|
|
|
|
|
|
|
|
|
|
if (full.style.display === "none") {
|
|
|
|
|
full.style.display = "inline";
|
|
|
|
|
truncated.style.display = "none";
|
|
|
|
|
icon.classList.remove('fa-eye');
|
|
|
|
|
icon.classList.add('fa-eye-slash');
|
|
|
|
|
} else {
|
|
|
|
|
full.style.display = "none";
|
|
|
|
|
truncated.style.display = "inline";
|
|
|
|
|
icon.classList.remove('fa-eye-slash');
|
|
|
|
|
icon.classList.add('fa-eye');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</script>
|
2026-01-25 10:08:36 -03:00
|
|
|
{% endblock %}
|