2fa note fix
Mserver/src/api/dav.rs
@@ -304,9 +304,10 @@ async fn authenticate(state: &AppState, headers: &HeaderMap) -> Option<(String,
// and counting each retry as a failed guess would pin that name's
// delay and lock the person out of the web login too.
auth::record_login(&name, verified.is_some());
// Basic carries a password and nothing else, so an account that
// requires a passkey too cannot be authenticated over WebDAV.
// Accepting it would quietly downgrade the account's own setting.
// Basic carries a password and nothing else, so accepting the
// account password here would downgrade an account that asks for
// a passkey too. Such an account mounts with an app password,
// which the lookup above already handled.
verified
.filter(|u| u.auth_mode == AuthMode::Either)
.map(|u| u.id)
Mserver/src/api/passkeys.rs
@@ -220,8 +220,9 @@ pub async fn set_mode(
return Err(locked_out());
}
// WebDAV speaks HTTP Basic, which carries a password and nothing else. An
// account that requires both can no longer authenticate a mount, so any
// cached Basic credential has to go.
// account that requires both can no longer mount with its account
// password, so any cached Basic credential has to go. Its app passwords
// are unaffected and keep working.
invalidate_elsewhere(&state, user.id, &headers).await?;
Ok(Json(OkResp {}))
}
Mweb/src/i18n.rs
@@ -511,7 +511,7 @@ i18n_keys! {
SHARES_VIEW_HINT = "shares_view_hint" => "Links you created. Right-click a file or folder and choose “Share” to add one.",
SIGN_IN = "sign_in" => "Sign in",
SIGNIN_BOTH = "signin_both" => "Password and passkey",
SIGNIN_BOTH_DESC = "signin_both_desc" => "Both are required. WebDAV mounts stop working, because they can only send a password.",
SIGNIN_BOTH_DESC = "signin_both_desc" => "Both are required. WebDAV then needs an app password, because a mount can only send a password.",
SIGNIN_EITHER = "signin_either" => "Password or passkey",
SIGNIN_EITHER_DESC = "signin_either_desc" => "Either one on its own signs you in.",
SIGNIN_REQUIREMENT = "signin_requirement" => "Sign-in requirement",
@@ -1164,7 +1164,7 @@ const DE: &[(&str, &str)] = &[
("signin_both", "Passwort und Passkey"),
(
"signin_both_desc",
"Beides ist nötig. WebDAV-Einbindungen funktionieren dann nicht mehr, weil sie nur ein Passwort senden können.",
"Beides ist nötig. WebDAV braucht dann ein App-Passwort, weil eine Einbindung nur ein Passwort senden kann.",
),
("signin_either", "Passwort oder Passkey"),
(
@@ -1845,7 +1845,7 @@ const FR: &[(&str, &str)] = &[
("signin_both", "Mot de passe et clé d'accès"),
(
"signin_both_desc",
"Les deux sont exigés. Les montages WebDAV cessent de fonctionner, car ils ne peuvent envoyer qu'un mot de passe.",
"Les deux sont exigés. Le WebDAV exige alors un mot de passe d'application, car un montage ne peut envoyer qu'un mot de passe.",
),
("signin_either", "Mot de passe ou clé d'accès"),
(