Files
mailgoserver/internal/webui/templates/sidebar_email.html
T

183 lines
8.7 KiB
HTML

{{define "sidebar_email.html"}}
<nav class="sidebar bg-dark border-end border-secondary position-fixed h-100" style="width: var(--sidebar-width); z-index: 1000;">
<div class="d-flex flex-column h-100">
<div class="p-3 border-bottom border-secondary d-flex align-items-start justify-content-between">
<div>
<h5 class="text-white mb-0">
<i class="bi bi-server me-2"></i>
SMTP Server
</h5>
<small class="text-muted">Management Console</small>
</div>
<button id="sidebarPinBtn" class="btn btn-sm btn-outline-secondary" title="Unpin sidebar (auto-hide)" onclick="toggleSidebarPin()">
<i class="bi bi-pin-angle-fill" id="sidebarPinIcon"></i>
</button>
</div>
<div class="flex-grow-1 overflow-auto">
<ul class="nav nav-pills flex-column p-3">
<li class="nav-item mb-2">
<a href="/pymta-manager/" class="nav-link text-white {{if eq (dget . "active") "dashboard"}}active{{end}}">
<i class="bi bi-speedometer2 me-2"></i>
Dashboard
</a>
</li>
<li class="nav-item mb-2">
<h6 class="text-muted text-uppercase small mb-2 mt-3">
<i class="bi bi-globe me-1"></i>
Email Server Management
</h6>
</li>
<li class="nav-item mb-1">
<a href="/pymta-manager/domains" class="nav-link text-white {{if eq (dget . "active") "domains"}}active{{end}}">
<i class="bi bi-list-ul me-2"></i>
Domains
<span class="badge bg-secondary ms-auto">{{dget . "domain_count"}}</span>
</a>
</li>
<li class="nav-item mb-1">
<a href="/pymta-manager/senders" class="nav-link text-white {{if eq (dget . "active") "senders"}}active{{end}}">
<i class="bi bi-people me-2"></i>
Allowed Senders
<span class="badge bg-secondary ms-auto">{{dget . "sender_count"}}</span>
</a>
</li>
<li class="nav-item mb-1">
<a href="/pymta-manager/mailboxes" class="nav-link text-white {{if eq (dget . "active") "mailboxes"}}active{{end}}">
<i class="bi bi-inbox me-2"></i>
Mailboxes
<span class="badge bg-secondary ms-auto">{{dget . "mailbox_count"}}</span>
</a>
</li>
<li class="nav-item mb-1">
<a href="/pymta-manager/ips" class="nav-link text-white {{if eq (dget . "active") "ips"}}active{{end}}">
<i class="bi bi-router me-2"></i>
Whitelisted IPs
<span class="badge bg-secondary ms-auto">{{dget . "ip_count"}}</span>
</a>
</li>
<li class="nav-item mb-1">
<a href="/pymta-manager/dkim" class="nav-link text-white {{if eq (dget . "active") "dkim"}}active{{end}}">
<i class="bi bi-shield-check me-2"></i>
DKIM Keys
<span class="badge bg-secondary ms-auto">{{dget . "dkim_count"}}</span>
</a>
</li>
{{if dget . "is_global_admin"}}
<li class="nav-item mb-1">
<a href="/pymta-manager/letsencrypt" class="nav-link text-white {{if eq (dget . "active") "letsencrypt"}}active{{end}}">
<i class="bi bi-patch-check me-2"></i>
Let's Encrypt
</a>
</li>
{{end}}
<li class="nav-item mb-1">
<a href="/pymta-manager/logs" class="nav-link text-white {{if eq (dget . "active") "logs"}}active{{end}}">
<i class="bi bi-journal-text me-2"></i>
Emails Log
</a>
</li>
<li class="nav-item mb-2">
<h6 class="text-muted text-uppercase small mb-2 mt-3">
<i class="bi bi-gear me-1"></i>
Configuration
</h6>
</li>
{{if dget . "is_global_admin"}}
<li class="nav-item mb-1">
<a href="/pymta-manager/settings" class="nav-link text-white {{if eq (dget . "active") "settings"}}active{{end}}">
<i class="bi bi-sliders me-2"></i>
Server Settings
</a>
</li>
{{end}}
<li class="nav-item mb-1">
<a href="/pymta-manager/admins" class="nav-link text-white {{if eq (dget . "active") "admins"}}active{{end}}">
<i class="bi bi-people-fill me-2"></i>
Admins
</a>
</li>
<li class="nav-item mb-1">
<a href="/pymta-manager/account" class="nav-link text-white {{if eq (dget . "active") "account"}}active{{end}}">
<i class="bi bi-person-circle me-2"></i>
Account
</a>
</li>
<li class="nav-item mb-1">
<a href="/webmail/login" target="_blank" class="nav-link text-white" title="Give this link to mailbox owners for self-service password/MFA/app-password management">
<i class="bi bi-mailbox2-flag me-2"></i>
Webmail Portal
<i class="bi bi-box-arrow-up-right ms-1 small"></i>
</a>
</li>
<li class="nav-item mb-1">
<form method="post" action="/pymta-manager/logout">
<button type="submit" class="nav-link text-white w-100 text-start border-0 bg-transparent">
<i class="bi bi-box-arrow-right me-2"></i>
Sign out
</button>
</form>
</li>
</ul>
</div>
<div class="p-3 border-top border-secondary">
<div class="d-flex align-items-center">
<div class="flex-grow-1">
<small class="text-muted d-block">Server Status</small>
<small class="{{if eq .health.Status "healthy"}}text-success{{else}}text-warning{{end}} status-indicator"
data-bs-toggle="tooltip"
data-bs-html="true"
data-bs-placement="top"
title="{{safe (printf "<div class='text-start'><strong>Service Status:</strong><br>SMTP Server: %s<br>Web Frontend: %s<br>Database: %s</div>" (title .health.Services.smtp_server) (title .health.Services.web_frontend) (title .health.Services.database))}}">
<i class="bi bi-circle-fill me-1" style="font-size: 0.5rem;"></i>
{{title .health.Status}}
</small>
</div>
<button class="btn btn-outline-secondary btn-sm" title="Refresh Status" onclick="location.reload()">
<i class="bi bi-arrow-clockwise"></i>
</button>
</div>
</div>
</div>
</nav>
<style>
.sidebar .nav-link { border-radius: 0.375rem; padding: 0.75rem 1rem; margin-bottom: 0.25rem; transition: all 0.2s ease; }
.sidebar .nav-link:hover { background-color: rgba(255, 255, 255, 0.1); transform: translateX(4px); }
.sidebar .nav-link.active { background-color: #0d6efd; color: white !important; }
.sidebar .nav-link.active:hover { background-color: #0b5ed7; }
.sidebar h6 { font-size: 0.75rem; font-weight: 600; letter-spacing: 0.05em; border-bottom: 1px solid rgba(255, 255, 255, 0.1); padding-bottom: 0.5rem; margin-bottom: 1rem !important; }
.sidebar .badge { font-size: 0.7rem; }
.status-indicator { cursor: pointer; }
@media (max-width: 768px) {
.sidebar { transform: translateX(-100%); transition: transform 0.3s ease; }
.sidebar.show { transform: translateX(0); }
.content-area { margin-left: 0 !important; }
}
</style>
<script>
document.addEventListener('DOMContentLoaded', function() {
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]');
tooltipTriggerList.forEach(function(tooltipTriggerEl) {
new bootstrap.Tooltip(tooltipTriggerEl, { html: true, placement: 'top', trigger: 'hover' });
});
});
</script>
{{end}}