85 lines
4.5 KiB
Rust
85 lines
4.5 KiB
Rust
use zxcvbn::{
|
|
feedback::{Suggestion, Warning},
|
|
Entropy,
|
|
};
|
|
|
|
pub fn generate_for_entropy(entropy: &Entropy) -> String {
|
|
let feedback = entropy.feedback().unwrap();
|
|
|
|
let warning = match feedback.warning() {
|
|
Some(Warning::StraightRowsOfKeysAreEasyToGuess) => {
|
|
"Gerade Linien von Tasten auf der Tastatur sind leicht zu erraten."
|
|
}
|
|
Some(Warning::ShortKeyboardPatternsAreEasyToGuess) => {
|
|
"Kurze Tastaturmuster sind leicht zu erraten."
|
|
}
|
|
Some(Warning::RepeatsLikeAaaAreEasyToGuess) => {
|
|
"Sich wiederholende Zeichen wie 'aaa' sind leicht zu erraten."
|
|
}
|
|
Some(Warning::RepeatsLikeAbcAbcAreOnlySlightlyHarderToGuess) => {
|
|
"Sich wiederholende Zeichenmuster wie 'abcabcabc' sind leicht zu erraten."
|
|
}
|
|
Some(Warning::ThisIsATop10Password) => "Dies ist ein sehr häufig verwendetes Passwort.",
|
|
Some(Warning::ThisIsATop100Password) => "Dies ist ein häufig verwendetes Passwort.",
|
|
Some(Warning::ThisIsACommonPassword) => "Dies ist ein oft verwendetes Passwort.",
|
|
Some(Warning::ThisIsSimilarToACommonlyUsedPassword) => {
|
|
"Dieses Passwort weist Ähnlichkeit zu anderen, oft verwendeten Passwörtern auf."
|
|
}
|
|
Some(Warning::SequencesLikeAbcAreEasyToGuess) => {
|
|
"Häufige Zeichenfolgen wie 'abc' oder '1234' sind leicht zu erraten."
|
|
}
|
|
Some(Warning::RecentYearsAreEasyToGuess) => {
|
|
"Die jüngsten Jahreszahlen sind leicht zu erraten."
|
|
}
|
|
Some(Warning::AWordByItselfIsEasyToGuess) => "Einzelne Wörter sind leicht zu erraten.",
|
|
Some(Warning::DatesAreOftenEasyToGuess) => "Ein Datum ist leicht zu erraten.",
|
|
Some(Warning::NamesAndSurnamesByThemselvesAreEasyToGuess) => {
|
|
"Einzelne Namen oder Nachnamen sind leicht zu erraten."
|
|
}
|
|
Some(Warning::CommonNamesAndSurnamesAreEasyToGuess) => {
|
|
"Vornamen und Nachnamen sind leicht zu erraten."
|
|
}
|
|
_ => "Passwort ist zu schwach.",
|
|
};
|
|
|
|
let vorschlag_text = if feedback.suggestions().len() > 1 {
|
|
"Vorschläge"
|
|
} else {
|
|
"Vorschlag"
|
|
};
|
|
|
|
let suggestion = feedback
|
|
.suggestions()
|
|
.iter()
|
|
.map(|s| {
|
|
let inner = match s {
|
|
Suggestion::UseAFewWordsAvoidCommonPhrases => "Mehrere Wörter verwenden, aber allgemeine Phrasen vermeiden.",
|
|
Suggestion::NoNeedForSymbolsDigitsOrUppercaseLetters => "Es ist möglich, starke Passwörter zu erstellen, ohne Symbole, Zahlen oder Großbuchstaben zu verwenden.",
|
|
Suggestion::AddAnotherWordOrTwo => "Weitere Wörter, die weniger häufig vorkommen, hinzufügen.",
|
|
Suggestion::CapitalizationDoesntHelpVeryMuch => "Nicht nur den ersten Buchstaben groß schreiben.",
|
|
Suggestion::AllUppercaseIsAlmostAsEasyToGuessAsAllLowercase => "Einige, aber nicht alle Buchstaben groß schreiben.",
|
|
Suggestion::ReversedWordsArentMuchHarderToGuess => "Umgekehrte Schreibweise von gebräuchlichen Wörtern vermeiden.",
|
|
Suggestion::PredictableSubstitutionsDontHelpVeryMuch => "Vorhersehbare Buchstabenersetzungen wie '@' für 'a' vermeiden.",
|
|
Suggestion::UseALongerKeyboardPatternWithMoreTurns => "Längere Tastaturmuster in unterschiedlicher Tipprichtung verwenden.",
|
|
Suggestion::AvoidRepeatedWordsAndCharacters => "Wort- und Zeichenwiederholungen vermeiden.",
|
|
Suggestion::AvoidSequences => "Häufige Zeichenfolgen vermeiden.",
|
|
Suggestion::AvoidRecentYears => "Die jüngsten Jahreszahlen vermeiden.",
|
|
Suggestion::AvoidYearsThatAreAssociatedWithYou => "Jahre, die mit persönlichen Daten in Verbindung gebracht werden können, vermeiden.",
|
|
Suggestion::AvoidDatesAndYearsThatAreAssociatedWithYou => "Daten, die mit persönlichen Daten in Verbindung gebracht werden können, vermeiden.",
|
|
};
|
|
|
|
format!("<li>{inner}</li>")
|
|
})
|
|
.collect::<Vec<String>>()
|
|
.join("");
|
|
|
|
format!("<div id=\"password-strength\" class=\"mb-3 help content is-danger\"><p>{warning}</p>{vorschlag_text}:<ul>{suggestion}</ul></div>")
|
|
}
|
|
|
|
pub fn format_message(level: &str, message: &str) -> String {
|
|
format!(
|
|
r#"<div id="password-strength" class="mb-3 help content is-{}">{}</div>"#,
|
|
level, message
|
|
)
|
|
}
|