Shorten the weak-password messaging everywhere (Ed's approved wording)

The password guidance was a wall of text. Trimmed to Ed's approved phrasing, applied
consistently across all three surfaces (status line left as-is per Ed):

- PasswordStrength.Critique is now ONE line — the rule + a concrete example to copy
  ("Use at least 8 characters — three unrelated words with a number, like
  kettle9tiger42moon, works well."), no scare prose. This flows into both change-
  password-box rejection dialogs, so those shortened automatically.
- Startup warning (MaybeWarnWeakPassword): "RemSound has increased its security level,
  so this profile's password must be strengthened to meet the new password rules.
  Until it is, no audio will pass." + the one-line rule + how to change it.
- Send/Receive-tick gate (EnsureStreamingPassword): same "increased its security
  level ... strengthened before audio can flow" opener + the concise rule.

Gate 71/71 + 7 relay tests.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Ednunp
2026-07-27 11:23:27 +01:00
co-authored by Claude Fable 5
parent af06929a64
commit 9577fc9940
2 changed files with 14 additions and 21 deletions
+10 -11
View File
@@ -1684,15 +1684,13 @@ public sealed partial class MainForm : Form
if (IsDisposed || CuePlayer.GloballyMuted) return; // never on a --silent/automated launch
if (!WeakPasswordBlocksAudio(currentProfilePassword, currentAudioKey is not null)) return;
if (!IsSendEnabled && !IsReceiveEnabled) return; // not trying to stream → nothing blocked yet
var advice = PasswordStrength.Critique(currentProfilePassword) ?? "";
ForegroundDialog.Show(owner => MessageBox.Show(owner,
"The password on this profile — the one that protects your audio — is too easy to guess, so "
+ "from this version RemSound won't stream with it. Until it's changed, the people you "
+ "connect to will hear nothing.\n\n"
+ advice + "\n\n"
+ "To fix it: open the File menu and choose “Change this profile's password”, then set "
+ "the SAME new password on every machine you connect with.",
"RemSound — password too weak to stream",
"RemSound has increased its security level, so this profile's password must be strengthened "
+ "to meet the new password rules. Until it is, no audio will pass.\n\n"
+ "Use at least 8 characters — three unrelated words with a number, like kettle9tiger42moon, works well.\n\n"
+ "To change it: open the File menu and choose “Change this profile's password”. Use the "
+ "same new password on every machine you connect with.",
"RemSound — password needs strengthening",
MessageBoxButtons.OK, MessageBoxIcon.Warning));
}
@@ -8429,9 +8427,10 @@ public sealed partial class MainForm : Form
// it — a bare dialog would read as a bug to someone whose password worked yesterday.
var page = new TaskDialogPage
{
Caption = "Password needs strengthening",
Heading = "Your profile password is too easy to guess",
Text = $"From this version, audio won't flow until the password is stronger. {weakAdvice}",
Caption = "RemSound — password needs strengthening",
Heading = "Your password must be strengthened",
Text = "RemSound has increased its security level, so this profile's password must be "
+ $"strengthened before audio can flow. {weakAdvice}",
Icon = TaskDialogIcon.Warning,
Buttons = { TaskDialogButton.OK },
DefaultButton = TaskDialogButton.OK,
+4 -10
View File
@@ -28,20 +28,14 @@ public static class PasswordStrength
public static string? Critique(string password)
{
if (string.IsNullOrEmpty(password)) return null;
// Kept short on purpose (Ed, 2026-07-27): one line — the rule and a concrete example to copy
// the shape of. The surrounding dialogs add the "why" and the "how to change it".
if (password.Length < MinLength)
{
return $"This password is too short to protect your audio — anyone who records your stream can try millions of guesses against it. "
+ $"Use at least {MinLength} characters; longer is stronger. Three unrelated words with a number — like kettle9tiger42moon — "
+ "is easy to type and remember, and very hard to guess. Remember: every machine you connect with must be given the same new password.";
}
return $"Use at least {MinLength} characters — three unrelated words with a number, like kettle9tiger42moon, works well.";
foreach (var common in CommonPasswords)
{
if (string.Equals(password, common, StringComparison.OrdinalIgnoreCase))
{
return "That password is one of the most commonly guessed passwords in the world, so it offers almost no protection. "
+ "Pick something personal and longer — three unrelated words with a number, like kettle9tiger42moon, works well. "
+ "Remember: every machine you connect with must be given the same new password.";
}
return $"That's one of the most common passwords in the world. Use at least {MinLength} characters — three unrelated words with a number, like kettle9tiger42moon, works well.";
}
return null;
}