Skip to content

Commit

Permalink
Password strength meter (#427)
Browse files Browse the repository at this point in the history
* Updating translations.

* Updating translations.

* Add password strength meter. Fixes #388
  • Loading branch information
dessalines authored Sep 19, 2021
1 parent bf93e29 commit d66931e
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 7 deletions.
2 changes: 1 addition & 1 deletion lemmy-translations
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"dependencies": {
"@typescript-eslint/parser": "^4.31.1",
"autosize": "^5.0.1",
"check-password-strength": "^2.0.3",
"choices.js": "^9.0.1",
"emoji-short-name": "^1.0.0",
"express": "~4.17.1",
Expand Down
54 changes: 54 additions & 0 deletions src/shared/components/home/login.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { Options, passwordStrength } from "check-password-strength";
import { I18nKeys } from "i18next";
import { Component, linkEvent } from "inferno";
import { T } from "inferno-i18next-dess";
import {
Expand Down Expand Up @@ -28,6 +30,33 @@ import {
import { HtmlTags } from "../common/html-tags";
import { Icon, Spinner } from "../common/icon";

const passwordStrengthOptions: Options<string> = [
{
id: 0,
value: "too_weak",
minDiversity: 0,
minLength: 0,
},
{
id: 1,
value: "weak",
minDiversity: 2,
minLength: 10,
},
{
id: 2,
value: "medium",
minDiversity: 3,
minLength: 12,
},
{
id: 3,
value: "strong",
minDiversity: 4,
minLength: 14,
},
];

interface State {
loginForm: LoginForm;
registerForm: Register;
Expand Down Expand Up @@ -227,10 +256,16 @@ export class Login extends Component<any, State> {
value={this.state.registerForm.password}
autoComplete="new-password"
onInput={linkEvent(this, this.handleRegisterPasswordChange)}
minLength={10}
maxLength={60}
class="form-control"
required
/>
{this.state.registerForm.password && (
<div class={this.passwordColorClass}>
{i18n.t(this.passwordStrength as I18nKeys)}
</div>
)}
</div>
</div>

Expand Down Expand Up @@ -349,6 +384,25 @@ export class Login extends Component<any, State> {
);
}

get passwordStrength() {
return passwordStrength(
this.state.registerForm.password,
passwordStrengthOptions
).value;
}

get passwordColorClass(): string {
let strength = this.passwordStrength;

if (["weak", "medium"].includes(strength)) {
return "text-warning";
} else if (strength == "strong") {
return "text-success";
} else {
return "text-danger";
}
}

handleLoginSubmit(i: Login, event: any) {
event.preventDefault();
i.state.loginLoading = true;
Expand Down
6 changes: 0 additions & 6 deletions src/shared/components/person/settings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1035,12 +1035,6 @@ export class Settings extends Component<any, SettingsState> {
i.setState(i.state);
}

handleLogoutClick(_i: Settings) {
UserService.Instance.logout();
window.location.href = "/";
location.reload();
}

handleDeleteAccount(i: Settings, event: any) {
event.preventDefault();
i.state.deleteAccountLoading = true;
Expand Down
5 changes: 5 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2062,6 +2062,11 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1:
ansi-styles "^4.1.0"
supports-color "^7.1.0"

check-password-strength@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/check-password-strength/-/check-password-strength-2.0.3.tgz#fed038b1c457ac11a2999bd96f3185af34e88895"
integrity sha512-UW3YgMUne9QuejgnNWjWwYi4QhWArVj+1OXqDR1NkEQcmMKKO74O3P5ZvXr9JZNbTBfcwlK3yurYCMuJsck83A==

choices.js@^9.0.1:
version "9.0.1"
resolved "https://registry.yarnpkg.com/choices.js/-/choices.js-9.0.1.tgz#745fb29af8670428fdc0bf1cc9dfaa404e9d0510"
Expand Down

0 comments on commit d66931e

Please sign in to comment.