From ee362844406bc3e26f32d9786f97f0b2070cf2ef Mon Sep 17 00:00:00 2001 From: Kevin Ansfield Date: Mon, 17 Sep 2018 15:52:07 +0100 Subject: [PATCH] Refactor Password validator into mixin no issue - PasswordValidator was only adding a function to the base class but it introduced a confusing inheritance hierarchy that's easier to reason about when it's a mixin instead - swapped the `this.properties =` and `this._super()` calls in the `init` function of `new-user` so that the default can actually be applied - previously the BaseValidator `init` method was doing `this.properties = []` which meant the default fallback in extended classes wouldn't work --- ghost/admin/app/validators/{ => mixins}/password.js | 4 ++-- ghost/admin/app/validators/new-user.js | 7 ++++--- ghost/admin/app/validators/reset.js | 12 +++++++++--- ghost/admin/app/validators/user.js | 12 +++++++++--- 4 files changed, 24 insertions(+), 11 deletions(-) rename ghost/admin/app/validators/{ => mixins}/password.js (98%) diff --git a/ghost/admin/app/validators/password.js b/ghost/admin/app/validators/mixins/password.js similarity index 98% rename from ghost/admin/app/validators/password.js rename to ghost/admin/app/validators/mixins/password.js index ad346992fa..4c30a786e2 100644 --- a/ghost/admin/app/validators/password.js +++ b/ghost/admin/app/validators/mixins/password.js @@ -1,4 +1,4 @@ -import BaseValidator from './base'; +import Mixin from '@ember/object/mixin'; import validator from 'npm:validator'; const BAD_PASSWORDS = [ @@ -13,7 +13,7 @@ const BAD_PASSWORDS = [ ]; const DISALLOWED_PASSWORDS = ['ghost', 'password', 'passw0rd']; -export default BaseValidator.extend({ +export default Mixin.create({ /** * Counts repeated characters if a string. When 50% or more characters are the same, * we return false and therefore invalidate the string. diff --git a/ghost/admin/app/validators/new-user.js b/ghost/admin/app/validators/new-user.js index 6229164512..1f5b6c3c25 100644 --- a/ghost/admin/app/validators/new-user.js +++ b/ghost/admin/app/validators/new-user.js @@ -1,11 +1,12 @@ -import PasswordValidator from 'ghost-admin/validators/password'; +import BaseValidator from './base'; +import PasswordValidatorMixin from './mixins/password'; import validator from 'npm:validator'; import {isBlank} from '@ember/utils'; -export default PasswordValidator.extend({ +export default BaseValidator.extend(PasswordValidatorMixin, { init() { - this._super(...arguments); this.properties = this.properties || ['name', 'email', 'password']; + this._super(...arguments); }, name(model) { diff --git a/ghost/admin/app/validators/reset.js b/ghost/admin/app/validators/reset.js index 8d3c454050..d6032fe74e 100644 --- a/ghost/admin/app/validators/reset.js +++ b/ghost/admin/app/validators/reset.js @@ -1,9 +1,13 @@ -import PasswordValidator from 'ghost-admin/validators/password'; +import BaseValidator from './base'; +import PasswordValidatorMixin from './mixins/password'; import validator from 'npm:validator'; import {isBlank} from '@ember/utils'; -export default PasswordValidator.create({ - properties: ['newPassword'], +const resetValidator = BaseValidator.extend(PasswordValidatorMixin, { + init() { + this.properties = this.properties || ['newPassword']; + this._super(...arguments); + }, newPassword(model) { let p1 = model.get('newPassword'); @@ -20,3 +24,5 @@ export default PasswordValidator.create({ this.passwordValidation(model, p1, 'newPassword'); } }); + +export default resetValidator.create(); diff --git a/ghost/admin/app/validators/user.js b/ghost/admin/app/validators/user.js index a23e4f9b8a..ce7917dbbf 100644 --- a/ghost/admin/app/validators/user.js +++ b/ghost/admin/app/validators/user.js @@ -1,9 +1,13 @@ -import PasswordValidator from 'ghost-admin/validators/password'; +import BaseValidator from './base'; +import PasswordValidatorMixin from './mixins/password'; import validator from 'npm:validator'; import {isBlank} from '@ember/utils'; -export default PasswordValidator.create({ - properties: ['name', 'bio', 'email', 'location', 'website', 'roles'], +const userValidator = BaseValidator.extend(PasswordValidatorMixin, { + init() { + this.properties = this.properties || ['name', 'bio', 'email', 'location', 'website', 'roles']; + this._super(...arguments); + }, isActive(model) { return (model.get('status') === 'active'); @@ -121,3 +125,5 @@ export default PasswordValidator.create({ } } }); + +export default userValidator.create();