Updated js/css libraries and fixed smallscreen err

- Updated bootstrap js and css to the latest version
- Fixed issue with small-screens where the menu overlaps the token input
  - The menu now collapses to a hamburger menu
  - Menu's only accessable when logedin are hidden when you are not
- Changed Users Overview to use a table to prevent small-screen issues.
This commit is contained in:
BlackDex 2020-06-01 18:58:38 +02:00
parent 5e802f8aa3
commit b47cf97409
4 changed files with 2186 additions and 2260 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,40 +1,26 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="robots" content="noindex,nofollow" />
<title>Bitwarden_rs Admin Panel</title> <title>Bitwarden_rs Admin Panel</title>
<link rel="stylesheet" href="{{urlpath}}/bwrs_static/bootstrap.css" /> <link rel="stylesheet" href="{{urlpath}}/bwrs_static/bootstrap.css" />
<script src="{{urlpath}}/bwrs_static/bootstrap-native-v4.js"></script>
<script src="{{urlpath}}/bwrs_static/md5.js"></script>
<script src="{{urlpath}}/bwrs_static/identicon.js"></script>
<style> <style>
body { body {
padding-top: 70px; padding-top: 75px;
} }
@media (max-width:768px) {
body {
padding-top: 190px;
}
.container {
max-width: 100%;
}
}
img { img {
width: 48px; width: 48px;
height: 48px; height: 48px;
} }
.navbar img { .navbar img {
height: 24px; height: 24px;
width: auto; width: auto;
} }
</style> </style>
<script src="{{urlpath}}/bwrs_static/md5.js"></script>
<script src="{{urlpath}}/bwrs_static/identicon.js"></script>
<script> <script>
function reload() { window.location.reload(); } function reload() { window.location.reload(); }
function msg(text, reload_page = true) { function msg(text, reload_page = true) {
@ -86,47 +72,44 @@
</head> </head>
<body class="bg-light"> <body class="bg-light">
<nav class="navbar navbar-expand-sm navbar-dark bg-dark fixed-top shadow mb-4"> <nav class="navbar navbar-expand-md navbar-dark bg-dark mb-4 shadow fixed-top">
<div class="container"> <div class="container">
<a class="navbar-brand" href="{{urlpath}}/admin"><img class="pr-1" src="{{urlpath}}/bwrs_static/shield-white.png">Bitwarden_rs Admin</a> <a class="navbar-brand" href="{{urlpath}}/admin"><img class="pr-1" src="{{urlpath}}/bwrs_static/shield-white.png">Bitwarden_rs Admin</a>
<div class="navbar-collapse"> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse"
<ul class="navbar-nav"> aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
<li class="nav-item"> <span class="navbar-toggler-icon"></span>
<a class="nav-link" href="{{urlpath}}/admin">Settings</a> </button>
</li> <div class="collapse navbar-collapse" id="navbarCollapse">
<li class="nav-item"> <ul class="navbar-nav mr-auto">
<a class="nav-link" href="{{urlpath}}/admin/users/overview">Users</a> {{#if logged_in}}
</li> <li class="nav-item">
<li class="nav-item"> <a class="nav-link" href="{{urlpath}}/admin">Settings</a>
<a class="nav-link" href="{{urlpath}}/admin/organizations/overview">Organizations</a> </li>
</li> <li class="nav-item">
<li class="nav-item"> <a class="nav-link" href="{{urlpath}}/admin/users/overview">Users</a>
<a class="nav-link" href="{{urlpath}}/admin/diagnostics">Diagnostics</a> </li>
</li> <li class="nav-item">
<li class="nav-item"> <a class="nav-link" href="{{urlpath}}/admin/organizations/overview">Organizations</a>
<a class="nav-link" href="{{urlpath}}/">Vault</a> </li>
</li> <li class="nav-item">
</ul> <a class="nav-link" href="{{urlpath}}/admin/diagnostics">Diagnostics</a>
</li>
{{/if}}
<li class="nav-item">
<a class="nav-link" href="{{urlpath}}/">Vault</a>
</li>
</ul>
{{#if logged_in}}
<a class="btn btn-sm btn-secondary" href="{{urlpath}}/admin/logout">Log Out</a>
{{/if}}
</div>
</div> </div>
<ul class="navbar-nav">
{{#if version}}
<li class="nav-item">
<span class="navbar-text mr-2">Version: {{version}}</span>
</li>
{{/if}}
{{#if logged_in}}
<li class="nav-item rounded btn-secondary">
<a class="nav-link" href="{{urlpath}}/admin/logout">Log Out</a>
</li>
{{/if}}
</ul>
</div>
</nav> </nav>
{{> (page_content) }} {{> (page_content) }}
<!-- This script needs to be at the bottom, else it will fail! -->
<script> <script>
// get current URL path and assign 'active' class to the correct nav-item // get current URL path and assign 'active' class to the correct nav-item
(function () { (function () {
@ -138,6 +121,7 @@
} }
})(); })();
</script> </script>
<!-- This script needs to be at the bottom, else it will fail! -->
<script src="{{urlpath}}/bwrs_static/bootstrap-native-v4.js"></script>
</body> </body>
</html> </html>

View file

@ -2,57 +2,61 @@
<div id="users-block" class="my-3 p-3 bg-white rounded shadow"> <div id="users-block" class="my-3 p-3 bg-white rounded shadow">
<h6 class="border-bottom pb-2 mb-0">Registered Users</h6> <h6 class="border-bottom pb-2 mb-0">Registered Users</h6>
<div id="users-list">
{{#each users}}
<div class="media pt-3"> <div class="table-responsive-xl small">
<img class="mr-2 rounded identicon" data-src="{{Email}}"> <table class="table table-sm table-striped table-hover">
<div class="media-body pb-3 mb-0 small border-bottom"> <thead>
<div class="row justify-content-between"> <tr>
<div class="col"> <th style="width: 24px;">User</th>
<th></th>
<th style="width:90px; min-width: 90px;">Items</th>
<th style="min-width: 140px;">Organizations</th>
<th style="width: 140px; min-width: 140px;">Actions</th>
</tr>
</thead>
<tbody>
{{#each users}}
<tr>
<td><img class="mr-2 rounded identicon" data-src="{{Email}}"></td>
<td>
<strong>{{Name}}</strong> <strong>{{Name}}</strong>
{{#if TwoFactorEnabled}} <span class="d-block">{{Email}}</span>
<span class="badge badge-success ml-2">2FA</span> <span class="d-block">
{{/if}} {{#if TwoFactorEnabled}}
{{#case _Status 1}} <span class="badge badge-success mr-2" title="2FA is enabled">2FA</span>
<span class="badge badge-warning ml-2">Invited</span> {{/if}}
{{/case}} {{#case _Status 1}}
<span class="d-block">{{Email}} <span class="badge badge-warning mr-2" title="User is invited">Invited</span>
{{/case}}
{{#if EmailVerified}} {{#if EmailVerified}}
<span class="badge badge-success ml-2">Verified</span> <span class="badge badge-success mr-2" title="Email has been verified">Verified</span>
{{/if}} {{/if}}
</span> </span>
</div> </td>
<div class="col"> <td>
<strong> Personal Items: </strong> <span class="d-block">{{cipher_count}}</span>
<span class="d-block"> </td>
{{cipher_count}} <td>
</span> {{#each Organizations}}
</div> <span class="badge badge-primary" data-orgtype="{{Type}}">{{Name}}</span>
<div class="col-4"> {{/each}}
<strong> Organizations: </strong> </td>
<span class="d-block"> <td style="font-size: 90%; text-align: right; padding-right: 15px">
{{#each Organizations}}
<span class="badge badge-primary" data-orgtype="{{Type}}">{{Name}}</span>
{{/each}}
</span>
</div>
<div class="col" style="font-size: 90%; text-align: right; padding-right: 15px">
{{#if TwoFactorEnabled}} {{#if TwoFactorEnabled}}
<a class="mr-2" href="#" onclick='remove2fa({{jsesc Id}})'>Remove all 2FA</a> <a class="d-block" href="#" onclick='remove2fa({{jsesc Id}})'>Remove all 2FA</a>
{{/if}} {{/if}}
<a class="d-block" href="#" onclick='deauthUser({{jsesc Id}})'>Deauthorize sessions</a>
<a class="mr-2" href="#" onclick='deauthUser({{jsesc Id}})'>Deauthorize sessions</a> <a class="d-block" href="#" onclick='deleteUser({{jsesc Id}}, {{jsesc Email}})'>Delete User</a>
<a class="mr-2" href="#" onclick='deleteUser({{jsesc Id}}, {{jsesc Email}})'>Delete User</a> </td>
</div> </tr>
</div> {{/each}}
</div> </tbody>
</div> </table>
{{/each}}
</div> </div>
<div class="mt-3"> <div class="mt-3">
<button type="button" class="btn btn-sm btn-link" onclick="updateRevisions();" <button type="button" class="btn btn-sm btn-danger" onclick="updateRevisions();"
title="Force all clients to fetch new data next time they connect. Useful after restoring a backup to remove any stale data."> title="Force all clients to fetch new data next time they connect. Useful after restoring a backup to remove any stale data.">
Force clients to resync Force clients to resync
</button> </button>