Spiegel von
https://github.com/dani-garcia/vaultwarden.git
synchronisiert 2024-08-19 02:15:24 +02:00
Several config and admin interface fixes
- Fixed issue with domains starting with `admin` - Fixed issue with DUO not being enabled globally anymore (regression) - Renamed `Ciphers` to `Entries` in overview - Improved `ADMIN_TOKEN` description - Updated jquery-slim and datatables Resolves #3382 Resolves #3415 Resolves discussion on #3288
Dieser Commit ist enthalten in:
Ursprung
3bd4e42fb0
Commit
ae437f70a3
10 geänderte Dateien mit 160 neuen und 117 gelöschten Zeilen
|
@ -264,6 +264,8 @@
|
||||||
## For details see: https://github.com/dani-garcia/vaultwarden/wiki/Enabling-admin-page#secure-the-admin_token
|
## For details see: https://github.com/dani-garcia/vaultwarden/wiki/Enabling-admin-page#secure-the-admin_token
|
||||||
## If not set, the admin panel is disabled
|
## If not set, the admin panel is disabled
|
||||||
## New Argon2 PHC string
|
## New Argon2 PHC string
|
||||||
|
## Note that for some environments, like docker-compose you need to escape all the dollar signs `$` with an extra dollar sign like `$$`
|
||||||
|
## Also, use single quotes (') instead of double quotes (") to enclose the string when needed
|
||||||
# ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$MmeKRnGK5RW5mJS7h3TOL89GrpLPXJPAtTK8FTqj9HM$DqsstvoSAETl9YhnsXbf43WeaUwJC6JhViIvuPoig78'
|
# ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$MmeKRnGK5RW5mJS7h3TOL89GrpLPXJPAtTK8FTqj9HM$DqsstvoSAETl9YhnsXbf43WeaUwJC6JhViIvuPoig78'
|
||||||
## Old plain text string (Will generate warnings in favor of Argon2)
|
## Old plain text string (Will generate warnings in favor of Argon2)
|
||||||
# ADMIN_TOKEN=Vy2VyYTTsKPv8W5aEOWUbB/Bt3DEKePbHmI4m9VcemUMS2rEviDowNAFqYi1xjmp
|
# ADMIN_TOKEN=Vy2VyYTTsKPv8W5aEOWUbB/Bt3DEKePbHmI4m9VcemUMS2rEviDowNAFqYi1xjmp
|
||||||
|
|
|
@ -136,8 +136,8 @@ pub fn static_files(filename: String) -> Result<(ContentType, &'static [u8]), Er
|
||||||
"jdenticon.js" => Ok((ContentType::JavaScript, include_bytes!("../static/scripts/jdenticon.js"))),
|
"jdenticon.js" => Ok((ContentType::JavaScript, include_bytes!("../static/scripts/jdenticon.js"))),
|
||||||
"datatables.js" => Ok((ContentType::JavaScript, include_bytes!("../static/scripts/datatables.js"))),
|
"datatables.js" => Ok((ContentType::JavaScript, include_bytes!("../static/scripts/datatables.js"))),
|
||||||
"datatables.css" => Ok((ContentType::CSS, include_bytes!("../static/scripts/datatables.css"))),
|
"datatables.css" => Ok((ContentType::CSS, include_bytes!("../static/scripts/datatables.css"))),
|
||||||
"jquery-3.6.3.slim.js" => {
|
"jquery-3.6.4.slim.js" => {
|
||||||
Ok((ContentType::JavaScript, include_bytes!("../static/scripts/jquery-3.6.3.slim.js")))
|
Ok((ContentType::JavaScript, include_bytes!("../static/scripts/jquery-3.6.4.slim.js")))
|
||||||
}
|
}
|
||||||
_ => err!(format!("Static file not found: {filename}")),
|
_ => err!(format!("Static file not found: {filename}")),
|
||||||
}
|
}
|
||||||
|
|
|
@ -476,7 +476,7 @@ make_config! {
|
||||||
/// provides unauthenticated access to potentially sensitive data.
|
/// provides unauthenticated access to potentially sensitive data.
|
||||||
show_password_hint: bool, true, def, false;
|
show_password_hint: bool, true, def, false;
|
||||||
|
|
||||||
/// Admin page token |> The token used to authenticate in this very same page. Changing it here won't deauthorize the current session
|
/// Admin token/Argon2 PHC |> The plain text token or Argon2 PHC string used to authenticate in this very same page. Changing it here will not deauthorize the current session!
|
||||||
admin_token: Pass, true, option;
|
admin_token: Pass, true, option;
|
||||||
|
|
||||||
/// Invitation organization name |> Name shown in the invitation emails that don't come from a specific organization
|
/// Invitation organization name |> Name shown in the invitation emails that don't come from a specific organization
|
||||||
|
@ -603,7 +603,7 @@ make_config! {
|
||||||
/// Global Duo settings (Note that users can override them)
|
/// Global Duo settings (Note that users can override them)
|
||||||
duo: _enable_duo {
|
duo: _enable_duo {
|
||||||
/// Enabled
|
/// Enabled
|
||||||
_enable_duo: bool, true, def, false;
|
_enable_duo: bool, true, def, true;
|
||||||
/// Integration Key
|
/// Integration Key
|
||||||
duo_ikey: String, true, option;
|
duo_ikey: String, true, option;
|
||||||
/// Secret Key
|
/// Secret Key
|
||||||
|
|
2
src/static/scripts/admin.css
gevendort
2
src/static/scripts/admin.css
gevendort
|
@ -25,7 +25,7 @@ img {
|
||||||
min-width: 85px;
|
min-width: 85px;
|
||||||
max-width: 85px;
|
max-width: 85px;
|
||||||
}
|
}
|
||||||
#users-table .vw-ciphers, #orgs-table .vw-users, #orgs-table .vw-ciphers {
|
#users-table .vw-entries, #orgs-table .vw-users, #orgs-table .vw-entries {
|
||||||
min-width: 35px;
|
min-width: 35px;
|
||||||
max-width: 40px;
|
max-width: 40px;
|
||||||
}
|
}
|
||||||
|
|
13
src/static/scripts/admin.js
gevendort
13
src/static/scripts/admin.js
gevendort
|
@ -3,16 +3,17 @@
|
||||||
/* exported BASE_URL, _post */
|
/* exported BASE_URL, _post */
|
||||||
|
|
||||||
function getBaseUrl() {
|
function getBaseUrl() {
|
||||||
// If the base URL is `https://vaultwarden.example.com/base/path/`,
|
// If the base URL is `https://vaultwarden.example.com/base/path/admin/`,
|
||||||
// `window.location.href` should have one of the following forms:
|
// `window.location.href` should have one of the following forms:
|
||||||
//
|
//
|
||||||
// - `https://vaultwarden.example.com/base/path/`
|
// - `https://vaultwarden.example.com/base/path/admin`
|
||||||
// - `https://vaultwarden.example.com/base/path/#/some/route[?queryParam=...]`
|
// - `https://vaultwarden.example.com/base/path/admin/#/some/route[?queryParam=...]`
|
||||||
//
|
//
|
||||||
// We want to get to just `https://vaultwarden.example.com/base/path`.
|
// We want to get to just `https://vaultwarden.example.com/base/path`.
|
||||||
const baseUrl = window.location.href;
|
const pathname = window.location.pathname;
|
||||||
const adminPos = baseUrl.indexOf("/admin");
|
const adminPos = pathname.indexOf("/admin");
|
||||||
return baseUrl.substring(0, adminPos != -1 ? adminPos : baseUrl.length);
|
const newPathname = pathname.substring(0, adminPos != -1 ? adminPos : pathname.length);
|
||||||
|
return `${window.location.origin}${newPathname}`;
|
||||||
}
|
}
|
||||||
const BASE_URL = getBaseUrl();
|
const BASE_URL = getBaseUrl();
|
||||||
|
|
||||||
|
|
15
src/static/scripts/datatables.css
gevendort
15
src/static/scripts/datatables.css
gevendort
|
@ -4,10 +4,10 @@
|
||||||
*
|
*
|
||||||
* To rebuild or modify this file with the latest versions of the included
|
* To rebuild or modify this file with the latest versions of the included
|
||||||
* software please visit:
|
* software please visit:
|
||||||
* https://datatables.net/download/#bs5/dt-1.13.2
|
* https://datatables.net/download/#bs5/dt-1.13.4
|
||||||
*
|
*
|
||||||
* Included libraries:
|
* Included libraries:
|
||||||
* DataTables 1.13.2
|
* DataTables 1.13.4
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@charset "UTF-8";
|
@charset "UTF-8";
|
||||||
|
@ -79,6 +79,7 @@ table.dataTable thead > tr > td.sorting_asc_disabled:before,
|
||||||
table.dataTable thead > tr > td.sorting_desc_disabled:before {
|
table.dataTable thead > tr > td.sorting_desc_disabled:before {
|
||||||
bottom: 50%;
|
bottom: 50%;
|
||||||
content: "▲";
|
content: "▲";
|
||||||
|
content: "▲"/"";
|
||||||
}
|
}
|
||||||
table.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:after,
|
table.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:after,
|
||||||
table.dataTable thead > tr > td.sorting:after,
|
table.dataTable thead > tr > td.sorting:after,
|
||||||
|
@ -88,6 +89,7 @@ table.dataTable thead > tr > td.sorting_asc_disabled:after,
|
||||||
table.dataTable thead > tr > td.sorting_desc_disabled:after {
|
table.dataTable thead > tr > td.sorting_desc_disabled:after {
|
||||||
top: 50%;
|
top: 50%;
|
||||||
content: "▼";
|
content: "▼";
|
||||||
|
content: "▼"/"";
|
||||||
}
|
}
|
||||||
table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:after,
|
table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:after,
|
||||||
table.dataTable thead > tr > td.sorting_asc:before,
|
table.dataTable thead > tr > td.sorting_asc:before,
|
||||||
|
@ -104,9 +106,9 @@ table.dataTable thead > tr > td:active {
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.dataTables_scrollBody table.dataTable thead > tr > th:before, div.dataTables_scrollBody table.dataTable thead > tr > th:after,
|
div.dataTables_scrollBody > table.dataTable > thead > tr > th:before, div.dataTables_scrollBody > table.dataTable > thead > tr > th:after,
|
||||||
div.dataTables_scrollBody table.dataTable thead > tr > td:before,
|
div.dataTables_scrollBody > table.dataTable > thead > tr > td:before,
|
||||||
div.dataTables_scrollBody table.dataTable thead > tr > td:after {
|
div.dataTables_scrollBody > table.dataTable > thead > tr > td:after {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,7 +134,8 @@ div.dataTables_processing > div:last-child > div {
|
||||||
width: 13px;
|
width: 13px;
|
||||||
height: 13px;
|
height: 13px;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
background: 13 110 253;
|
background: rgb(13, 110, 253);
|
||||||
|
background: rgb(var(--dt-row-selected));
|
||||||
animation-timing-function: cubic-bezier(0, 1, 1, 0);
|
animation-timing-function: cubic-bezier(0, 1, 1, 0);
|
||||||
}
|
}
|
||||||
div.dataTables_processing > div:last-child > div:nth-child(1) {
|
div.dataTables_processing > div:last-child > div:nth-child(1) {
|
||||||
|
|
101
src/static/scripts/datatables.js
gevendort
101
src/static/scripts/datatables.js
gevendort
|
@ -4,20 +4,20 @@
|
||||||
*
|
*
|
||||||
* To rebuild or modify this file with the latest versions of the included
|
* To rebuild or modify this file with the latest versions of the included
|
||||||
* software please visit:
|
* software please visit:
|
||||||
* https://datatables.net/download/#bs5/dt-1.13.2
|
* https://datatables.net/download/#bs5/dt-1.13.4
|
||||||
*
|
*
|
||||||
* Included libraries:
|
* Included libraries:
|
||||||
* DataTables 1.13.2
|
* DataTables 1.13.4
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*! DataTables 1.13.2
|
/*! DataTables 1.13.4
|
||||||
* ©2008-2023 SpryMedia Ltd - datatables.net/license
|
* ©2008-2023 SpryMedia Ltd - datatables.net/license
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @summary DataTables
|
* @summary DataTables
|
||||||
* @description Paginate, search and order HTML tables
|
* @description Paginate, search and order HTML tables
|
||||||
* @version 1.13.2
|
* @version 1.13.4
|
||||||
* @author SpryMedia Ltd
|
* @author SpryMedia Ltd
|
||||||
* @contact www.datatables.net
|
* @contact www.datatables.net
|
||||||
* @copyright SpryMedia Ltd.
|
* @copyright SpryMedia Ltd.
|
||||||
|
@ -46,6 +46,11 @@
|
||||||
}
|
}
|
||||||
else if ( typeof exports === 'object' ) {
|
else if ( typeof exports === 'object' ) {
|
||||||
// CommonJS
|
// CommonJS
|
||||||
|
// jQuery's factory checks for a global window - if it isn't present then it
|
||||||
|
// returns a factory function that expects the window object
|
||||||
|
var jq = require('jquery');
|
||||||
|
|
||||||
|
if (typeof window !== 'undefined') {
|
||||||
module.exports = function (root, $) {
|
module.exports = function (root, $) {
|
||||||
if ( ! root ) {
|
if ( ! root ) {
|
||||||
// CommonJS environments without a window global must pass a
|
// CommonJS environments without a window global must pass a
|
||||||
|
@ -54,14 +59,16 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ! $ ) {
|
if ( ! $ ) {
|
||||||
$ = typeof window !== 'undefined' ? // jQuery's factory checks for a global window
|
$ = jq( root );
|
||||||
require('jquery') :
|
|
||||||
require('jquery')( root );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return factory( $, root, root.document );
|
return factory( $, root, root.document );
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
return factory( jq, window, window.document );
|
||||||
|
}
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
// Browser
|
// Browser
|
||||||
window.DataTable = factory( jQuery, window, document );
|
window.DataTable = factory( jQuery, window, document );
|
||||||
|
@ -73,6 +80,12 @@
|
||||||
|
|
||||||
var DataTable = function ( selector, options )
|
var DataTable = function ( selector, options )
|
||||||
{
|
{
|
||||||
|
// Check if called with a window or jQuery object for DOM less applications
|
||||||
|
// This is for backwards compatibility
|
||||||
|
if (DataTable.factory(selector, options)) {
|
||||||
|
return DataTable;
|
||||||
|
}
|
||||||
|
|
||||||
// When creating with `new`, create a new DataTable, returning the API instance
|
// When creating with `new`, create a new DataTable, returning the API instance
|
||||||
if (this instanceof DataTable) {
|
if (this instanceof DataTable) {
|
||||||
return $(selector).DataTable(options);
|
return $(selector).DataTable(options);
|
||||||
|
@ -1177,6 +1190,7 @@
|
||||||
type: sort !== null ? i+'.@data-'+sort : undefined,
|
type: sort !== null ? i+'.@data-'+sort : undefined,
|
||||||
filter: filter !== null ? i+'.@data-'+filter : undefined
|
filter: filter !== null ? i+'.@data-'+filter : undefined
|
||||||
};
|
};
|
||||||
|
col._isArrayHost = true;
|
||||||
|
|
||||||
_fnColumnOptions( oSettings, i );
|
_fnColumnOptions( oSettings, i );
|
||||||
}
|
}
|
||||||
|
@ -2365,7 +2379,7 @@
|
||||||
|
|
||||||
// Indicate if DataTables should read DOM data as an object or array
|
// Indicate if DataTables should read DOM data as an object or array
|
||||||
// Used in _fnGetRowElements
|
// Used in _fnGetRowElements
|
||||||
if ( typeof mDataSrc !== 'number' ) {
|
if ( typeof mDataSrc !== 'number' && ! oCol._isArrayHost ) {
|
||||||
oSettings._rowReadObject = true;
|
oSettings._rowReadObject = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5119,7 +5133,8 @@
|
||||||
{
|
{
|
||||||
return $('<div/>', {
|
return $('<div/>', {
|
||||||
'id': ! settings.aanFeatures.r ? settings.sTableId+'_processing' : null,
|
'id': ! settings.aanFeatures.r ? settings.sTableId+'_processing' : null,
|
||||||
'class': settings.oClasses.sProcessing
|
'class': settings.oClasses.sProcessing,
|
||||||
|
'role': 'status'
|
||||||
} )
|
} )
|
||||||
.html( settings.oLanguage.sProcessing )
|
.html( settings.oLanguage.sProcessing )
|
||||||
.append('<div><div></div><div></div><div></div><div></div></div>')
|
.append('<div><div></div><div></div><div></div><div></div></div>')
|
||||||
|
@ -9367,6 +9382,48 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the jQuery or window object to be used by DataTables
|
||||||
|
*
|
||||||
|
* @param {*} module Library / container object
|
||||||
|
* @param {string} type Library or container type `lib` or `win`.
|
||||||
|
*/
|
||||||
|
DataTable.use = function (module, type) {
|
||||||
|
if (type === 'lib' || module.fn) {
|
||||||
|
$ = module;
|
||||||
|
}
|
||||||
|
else if (type == 'win' || module.document) {
|
||||||
|
window = module;
|
||||||
|
document = module.document;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CommonJS factory function pass through. This will check if the arguments
|
||||||
|
* given are a window object or a jQuery object. If so they are set
|
||||||
|
* accordingly.
|
||||||
|
* @param {*} root Window
|
||||||
|
* @param {*} jq jQUery
|
||||||
|
* @returns {boolean} Indicator
|
||||||
|
*/
|
||||||
|
DataTable.factory = function (root, jq) {
|
||||||
|
var is = false;
|
||||||
|
|
||||||
|
// Test if the first parameter is a window object
|
||||||
|
if (root && root.document) {
|
||||||
|
window = root;
|
||||||
|
document = root.document;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test if the second parameter is a jQuery object
|
||||||
|
if (jq && jq.fn && jq.fn.jquery) {
|
||||||
|
$ = jq;
|
||||||
|
is = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return is;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provide a common method for plug-ins to check the version of DataTables being
|
* Provide a common method for plug-ins to check the version of DataTables being
|
||||||
* used, in order to ensure compatibility.
|
* used, in order to ensure compatibility.
|
||||||
|
@ -9708,7 +9765,7 @@
|
||||||
* @type string
|
* @type string
|
||||||
* @default Version number
|
* @default Version number
|
||||||
*/
|
*/
|
||||||
DataTable.version = "1.13.2";
|
DataTable.version = "1.13.4";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Private data store, containing all of the settings objects that are
|
* Private data store, containing all of the settings objects that are
|
||||||
|
@ -14132,7 +14189,7 @@
|
||||||
*
|
*
|
||||||
* @type string
|
* @type string
|
||||||
*/
|
*/
|
||||||
build:"bs5/dt-1.13.2",
|
build:"bs5/dt-1.13.4",
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -15654,6 +15711,14 @@
|
||||||
}
|
}
|
||||||
else if ( typeof exports === 'object' ) {
|
else if ( typeof exports === 'object' ) {
|
||||||
// CommonJS
|
// CommonJS
|
||||||
|
var jq = require('jquery');
|
||||||
|
var cjsRequires = function (root, $) {
|
||||||
|
if ( ! $.fn.dataTable ) {
|
||||||
|
require('datatables.net')(root, $);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (typeof window !== 'undefined') {
|
||||||
module.exports = function (root, $) {
|
module.exports = function (root, $) {
|
||||||
if ( ! root ) {
|
if ( ! root ) {
|
||||||
// CommonJS environments without a window global must pass a
|
// CommonJS environments without a window global must pass a
|
||||||
|
@ -15662,18 +15727,18 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ! $ ) {
|
if ( ! $ ) {
|
||||||
$ = typeof window !== 'undefined' ? // jQuery's factory checks for a global window
|
$ = jq( root );
|
||||||
require('jquery') :
|
|
||||||
require('jquery')( root );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! $.fn.dataTable ) {
|
|
||||||
require('datatables.net')(root, $);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cjsRequires( root, $ );
|
||||||
return factory( $, root, root.document );
|
return factory( $, root, root.document );
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
cjsRequires( window, jq );
|
||||||
|
module.exports = factory( jq, window, window.document );
|
||||||
|
}
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
// Browser
|
// Browser
|
||||||
factory( jQuery, window, document );
|
factory( jQuery, window, document );
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*!
|
/*!
|
||||||
* jQuery JavaScript Library v3.6.3 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/Tween,-effects/animatedSelector
|
* jQuery JavaScript Library v3.6.4 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/animatedSelector,-effects/Tween
|
||||||
* https://jquery.com/
|
* https://jquery.com/
|
||||||
*
|
*
|
||||||
* Includes Sizzle.js
|
* Includes Sizzle.js
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
* Released under the MIT license
|
* Released under the MIT license
|
||||||
* https://jquery.org/license
|
* https://jquery.org/license
|
||||||
*
|
*
|
||||||
* Date: 2022-12-20T21:28Z
|
* Date: 2023-03-08T15:29Z
|
||||||
*/
|
*/
|
||||||
( function( global, factory ) {
|
( function( global, factory ) {
|
||||||
|
|
||||||
|
@ -151,7 +151,7 @@ function toType( obj ) {
|
||||||
|
|
||||||
|
|
||||||
var
|
var
|
||||||
version = "3.6.3 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/Tween,-effects/animatedSelector",
|
version = "3.6.4 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/animatedSelector,-effects/Tween",
|
||||||
|
|
||||||
// Define a local copy of jQuery
|
// Define a local copy of jQuery
|
||||||
jQuery = function( selector, context ) {
|
jQuery = function( selector, context ) {
|
||||||
|
@ -522,14 +522,14 @@ function isArrayLike( obj ) {
|
||||||
}
|
}
|
||||||
var Sizzle =
|
var Sizzle =
|
||||||
/*!
|
/*!
|
||||||
* Sizzle CSS Selector Engine v2.3.9
|
* Sizzle CSS Selector Engine v2.3.10
|
||||||
* https://sizzlejs.com/
|
* https://sizzlejs.com/
|
||||||
*
|
*
|
||||||
* Copyright JS Foundation and other contributors
|
* Copyright JS Foundation and other contributors
|
||||||
* Released under the MIT license
|
* Released under the MIT license
|
||||||
* https://js.foundation/
|
* https://js.foundation/
|
||||||
*
|
*
|
||||||
* Date: 2022-12-19
|
* Date: 2023-02-14
|
||||||
*/
|
*/
|
||||||
( function( window ) {
|
( function( window ) {
|
||||||
var i,
|
var i,
|
||||||
|
@ -633,7 +633,7 @@ var i,
|
||||||
whitespace + "+$", "g" ),
|
whitespace + "+$", "g" ),
|
||||||
|
|
||||||
rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
|
rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
|
||||||
rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
|
rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
|
||||||
"*" ),
|
"*" ),
|
||||||
rdescend = new RegExp( whitespace + "|>" ),
|
rdescend = new RegExp( whitespace + "|>" ),
|
||||||
|
|
||||||
|
@ -850,7 +850,7 @@ function Sizzle( selector, context, results, seed ) {
|
||||||
// as such selectors are not recognized by querySelectorAll.
|
// as such selectors are not recognized by querySelectorAll.
|
||||||
// Thanks to Andrew Dupont for this technique.
|
// Thanks to Andrew Dupont for this technique.
|
||||||
if ( nodeType === 1 &&
|
if ( nodeType === 1 &&
|
||||||
( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {
|
( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {
|
||||||
|
|
||||||
// Expand context for sibling selectors
|
// Expand context for sibling selectors
|
||||||
newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
|
newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
|
||||||
|
@ -879,27 +879,6 @@ function Sizzle( selector, context, results, seed ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
// `qSA` may not throw for unrecognized parts using forgiving parsing:
|
|
||||||
// https://drafts.csswg.org/selectors/#forgiving-selector
|
|
||||||
// like the `:has()` pseudo-class:
|
|
||||||
// https://drafts.csswg.org/selectors/#relational
|
|
||||||
// `CSS.supports` is still expected to return `false` then:
|
|
||||||
// https://drafts.csswg.org/css-conditional-4/#typedef-supports-selector-fn
|
|
||||||
// https://drafts.csswg.org/css-conditional-4/#dfn-support-selector
|
|
||||||
if ( support.cssSupportsSelector &&
|
|
||||||
|
|
||||||
// eslint-disable-next-line no-undef
|
|
||||||
!CSS.supports( "selector(:is(" + newSelector + "))" ) ) {
|
|
||||||
|
|
||||||
// Support: IE 11+
|
|
||||||
// Throw to get to the same code path as an error directly in qSA.
|
|
||||||
// Note: once we only support browser supporting
|
|
||||||
// `CSS.supports('selector(...)')`, we can most likely drop
|
|
||||||
// the `try-catch`. IE doesn't implement the API.
|
|
||||||
throw new Error();
|
|
||||||
}
|
|
||||||
|
|
||||||
push.apply( results,
|
push.apply( results,
|
||||||
newContext.querySelectorAll( newSelector )
|
newContext.querySelectorAll( newSelector )
|
||||||
);
|
);
|
||||||
|
@ -1195,29 +1174,22 @@ setDocument = Sizzle.setDocument = function( node ) {
|
||||||
!el.querySelectorAll( ":scope fieldset div" ).length;
|
!el.querySelectorAll( ":scope fieldset div" ).length;
|
||||||
} );
|
} );
|
||||||
|
|
||||||
// Support: Chrome 105+, Firefox 104+, Safari 15.4+
|
// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+
|
||||||
// Make sure forgiving mode is not used in `CSS.supports( "selector(...)" )`.
|
// Make sure the the `:has()` argument is parsed unforgivingly.
|
||||||
//
|
// We include `*` in the test to detect buggy implementations that are
|
||||||
// `:is()` uses a forgiving selector list as an argument and is widely
|
// _selectively_ forgiving (specifically when the list includes at least
|
||||||
// implemented, so it's a good one to test against.
|
// one valid selector).
|
||||||
support.cssSupportsSelector = assert( function() {
|
// Note that we treat complete lack of support for `:has()` as if it were
|
||||||
/* eslint-disable no-undef */
|
// spec-compliant support, which is fine because use of `:has()` in such
|
||||||
|
// environments will fail in the qSA path and fall back to jQuery traversal
|
||||||
return CSS.supports( "selector(*)" ) &&
|
// anyway.
|
||||||
|
support.cssHas = assert( function() {
|
||||||
// Support: Firefox 78-81 only
|
try {
|
||||||
// In old Firefox, `:is()` didn't use forgiving parsing. In that case,
|
document.querySelector( ":has(*,:jqfake)" );
|
||||||
// fail this test as there's no selector to test against that.
|
return false;
|
||||||
// `CSS.supports` uses unforgiving parsing
|
} catch ( e ) {
|
||||||
document.querySelectorAll( ":is(:jqfake)" ) &&
|
return true;
|
||||||
|
}
|
||||||
// `*` is needed as Safari & newer Chrome implemented something in between
|
|
||||||
// for `:has()` - it throws in `qSA` if it only contains an unsupported
|
|
||||||
// argument but multiple ones, one of which is supported, are fine.
|
|
||||||
// We want to play safe in case `:is()` gets the same treatment.
|
|
||||||
!CSS.supports( "selector(:is(*,:jqfake))" );
|
|
||||||
|
|
||||||
/* eslint-enable */
|
|
||||||
} );
|
} );
|
||||||
|
|
||||||
/* Attributes
|
/* Attributes
|
||||||
|
@ -1486,14 +1458,14 @@ setDocument = Sizzle.setDocument = function( node ) {
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !support.cssSupportsSelector ) {
|
if ( !support.cssHas ) {
|
||||||
|
|
||||||
// Support: Chrome 105+, Safari 15.4+
|
// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+
|
||||||
// `:has()` uses a forgiving selector list as an argument so our regular
|
// Our regular `try-catch` mechanism fails to detect natively-unsupported
|
||||||
// `try-catch` mechanism fails to catch `:has()` with arguments not supported
|
// pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`)
|
||||||
// natively like `:has(:contains("Foo"))`. Where supported & spec-compliant,
|
// in browsers that parse the `:has()` argument as a forgiving selector list.
|
||||||
// we now use `CSS.supports("selector(:is(SELECTOR_TO_BE_TESTED))")`, but
|
// https://drafts.csswg.org/selectors/#relational now requires the argument
|
||||||
// outside that we mark `:has` as buggy.
|
// to be parsed unforgivingly, but browsers have not yet fully adjusted.
|
||||||
rbuggyQSA.push( ":has" );
|
rbuggyQSA.push( ":has" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2406,7 +2378,7 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
|
||||||
matched = false;
|
matched = false;
|
||||||
|
|
||||||
// Combinators
|
// Combinators
|
||||||
if ( ( match = rcombinators.exec( soFar ) ) ) {
|
if ( ( match = rleadingCombinator.exec( soFar ) ) ) {
|
||||||
matched = match.shift();
|
matched = match.shift();
|
||||||
tokens.push( {
|
tokens.push( {
|
||||||
value: matched,
|
value: matched,
|
|
@ -7,7 +7,7 @@
|
||||||
<tr>
|
<tr>
|
||||||
<th class="vw-org-details">Organization</th>
|
<th class="vw-org-details">Organization</th>
|
||||||
<th class="vw-users">Users</th>
|
<th class="vw-users">Users</th>
|
||||||
<th class="vw-ciphers">Ciphers</th>
|
<th class="vw-entries">Entries</th>
|
||||||
<th class="vw-attachments">Attachments</th>
|
<th class="vw-attachments">Attachments</th>
|
||||||
<th class="vw-misc">Misc</th>
|
<th class="vw-misc">Misc</th>
|
||||||
<th class="vw-actions">Actions</th>
|
<th class="vw-actions">Actions</th>
|
||||||
|
@ -59,7 +59,7 @@
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<link rel="stylesheet" href="{{urlpath}}/vw_static/datatables.css" />
|
<link rel="stylesheet" href="{{urlpath}}/vw_static/datatables.css" />
|
||||||
<script src="{{urlpath}}/vw_static/jquery-3.6.3.slim.js"></script>
|
<script src="{{urlpath}}/vw_static/jquery-3.6.4.slim.js"></script>
|
||||||
<script src="{{urlpath}}/vw_static/datatables.js"></script>
|
<script src="{{urlpath}}/vw_static/datatables.js"></script>
|
||||||
<script src="{{urlpath}}/vw_static/admin_organizations.js"></script>
|
<script src="{{urlpath}}/vw_static/admin_organizations.js"></script>
|
||||||
<script src="{{urlpath}}/vw_static/jdenticon.js"></script>
|
<script src="{{urlpath}}/vw_static/jdenticon.js"></script>
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<th class="vw-account-details">User</th>
|
<th class="vw-account-details">User</th>
|
||||||
<th class="vw-created-at">Created at</th>
|
<th class="vw-created-at">Created at</th>
|
||||||
<th class="vw-last-active">Last Active</th>
|
<th class="vw-last-active">Last Active</th>
|
||||||
<th class="vw-ciphers">Ciphers</th>
|
<th class="vw-entries">Entries</th>
|
||||||
<th class="vw-attachments">Attachments</th>
|
<th class="vw-attachments">Attachments</th>
|
||||||
<th class="vw-organizations">Organizations</th>
|
<th class="vw-organizations">Organizations</th>
|
||||||
<th class="vw-actions">Actions</th>
|
<th class="vw-actions">Actions</th>
|
||||||
|
@ -140,7 +140,7 @@
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<link rel="stylesheet" href="{{urlpath}}/vw_static/datatables.css" />
|
<link rel="stylesheet" href="{{urlpath}}/vw_static/datatables.css" />
|
||||||
<script src="{{urlpath}}/vw_static/jquery-3.6.3.slim.js"></script>
|
<script src="{{urlpath}}/vw_static/jquery-3.6.4.slim.js"></script>
|
||||||
<script src="{{urlpath}}/vw_static/datatables.js"></script>
|
<script src="{{urlpath}}/vw_static/datatables.js"></script>
|
||||||
<script src="{{urlpath}}/vw_static/admin_users.js"></script>
|
<script src="{{urlpath}}/vw_static/admin_users.js"></script>
|
||||||
<script src="{{urlpath}}/vw_static/jdenticon.js"></script>
|
<script src="{{urlpath}}/vw_static/jdenticon.js"></script>
|
||||||
|
|
Laden …
In neuem Issue referenzieren