1
0
Fork 0
mirror of https://github.com/miniflux/v2.git synced 2025-06-27 16:36:00 +00:00

feat(webauthn): show help message regarding username and non-discoverable credentials

The username is required for non-resident keys, but it's not necessary for discoverable credentials like Passkeys.
This commit is contained in:
Frédéric Guillot 2024-10-26 21:16:08 -07:00
parent 2bcc4b8399
commit 51030ef1a8
22 changed files with 52 additions and 8 deletions

View file

@ -220,6 +220,7 @@
"page.settings.webauthn.last_seen_on": "Zuletzt genutzt", "page.settings.webauthn.last_seen_on": "Zuletzt genutzt",
"page.settings.webauthn.register": "Hauptschlüssel registrieren", "page.settings.webauthn.register": "Hauptschlüssel registrieren",
"page.settings.webauthn.register.error": "Hauptschlüssel kann nicht registriert werden", "page.settings.webauthn.register.error": "Hauptschlüssel kann nicht registriert werden",
"page.login.webauthn_login.help": "Please enter your username if you're using a security key. This is not required if you are using a Passkey (discoverable credentials).",
"page.settings.webauthn.delete": [ "page.settings.webauthn.delete": [
"Entfernen Sie %d Hauptschlüssel", "Entfernen Sie %d Hauptschlüssel",
"%d Hauptschlüssel entfernen" "%d Hauptschlüssel entfernen"

View file

@ -220,6 +220,7 @@
"page.settings.webauthn.last_seen_on": "Last Used", "page.settings.webauthn.last_seen_on": "Last Used",
"page.settings.webauthn.register": "Εγγραφή κωδικού πρόσβασης", "page.settings.webauthn.register": "Εγγραφή κωδικού πρόσβασης",
"page.settings.webauthn.register.error": "Δεν είναι δυνατή η εγγραφή του κωδικού πρόσβασης", "page.settings.webauthn.register.error": "Δεν είναι δυνατή η εγγραφή του κωδικού πρόσβασης",
"page.login.webauthn_login.help": "Please enter your username if you're using a security key. This is not required if you are using a Passkey (discoverable credentials).",
"page.settings.webauthn.delete": [ "page.settings.webauthn.delete": [
"Αφαιρέστε %d κωδικό πρόσβασης", "Αφαιρέστε %d κωδικό πρόσβασης",
"Καταργήστε %d κωδικούς πρόσβασης" "Καταργήστε %d κωδικούς πρόσβασης"

View file

@ -229,6 +229,7 @@
"page.login.oidc_signin": "Sign in with %s", "page.login.oidc_signin": "Sign in with %s",
"page.login.webauthn_login": "Login with passkey", "page.login.webauthn_login": "Login with passkey",
"page.login.webauthn_login.error": "Unable to login with passkey", "page.login.webauthn_login.error": "Unable to login with passkey",
"page.login.webauthn_login.help": "Please enter your username if you're using a security key. This is not required if you are using a Passkey (discoverable credentials).",
"page.integrations.title": "Integrations", "page.integrations.title": "Integrations",
"page.integration.miniflux_api": "Miniflux API", "page.integration.miniflux_api": "Miniflux API",
"page.integration.miniflux_api_endpoint": "API Endpoint", "page.integration.miniflux_api_endpoint": "API Endpoint",

View file

@ -220,6 +220,7 @@
"page.settings.webauthn.last_seen_on": "Usado por última vez", "page.settings.webauthn.last_seen_on": "Usado por última vez",
"page.settings.webauthn.register": "Registrar clave de acceso", "page.settings.webauthn.register": "Registrar clave de acceso",
"page.settings.webauthn.register.error": "No se puede registrar la clave de acceso", "page.settings.webauthn.register.error": "No se puede registrar la clave de acceso",
"page.login.webauthn_login.help": "Please enter your username if you're using a security key. This is not required if you are using a Passkey (discoverable credentials).",
"page.settings.webauthn.delete": [ "page.settings.webauthn.delete": [
"Eliminar %d clave de acceso", "Eliminar %d clave de acceso",
"Eliminar %d claves de acceso" "Eliminar %d claves de acceso"

View file

@ -220,6 +220,7 @@
"page.settings.webauthn.last_seen_on": "Last Used", "page.settings.webauthn.last_seen_on": "Last Used",
"page.settings.webauthn.register": "Rekisteröi salasana", "page.settings.webauthn.register": "Rekisteröi salasana",
"page.settings.webauthn.register.error": "Salasanaa ei voi rekisteröidä", "page.settings.webauthn.register.error": "Salasanaa ei voi rekisteröidä",
"page.login.webauthn_login.help": "Please enter your username if you're using a security key. This is not required if you are using a Passkey (discoverable credentials).",
"page.settings.webauthn.delete": [ "page.settings.webauthn.delete": [
"Poista %d salasana", "Poista %d salasana",
"Poista %d salasanaa" "Poista %d salasanaa"

View file

@ -220,6 +220,7 @@
"page.settings.webauthn.last_seen_on": "Dernière utilisation", "page.settings.webauthn.last_seen_on": "Dernière utilisation",
"page.settings.webauthn.register": "Enregister une nouvelle clé daccès", "page.settings.webauthn.register": "Enregister une nouvelle clé daccès",
"page.settings.webauthn.register.error": "Impossible d'enregistrer la clé daccès", "page.settings.webauthn.register.error": "Impossible d'enregistrer la clé daccès",
"page.login.webauthn_login.help": "Veuillez saisir votre nom d'utilisateur si vous utilisez une clé de sécurité. Cela n'est pas nécessaire si vous utilisez une clé d'accès (Passkey).",
"page.settings.webauthn.delete": [ "page.settings.webauthn.delete": [
"Supprimer %d clé daccès", "Supprimer %d clé daccès",
"Supprimer %d clés daccès" "Supprimer %d clés daccès"

View file

@ -220,6 +220,7 @@
"page.settings.webauthn.last_seen_on": "Last Used", "page.settings.webauthn.last_seen_on": "Last Used",
"page.settings.webauthn.register": "रजिस्टर पासकी", "page.settings.webauthn.register": "रजिस्टर पासकी",
"page.settings.webauthn.register.error": "पासकी पंजीकृत करने में असमर्थ", "page.settings.webauthn.register.error": "पासकी पंजीकृत करने में असमर्थ",
"page.login.webauthn_login.help": "Please enter your username if you're using a security key. This is not required if you are using a Passkey (discoverable credentials).",
"page.settings.webauthn.delete": [ "page.settings.webauthn.delete": [
"%d पासकुंजी निकालें", "%d पासकुंजी निकालें",
"%d पासकी हटाएं" "%d पासकी हटाएं"

View file

@ -211,6 +211,7 @@
"page.settings.webauthn.last_seen_on": "Last Used", "page.settings.webauthn.last_seen_on": "Last Used",
"page.settings.webauthn.register": "Register passkey", "page.settings.webauthn.register": "Register passkey",
"page.settings.webauthn.register.error": "Unable to register passkey", "page.settings.webauthn.register.error": "Unable to register passkey",
"page.login.webauthn_login.help": "Please enter your username if you're using a security key. This is not required if you are using a Passkey (discoverable credentials).",
"page.settings.webauthn.delete": [ "page.settings.webauthn.delete": [
"Remove %d passkey" "Remove %d passkey"
], ],

View file

@ -220,6 +220,7 @@
"page.settings.webauthn.last_seen_on": "Last Used", "page.settings.webauthn.last_seen_on": "Last Used",
"page.settings.webauthn.register": "Registra la chiave di accesso", "page.settings.webauthn.register": "Registra la chiave di accesso",
"page.settings.webauthn.register.error": "Impossibile registrare la passkey", "page.settings.webauthn.register.error": "Impossibile registrare la passkey",
"page.login.webauthn_login.help": "Please enter your username if you're using a security key. This is not required if you are using a Passkey (discoverable credentials).",
"page.settings.webauthn.delete": [ "page.settings.webauthn.delete": [
"Rimuovi %d passkey", "Rimuovi %d passkey",
"Rimuovi %d passkey" "Rimuovi %d passkey"

View file

@ -211,6 +211,7 @@
"page.settings.webauthn.last_seen_on": "Last Used", "page.settings.webauthn.last_seen_on": "Last Used",
"page.settings.webauthn.register": "パスキーを登録する", "page.settings.webauthn.register": "パスキーを登録する",
"page.settings.webauthn.register.error": "パスキーを登録できません", "page.settings.webauthn.register.error": "パスキーを登録できません",
"page.login.webauthn_login.help": "Please enter your username if you're using a security key. This is not required if you are using a Passkey (discoverable credentials).",
"page.settings.webauthn.delete": [ "page.settings.webauthn.delete": [
"%d 個のパスキーを削除" "%d 個のパスキーを削除"
], ],

View file

@ -221,6 +221,7 @@
"page.settings.webauthn.last_seen_on": "Laatst gebruikt", "page.settings.webauthn.last_seen_on": "Laatst gebruikt",
"page.settings.webauthn.register": "Passkey registreren", "page.settings.webauthn.register": "Passkey registreren",
"page.settings.webauthn.register.error": "Kan passkey niet registreren", "page.settings.webauthn.register.error": "Kan passkey niet registreren",
"page.login.webauthn_login.help": "Please enter your username if you're using a security key. This is not required if you are using a Passkey (discoverable credentials).",
"page.settings.webauthn.delete": [ "page.settings.webauthn.delete": [
"Verwijder %d passkey", "Verwijder %d passkey",
"Verwijder %d passkeys" "Verwijder %d passkeys"

View file

@ -229,6 +229,7 @@
"page.settings.webauthn.last_seen_on": "Ostatnio użyte", "page.settings.webauthn.last_seen_on": "Ostatnio użyte",
"page.settings.webauthn.register": "Zarejestruj klucz dostępu", "page.settings.webauthn.register": "Zarejestruj klucz dostępu",
"page.settings.webauthn.register.error": "Nie można zarejestrować klucza dostępu", "page.settings.webauthn.register.error": "Nie można zarejestrować klucza dostępu",
"page.login.webauthn_login.help": "Please enter your username if you're using a security key. This is not required if you are using a Passkey (discoverable credentials).",
"page.settings.webauthn.delete": [ "page.settings.webauthn.delete": [
"Usuń %d klucz dostępu", "Usuń %d klucz dostępu",
"Usuń %d klucze dostępu", "Usuń %d klucze dostępu",

View file

@ -220,6 +220,7 @@
"page.settings.webauthn.last_seen_on": "Last Used", "page.settings.webauthn.last_seen_on": "Last Used",
"page.settings.webauthn.register": "Registrar senha", "page.settings.webauthn.register": "Registrar senha",
"page.settings.webauthn.register.error": "Não foi possível registrar a senha", "page.settings.webauthn.register.error": "Não foi possível registrar a senha",
"page.login.webauthn_login.help": "Please enter your username if you're using a security key. This is not required if you are using a Passkey (discoverable credentials).",
"page.settings.webauthn.delete": [ "page.settings.webauthn.delete": [
"Remover %d senha", "Remover %d senha",
"Remover %d senhas" "Remover %d senhas"

View file

@ -229,6 +229,7 @@
"page.settings.webauthn.last_seen_on": "Last Used", "page.settings.webauthn.last_seen_on": "Last Used",
"page.settings.webauthn.register": "Зарегистрировать пароль", "page.settings.webauthn.register": "Зарегистрировать пароль",
"page.settings.webauthn.register.error": "Не удается зарегистрировать пароль", "page.settings.webauthn.register.error": "Не удается зарегистрировать пароль",
"page.login.webauthn_login.help": "Please enter your username if you're using a security key. This is not required if you are using a Passkey (discoverable credentials).",
"page.settings.webauthn.delete": [ "page.settings.webauthn.delete": [
"Удалить %d пароль", "Удалить %d пароль",
"Удалить %d пароля", "Удалить %d пароля",

View file

@ -466,6 +466,7 @@
"page.login.title": "Oturum aç", "page.login.title": "Oturum aç",
"page.login.webauthn_login": "Passkey ile giriş yap", "page.login.webauthn_login": "Passkey ile giriş yap",
"page.login.webauthn_login.error": "Passkey ile giriş yapılamıyor", "page.login.webauthn_login.error": "Passkey ile giriş yapılamıyor",
"page.login.webauthn_login.help": "Please enter your username if you're using a security key. This is not required if you are using a Passkey (discoverable credentials).",
"page.new_api_key.title": "Yeni API Anahtarı", "page.new_api_key.title": "Yeni API Anahtarı",
"page.new_category.title": "Yeni Kategori", "page.new_category.title": "Yeni Kategori",
"page.new_user.title": "Yeni Kullanıcı", "page.new_user.title": "Yeni Kullanıcı",

View file

@ -229,6 +229,7 @@
"page.settings.webauthn.last_seen_on": "Last Used", "page.settings.webauthn.last_seen_on": "Last Used",
"page.settings.webauthn.register": "Зареєструвати пароль", "page.settings.webauthn.register": "Зареєструвати пароль",
"page.settings.webauthn.register.error": "Не вдалося зареєструвати ключ доступу", "page.settings.webauthn.register.error": "Не вдалося зареєструвати ключ доступу",
"page.login.webauthn_login.help": "Please enter your username if you're using a security key. This is not required if you are using a Passkey (discoverable credentials).",
"page.settings.webauthn.delete": [ "page.settings.webauthn.delete": [
"Видалити %d ключ доступу", "Видалити %d ключ доступу",
"Видаліть %d ключа доступу", "Видаліть %d ключа доступу",

View file

@ -211,6 +211,7 @@
"page.settings.webauthn.last_seen_on": "最后使用时间", "page.settings.webauthn.last_seen_on": "最后使用时间",
"page.settings.webauthn.register": "注册 Passkey", "page.settings.webauthn.register": "注册 Passkey",
"page.settings.webauthn.register.error": "无法注册 Passkey", "page.settings.webauthn.register.error": "无法注册 Passkey",
"page.login.webauthn_login.help": "Please enter your username if you're using a security key. This is not required if you are using a Passkey (discoverable credentials).",
"page.settings.webauthn.delete": [ "page.settings.webauthn.delete": [
"删除 %d 个 Passkey" "删除 %d 个 Passkey"
], ],

View file

@ -211,6 +211,7 @@
"page.settings.webauthn.last_seen_on": "最後使用時間", "page.settings.webauthn.last_seen_on": "最後使用時間",
"page.settings.webauthn.register": "註冊 Passkey", "page.settings.webauthn.register": "註冊 Passkey",
"page.settings.webauthn.register.error": "無法註冊 Passkey", "page.settings.webauthn.register.error": "無法註冊 Passkey",
"page.login.webauthn_login.help": "Please enter your username if you're using a security key. This is not required if you are using a Passkey (discoverable credentials).",
"page.settings.webauthn.delete": [ "page.settings.webauthn.delete": [
"刪除 %d 個 Passkey" "刪除 %d 個 Passkey"
], ],

View file

@ -24,16 +24,28 @@
</div> </div>
</form> </form>
{{ end }} {{ end }}
{{ if and (not disableLocalAuth) (.webAuthnEnabled) }}
<hr>
{{ end }}
{{ if .webAuthnEnabled }} {{ if .webAuthnEnabled }}
<div class="webauthn"> <div class="webauthn">
<div role="alert" class="alert alert-error hidden" id="webauthn-error"> <template id="webauthn-error">
{{ t "page.login.webauthn_login.error" }} <div role="alert" class="alert alert-error" id="webauthn-error-alert">
</div> <h4>{{ t "page.login.webauthn_login.error" }}</h4>
<p id="webauthn-error-message"></p>
</div>
</template>
<div class="buttons"> <div class="buttons">
<button class="button button-primary" id="webauthn-login" disabled>{{ t "page.login.webauthn_login" }}</button> <button class="button button-primary" id="webauthn-login" disabled>{{ t "page.login.webauthn_login" }}</button>
</div> </div>
<div class="form-help">
<p>{{ t "page.login.webauthn_login.help" }}</p>
</div>
</div> </div>
{{ end }} {{ end }}
{{ if and (.webAuthnEnabled) (or (hasOAuth2Provider "google") (hasOAuth2Provider "oidc")) }}
<hr>
{{ end }}
{{ if hasOAuth2Provider "google" }} {{ if hasOAuth2Provider "google" }}
<div class="oauth2"> <div class="oauth2">
<a href="{{ route "oauth2Redirect" "provider" "google" }}">{{ t "page.login.google_signin" }}</a> <a href="{{ route "oauth2Redirect" "provider" "google" }}">{{ t "page.login.google_signin" }}</a>

View file

@ -675,6 +675,10 @@ template {
max-width: 300px; max-width: 300px;
} }
.webauthn {
margin-bottom: 20px;
}
/* Counters */ /* Counters */
.unread-counter-wrapper, .unread-counter-wrapper,
.error-feeds-counter-wrapper { .error-feeds-counter-wrapper {

View file

@ -5,10 +5,20 @@ class WebAuthnHandler {
static showErrorMessage(errorMessage) { static showErrorMessage(errorMessage) {
console.log("webauthn error: " + errorMessage); console.log("webauthn error: " + errorMessage);
const alertElement = document.getElementById("webauthn-error");
const alertElement = document.getElementById("webauthn-error-alert");
if (alertElement) { if (alertElement) {
alertElement.textContent += " (" + errorMessage + ")"; alertElement.remove();
alertElement.classList.remove("hidden"); }
const alertTemplateElement = document.getElementById("webauthn-error");
if (alertTemplateElement) {
const clonedElement = alertTemplateElement.content.cloneNode(true);
const errorMessageElement = clonedElement.getElementById("webauthn-error-message");
if (errorMessageElement) {
errorMessageElement.textContent = errorMessage;
}
alertTemplateElement.parentNode.insertBefore(clonedElement, alertTemplateElement);
} }
} }

View file

@ -1,5 +1,5 @@
.\" Manpage for miniflux. .\" Manpage for miniflux.
.TH "MINIFLUX" "1" "August 18, 2024" "\ \&" "\ \&" .TH "MINIFLUX" "1" "October 26, 2024" "\ \&" "\ \&"
.SH NAME .SH NAME
miniflux \- Minimalist and opinionated feed reader miniflux \- Minimalist and opinionated feed reader
@ -546,7 +546,7 @@ Enabled by default\&.
.B WEBAUTHN .B WEBAUTHN
Enable or disable WebAuthn/Passkey authentication\&. Enable or disable WebAuthn/Passkey authentication\&.
.br .br
Note: After activating and setting up your Passkey, just enter your username and click the Passkey login button\&. You must provide a username on the login page if your are using non-residential keys. However, this is not required for discoverable credentials\&.
.br .br
Default is disabled\&. Default is disabled\&.
.TP .TP