diff --git a/index.html b/index.html index ca1239a4d..b2012aa34 100644 --- a/index.html +++ b/index.html @@ -192,8 +192,8 @@

Create a new wallet

- - + +
@@ -203,7 +203,7 @@

Join a Wallet in Creation

- +
@@ -294,7 +294,7 @@
Your Wallet Password (you don't need to share this) Required
- +
Wallet name Optional
diff --git a/js/directives.js b/js/directives.js index 606c5e9c9..822fdae85 100644 --- a/js/directives.js +++ b/js/directives.js @@ -105,7 +105,8 @@ angular.module('copay.directives') }); } } - }).directive('avatar', function($rootScope, controllerUtils) { + }) + .directive('avatar', function($rootScope, controllerUtils) { return { link: function(scope, element, attrs) { var peer = JSON.parse(attrs.peer) @@ -118,4 +119,75 @@ angular.module('copay.directives') } } } + }) + .directive('checkStrength', function() { + return { + replace: false, + restrict: 'EACM', + scope: { model: '=checkStrength' }, + link: function(scope, element, attrs) { + var _grep = function(elems, callback, invert) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for (; i < length; i++) { + callbackInverse = !callback(elems[i], i); + if (callbackInverse !== callbackExpect) { + matches.push(elems[i]); + } + } + + return matches; + }; + + var strength = { + colors: ['#c0392b', '#e74c3c', '#d35400', '#f39c12', '#27ae60'], + mesureStrength: function (p) { + var _force = 0; + var _regex = /[$-/:-?{-~!"^_`\[\]]/g; + var _lowerLetters = /[a-z]+/.test(p); + var _upperLetters = /[A-Z]+/.test(p); + var _numbers = /[0-9]+/.test(p); + var _symbols = _regex.test(p); + var _flags = [_lowerLetters, _upperLetters, _numbers, _symbols]; + var _passedMatches = _grep(_flags, function (el) { return el === true; }).length; + + _force += 2 * p.length + ((p.length >= 10) ? 1 : 0); + _force += _passedMatches * 10; + + // penality (short password) + _force = (p.length <= 6) ? Math.min(_force, 10) : _force; + + // penality (poor variety of characters) + _force = (_passedMatches == 1) ? Math.min(_force, 10) : _force; + _force = (_passedMatches == 2) ? Math.min(_force, 20) : _force; + _force = (_passedMatches == 3) ? Math.min(_force, 40) : _force; + return _force; + }, + getColor: function (s) { + var idx = 0; + + if (s <= 10) { idx = 0; } + else if (s <= 20) { idx = 1; } + else if (s <= 30) { idx = 2; } + else if (s <= 40) { idx = 3; } + else { idx = 4; } + + return { idx: idx + 1, col: this.colors[idx] }; + } + }; + + scope.$watch('model', function (newValue, oldValue) { + if (newValue && newValue !== '') { + var c = strength.getColor(strength.mesureStrength(newValue)); + element.css({ 'border-color': c.col }) + } + }); + } + }; });