|
| 1 | +#! /usr/bin/env -S vala workbench.vala --pkg gtk4 |
| 2 | + |
| 3 | +Gtk.PasswordEntry entry; |
| 4 | +Gtk.LevelBar bar_discrete; |
| 5 | +Gtk.Label label_strength; |
| 6 | + |
| 7 | +public void main () { |
| 8 | + var bar_continuous = (Gtk.LevelBar) workbench.builder.get_object ("bar_continuous"); |
| 9 | + |
| 10 | + bar_continuous.add_offset_value ("full", 100); |
| 11 | + bar_continuous.add_offset_value ("half", 50); |
| 12 | + bar_continuous.add_offset_value ("low", 25); |
| 13 | + |
| 14 | + bar_discrete = (Gtk.LevelBar) workbench.builder.get_object ("bar_discrete"); |
| 15 | + |
| 16 | + bar_discrete.add_offset_value ("very-weak", 1); |
| 17 | + bar_discrete.add_offset_value ("weak", 2); |
| 18 | + bar_discrete.add_offset_value ("moderate", 4); |
| 19 | + bar_discrete.add_offset_value ("strong", 6); |
| 20 | + |
| 21 | + |
| 22 | + entry = (Gtk.PasswordEntry) workbench.builder.get_object ("entry"); |
| 23 | + |
| 24 | + label_strength = (Gtk.Label) workbench.builder.get_object ("label_strength"); |
| 25 | + |
| 26 | + entry.notify["text"].connect (estimate_password_strength); |
| 27 | +} |
| 28 | + |
| 29 | +// This is not a secure way to estimate password strength |
| 30 | +// Use appropriate solutions instead |
| 31 | +// such as https://github.com/dropbox/zxcvbn |
| 32 | + |
| 33 | +public void estimate_password_strength () { |
| 34 | + var level = (int) Math.fmin (Math.ceil ((entry.text.length + 1) / 2), 6); |
| 35 | + |
| 36 | + label_strength.css_classes = new string[0]; |
| 37 | + |
| 38 | + switch (level) { |
| 39 | + case 1: |
| 40 | + label_strength.label = "Very Weak"; |
| 41 | + label_strength.add_css_class ("very-weak-label"); |
| 42 | + break; |
| 43 | + case 2: |
| 44 | + label_strength.label = "Weak"; |
| 45 | + label_strength.add_css_class ("weak-label"); |
| 46 | + break; |
| 47 | + case 3: |
| 48 | + case 4: |
| 49 | + label_strength.label = "Moderate"; |
| 50 | + label_strength.add_css_class ("moderate-label"); |
| 51 | + break; |
| 52 | + case 5: |
| 53 | + case 6: |
| 54 | + label_strength.label = "Strong"; |
| 55 | + label_strength.add_css_class ("strong-label"); |
| 56 | + break; |
| 57 | + default: |
| 58 | + label_strength.label = ""; |
| 59 | + label_strength.add_css_class (""); |
| 60 | + break; |
| 61 | + } |
| 62 | + |
| 63 | + bar_discrete.value = level; |
| 64 | +} |
0 commit comments