diff --git a/package.json b/package.json index a2e6769..8db689a 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,8 @@ "flatpickr": "^4.5.2", "lodash": "^4.17.11", "ovh-ui-angular": "^2.23.0", - "ovh-ui-kit": "^2.23.0" + "ovh-ui-kit": "^2.23.0", + "zxcvbn": "^4.4.2" }, "devDependencies": { "autoprefixer": "^9.2.1", diff --git a/src/ovh-ui-angular/controllers/index.js b/src/ovh-ui-angular/controllers/index.js index ec06863..57097c3 100644 --- a/src/ovh-ui-angular/controllers/index.js +++ b/src/ovh-ui-angular/controllers/index.js @@ -8,6 +8,7 @@ import fieldController from "./field.controller"; import inlineAdderController from "./inline-adder.controller"; import navbarController from "./navbar.controller"; import paginationController from "./pagination.controller"; +import passwordController from "./password.controller"; import progressController from "./progress.controller"; import searchController from "./search.controller"; import selectController from "./select.controller"; @@ -24,6 +25,7 @@ angular.module("app") .controller("InlineAdderCtrl", inlineAdderController) .controller("NavbarCtrl", navbarController) .controller("PaginationCtrl", paginationController) + .controller("PasswordCtrl", passwordController) .controller("ProgressCtrl", progressController) .controller("ShowCurrentValueInPopupCtrl", showCurrentValueInPopupController) .controller("SearchCtrl", searchController) diff --git a/src/ovh-ui-angular/controllers/password.controller.js b/src/ovh-ui-angular/controllers/password.controller.js new file mode 100644 index 0000000..78c8bfc --- /dev/null +++ b/src/ovh-ui-angular/controllers/password.controller.js @@ -0,0 +1,18 @@ +import zxcvbn from "zxcvbn"; + +export default class { + constructor () { + this.minLength = 8; + this.maxLength = 30; + } + + getPasswordScore (password) { + const result = zxcvbn(password); + this.passwordFeedback = result.feedback.suggestions.join(" "); + this.passwordScore = result.score; + } + + checkPasswordLength (password) { + return angular.isString(password) && password.length >= this.minLength && password.length <= this.maxLength; + } +} diff --git a/src/ovh-ui-angular/ovh-ui-angular.config.json b/src/ovh-ui-angular/ovh-ui-angular.config.json index f847800..e3b9739 100644 --- a/src/ovh-ui-angular/ovh-ui-angular.config.json +++ b/src/ovh-ui-angular/ovh-ui-angular.config.json @@ -85,6 +85,10 @@ "controller": "PaginationCtrl", "group": "components" }, + "password": { + "controller": "PasswordCtrl", + "group": "components" + }, "popover": { "group": "components" }, diff --git a/yarn.lock b/yarn.lock index e17524e..b5f7068 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8872,3 +8872,8 @@ yargs@^12.0.1: which-module "^2.0.0" y18n "^3.2.1 || ^4.0.0" yargs-parser "^10.1.0" + +zxcvbn@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/zxcvbn/-/zxcvbn-4.4.2.tgz#28ec17cf09743edcab056ddd8b1b06262cc73c30" + integrity sha1-KOwXzwl0PtyrBW3dixsGJizHPDA=