Newer
Older
wg-portal / assets / tpl / admin_index.html
@Christoph Haas Christoph Haas on 11 Nov 2020 11 KB many small improvements
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
    <title>{{ .Static.WebsiteTitle }} - Admin</title>
    <meta name="description" content="{{ .Static.WebsiteTitle }}">
    <link rel="stylesheet" href="/css/bootstrap.min.css">
    <link rel="stylesheet" href="/fonts/fontawesome-all.min.css">
    <link rel="stylesheet" href="/css/custom.css">
</head>

<body id="page-top" class="d-flex flex-column min-vh-100">
    {{template "prt_nav.html" .}}
    <div class="container mt-5">
        <h1>WireGuard VPN Administration</h1>
        {{template "prt_flashes.html" .}}
        <div class="card">
            <div class="card-header">
                <div class="d-flex align-items-center">
                    <span class="mr-auto">Interface status for <strong>{{.Device.DeviceName}}</strong></span>
                    <a href="/admin/device/download?dev={{.Device.DeviceName}}"><i class="fas fa-download"></i></a>
                    &nbsp;&nbsp;&nbsp;
                    <a href="/admin/device/edit?dev={{.Device.DeviceName}}"><i class="fas fa-cog"></i></a>
                </div>
            </div>
            <div class="card-body">
                <div class="row">
                    <div class="col-sm-6">
                        <table class="table table-sm table-borderless device-status-table">
                            <tbody>
                            <tr>
                                <td>Public Key:</td>
                                <td>{{.Device.PublicKey}}</td>
                            </tr>
                            <tr>
                                <td>Public Endpoint:</td>
                                <td>{{.Device.Endpoint}}</td>
                            </tr>
                            <tr>
                                <td>Listening Port:</td>
                                <td>{{.Device.ListenPort}}</td>
                            </tr>
                            <tr>
                                <td>Enabled Peers:</td>
                                <td>{{len .Device.Interface.Peers}}</td>
                            </tr>
                            <tr>
                                <td>Total Peers:</td>
                                <td>{{.TotalPeers}}</td>
                            </tr>
                            </tbody>
                        </table>
                    </div>
                    <div class="col-sm-6">
                        <table class="table table-sm table-borderless device-status-table">
                            <tbody>
                            <tr>
                                <td>IP Address:</td>
                                <td>{{.Device.IPsStr}}</td>
                            </tr>
                            <tr>
                                <td>Default allowed IP's:</td>
                                <td>{{.Device.AllowedIPsStr}}</td>
                            </tr>
                            <tr>
                                <td>Default DNS servers:</td>
                                <td>{{.Device.DNSStr}}</td>
                            </tr>
                            <tr>
                                <td>Default MTU:</td>
                                <td>{{.Device.Mtu}}</td>
                            </tr>
                            <tr>
                                <td>Default Keepalive Interval:</td>
                                <td>{{.Device.PersistentKeepalive}}</td>
                            </tr>
                            </tbody>
                        </table>
                    </div>
                </div>

            </div>
        </div>
        <div class="mt-4 row">
            <div class="col-sm-10 col-12">
                <h2 class="mt-2">Current VPN Users</h2>
            </div>
            <div class="col-sm-2 col-12 text-right">
                {{if not .Static.LdapDisabled}}
                <a href="/admin/peer/createldap" title="Add a LDAP user" class="btn btn-primary"><i class="fa fa-fw fa-user-plus"></i></a>
                {{end}}
                <a href="/admin/peer/create" title="Manual add a user" class="btn btn-primary"><i class="fa fa-fw fa-plus"></i>M</a>
            </div>
        </div>
        <div class="mt-2 table-responsive">
            <table class="table table-sm" id="userTable">
                <thead>
                <tr>
                    <th scope="col" class="list-image-cell"></th><!-- Status and expand -->
                    <th scope="col"><a href="?sort=id">Identifier <i class="fa fa-fw {{.Session.GetSortIcon "id"}}"></i></a></th>
                    <th scope="col"><a href="?sort=pubKey">Public Key <i class="fa fa-fw {{.Session.GetSortIcon "pubKey"}}"></i></a></th>
                    <th scope="col"><a href="?sort=mail">E-Mail <i class="fa fa-fw {{.Session.GetSortIcon "mail"}}"></i></a></th>
                    <th scope="col"><a href="?sort=ip">IP's <i class="fa fa-fw {{.Session.GetSortIcon "ip"}}"></i></a></th>
                    <th scope="col"><a href="?sort=handshake">Handshake <i class="fa fa-fw {{.Session.GetSortIcon "handshake"}}"></i></a></th>
                    <th scope="col"></th><!-- Actions -->
                </tr>
                </thead>
                <tbody>
                {{range $i, $p :=.Peers}}
                    <tr id="user-pos-{{$i}}" {{if $p.DeactivatedAt}}class="disabled-peer"{{end}}>
                        <th scope="row" class="list-image-cell">
                            <a href="#{{$p.UID}}" data-toggle="collapse" class="collapse-indicator collapsed"></a>
                            <!-- online check -->
                            <span class="online-status" id="online-{{$p.UID}}" data-pkey="{{$p.PublicKey}}"><i class="fas fa-unlink"></i></span>
                        </th>
                        <td>{{$p.Identifier}}</td>
                        <td>{{$p.PublicKey}}</td>
                        <td>{{$p.Email}}</td>
                        <td>{{$p.IPsStr}}</td>
                        <td><span data-toggle="tooltip" data-placement="left" title="" data-original-title="{{$p.LastHandshakeTime}}">{{$p.LastHandshake}}</span></td>
                        <td>
                            {{if eq $.Session.IsAdmin true}}
                                <a href="/admin/peer/edit?pkey={{$p.PublicKey}}"><i class="fas fa-cog"></i></a>
                            {{end}}
                        </td>
                    </tr>
                    <tr class="hiddenRow">
                        <td colspan="7" class="hiddenCell" style="white-space:nowrap">
                            <div class="collapse" id="{{$p.UID}}" data-parent="#userTable">
                                <div class="row collapsedRow">
                                    <div class="col-md-6 leftBorder">
                                        <ul class="nav nav-tabs">
                                            <li class="nav-item">
                                                <a class="nav-link active" data-toggle="tab" href="#t1{{$p.UID}}">Personal</a>
                                            </li>
                                            <li class="nav-item">
                                                <a class="nav-link" data-toggle="tab" href="#t2{{$p.UID}}">Configuration</a>
                                            </li>
                                            <li class="nav-item">
                                                <a class="nav-link" data-toggle="tab" href="#t3{{$p.UID}}">Danger Zone</a>
                                            </li>
                                        </ul>
                                        <div class="tab-content" id="tabContent{{$p.UID}}">
                                            <div id="t1{{$p.UID}}" class="tab-pane fade active show">
                                                <h4>User details</h4>
                                                {{if not $p.LdapUser}}
                                                    <p>No LDAP user-information available...</p>
                                                {{else}}
                                                    <ul>
                                                        <li>Firstname: {{$p.LdapUser.Firstname}}</li>
                                                        <li>Lastname: {{$p.LdapUser.Lastname}}</li>
                                                        <li>Phone: {{$p.UID}}</li>
                                                        <li>Mail: {{$p.LdapUser.Mail}}</li>
                                                        <li>Department: {{$p.UID}}</li>
                                                    </ul>
                                                {{end}}
                                                <h4>Traffic</h4>
                                                {{if not $p.Peer}}
                                                    <p>No Traffic data available...</p>
                                                {{else}}
                                                    <p>{{if $p.DeactivatedAt}}-{{else}}<i class="fas fa-long-arrow-alt-down"></i></i> {{formatBytes $p.Peer.ReceiveBytes}} / <i class="fas fa-long-arrow-alt-up"></i> {{formatBytes $p.Peer.TransmitBytes}}{{end}}</p>
                                                {{end}}
                                            </div>
                                            <div id="t2{{$p.UID}}" class="tab-pane fade">
                                                <pre>{{$p.Config}}</pre>
                                            </div>
                                            <div id="t3{{$p.UID}}" class="tab-pane fade">
                                                <a href="/admin/peer/delete?pkey={{$p.PublicKey}}" class="btn btn-danger" title="Delete peer">Delete</a>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="col-md-3">
                                        <img class="list-image-large" src="/user/qrcode?pkey={{$p.PublicKey}}"/>
                                    </div>
                                    <div class="col-md-3">
                                        <div class="float-right mt-5">
                                        <a href="/admin/peer/download?pkey={{$p.PublicKey}}" class="btn btn-primary" title="Download configuration">Download</a>
                                        <a href="/admin/peer/email?pkey={{$p.PublicKey}}" class="btn btn-primary" title="Send configuration via Email">Email</a>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </td>
                    </tr>
                {{end}}
                </tbody>
            </table>
            <p>Currently listed peers: <strong>{{len .Peers}}</strong></p>
        </div>
    </div>
    {{template "prt_footer.html" .}}
    <script src="/js/jquery.min.js"></script>
    <script src="/js/bootstrap.bundle.min.js"></script>
    <script src="/js/jquery.easing.js"></script>
    <script src="/js/custom.js"></script>
</body>

</html>