Update version to 1.0.1 and enhance passkey input styling and spacing

This commit is contained in:
spleenftw committed 2026-11-03 13:29:25 +01:00
1 parent 415309cab4
commit 6a90258ddd
3 files changed
+12 -6

No files matched your search

+9 -3
View File
@@ -2,7 +2,7 @@
OIDC SSO, TOTP and passkey second-factor authentication for **Bludit 3.22.0**.
Current version: **1.0.0**.
Current version: **1.0.1**.
## Features
@@ -55,9 +55,9 @@ For `bludit/docker`, copy the extracted plugin into `/usr/share/nginx/html/bl-pl
docker cp bludit:/usr/share/nginx/html/bl-plugins/bludit-secure \
"/tmp/bludit-secure-backup-$(date +%Y%m%d-%H%M%S)"
unzip -o /tmp/bludit-secure-1.0.0.zip -d /tmp/bludit-secure-1.0.0
unzip -o /tmp/bludit-secure-1.0.1.zip -d /tmp/bludit-secure-1.0.1
docker cp /tmp/bludit-secure-1.0.0/bludit-secure/. \
docker cp /tmp/bludit-secure-1.0.1/bludit-secure/. \
bludit:/usr/share/nginx/html/bl-plugins/bludit-secure/
docker restart bludit
@@ -118,6 +118,12 @@ The plugin protects **web sessions under `/admin`**. It does not change authenti
JavaScript URLs include a content hash so updated passkey behavior is not hidden by stale asset caches.
## Changes in 1.0.1
- Applies native form styling and spacing to the passkey name input.
- Adds space below passkey registration controls and between saved passkey names and their removal buttons.
- Excludes dependency test directories and example entry points from the installable ZIP.
## Changes in 1.0.0
- First stable release for Bludit 3.22.0.
+1 -1
View File
@@ -1 +1 @@
{"author":"Interlope","version":"1.0.0","releaseDate":"2026-11-03","license":"MIT","compatible":"3.22.0","notes":"Per-user OIDC SSO, TOTP, passkeys and recovery codes. Requires PHP 8.2+, HTTPS, sodium, curl, mbstring and openssl."}
{"author":"Interlope","version":"1.0.1","releaseDate":"2026-11-03","license":"MIT","compatible":"3.22.0","notes":"Per-user OIDC SSO, TOTP, passkeys and recovery codes. Requires PHP 8.2+, HTTPS, sodium, curl, mbstring and openssl."}
+2 -2
View File
@@ -276,7 +276,7 @@ final class App
}
} else { $body .= $this->form('manage', '<button name="op" value="totp-delete">Remove TOTP</button>'); }
$body .= '<h2>Passkeys</h2><p>Register a passkey for this site using your password manager or authenticator.</p>'.$this->keyButton(true);
foreach ($a['keys'] as $id=>$k) { $body .= $this->form('manage', '<input type="hidden" name="key" value="'.$this->e($id).'"><span>'.$this->e($k['label']).'</span> <button name="op" value="key-delete">Remove passkey</button>'); }
foreach ($a['keys'] as $id=>$k) { $body .= $this->form('manage', '<input type="hidden" name="key" value="'.$this->e($id).'"><span class="mr-3">'.$this->e($k['label']).'</span> <button name="op" value="key-delete">Remove passkey</button>'); }
$body .= '<h2>SSO</h2>';
if ($a['sso']) {
$profile = $a['ssoProfile'] ?? null;
@@ -422,7 +422,7 @@ final class App
return '<script type="application/json" id="bs-sso-users">'.$data.'</script><script src="'.$this->e($this->plugin->htmlPath().'assets/users.js?v='.$version).'" defer></script>';
}
private function keyButton(bool $create, bool $automatic = false): string {
return '<div class="webauthn"'.($automatic ? ' data-auto-passkey="true"' : '').' data-base="'.$this->e($this->base).'" data-csrf="'.$this->e($_SESSION['bs']['csrf']).'">'.($create?'<label>Passkey name<input class="key-label" maxlength="80" value="My passkey"></label>':'').'<button type="button" data-key="'.($create?'create':'get').'">'.($create?'Add passkey':'Try passkey again').'</button></div>';
return '<div class="webauthn mb-3"'.($automatic ? ' data-auto-passkey="true"' : '').' data-base="'.$this->e($this->base).'" data-csrf="'.$this->e($_SESSION['bs']['csrf']).'">'.($create?'<label>Passkey name<input class="key-label form-control mt-2" maxlength="80" value="My passkey"></label>':'').'<button type="button" data-key="'.($create?'create':'get').'">'.($create?'Add passkey':'Try passkey again').'</button></div>';
}
private function oidcConfigStamp(): string {
return hash('sha256', json_encode([$this->cfg('issuer'), $this->cfg('clientId'), $this->cfg('clientSecret')], JSON_THROW_ON_ERROR));