Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/forms / coverage / lcov-report / validators / isValidPassword.ts.html
Size: Mime:
<!doctype html>
<html lang="en">
<head>
    <title>Code coverage report for validators/isValidPassword.ts</title>
    <meta charset="utf-8" />
    <link rel="stylesheet" href="../prettify.css" />
    <link rel="stylesheet" href="../base.css" />
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style type='text/css'>
        .coverage-summary .sorter {
            background-image: url(../sort-arrow-sprite.png);
        }
    </style>
</head>
<body>
<div class='wrapper'>
  <div class='pad1'>
    <h1>
      <a href="../index.html">All files</a> / <a href="index.html">validators</a> isValidPassword.ts
    </h1>
    <div class='clearfix'>
      <div class='fl pad1y space-right2'>
        <span class="strong">93.88% </span>
        <span class="quiet">Statements</span>
        <span class='fraction'>46/49</span>
      </div>
      <div class='fl pad1y space-right2'>
        <span class="strong">85.71% </span>
        <span class="quiet">Branches</span>
        <span class='fraction'>18/21</span>
      </div>
      <div class='fl pad1y space-right2'>
        <span class="strong">100% </span>
        <span class="quiet">Functions</span>
        <span class='fraction'>8/8</span>
      </div>
      <div class='fl pad1y space-right2'>
        <span class="strong">93.48% </span>
        <span class="quiet">Lines</span>
        <span class='fraction'>43/46</span>
      </div>
    </div>
  </div>
  <div class='status-line high'></div>
<pre><table class="coverage">
<tr><td class="line-count quiet">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">10x</span>
<span class="cline-any cline-yes">10x</span>
<span class="cline-any cline-yes">10x</span>
<span class="cline-any cline-yes">10x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">10x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">10x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">10x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">10x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">10x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">10x</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">10x</span>
<span class="cline-any cline-yes">10x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">10x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">10x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">10x</span>
<span class="cline-any cline-yes">10x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { isSafe } from 'exotic'
import { matchNumbers } from './isAlphaNumeric'
import { test } from './__match'
&nbsp;
// const matchPassword = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[@$!*])(?=.{8,})/
&nbsp;
/**
 * @param {string} [value='']
 * @return {boolean}
 */
function isValidPassword(value: string = ''): boolean {
  // Commenting this out as the validation has to happen on the server-side
  // return isString(value) &amp;&amp; matchPassword.test(value)
&nbsp;
  const getStrength = toStrength(value)
  const strengthValidation = (item: string) =&gt; {
    switch (item) {
      case 'strong':
        retu<span class="branch-1 cbranch-no" title="branch not covered" >rn true</span>
      case 'very<span class="cstat-no" title="statement not covered" > strong':</span>
        return true
      default:
        return false
    }
  }
  console.log('Password Strength :: ', getStrength)
  return strengthValidation(getStrength)
}
&nbsp;
// === strength ===
&nbsp;
/* eslint-disable max-statements */
const strengthList = {
  '0': 'very weak',
  '1': 'weak',
  // medium
  '2': 'good',
  '4': 'strong',
  '5': 'very strong',<span class="branch-0 cbranch-no" title="branch not covered" ></span>
}
&nbsp;
function toStrengthName(originalStrength: number = 0): string {
  let strength = originalStrength
  // default to very weak / 0
  const wording = strengthList[0]
<span class="missing-if-branch" title="else path not taken" >E</span>
  // start at highest
  while (strength &gt;= 0) {
    const wordForStrength = strengthList[strength]
    if (<span class="cstat-no" title="statement not covered" >isSafe(wordForS</span>trength)) {
      return wordForStrength
<span class="cstat-no" title="statement not covered" >    }</span>
&nbsp;
    // go lower until we find the right word
    strength -= 1
  }
&nbsp;
  return wording
}
&nbsp;
// .*[!,%,&amp;,@,#,$,^,*,?,_,~]
const matchSpecialChar = /(.*[!,%,&amp;,@,#,$,^,*,?,_,~])/g
&nbsp;
// if it has one special character, increase strength value
const hasAnySpecialChar = (item: string) =&gt; test(matchSpecialChar, item)
&nbsp;
// if it has two special characters, increase strength value
const hasSpecialChar = (x: string, min: number) =&gt; {
  const isValidSpecialChar = hasAnySpecialChar(x)
  const matchedSpecialChar = x.match(matchSpecialChar) as any[]
  const getLength = isValidSpecialChar
    ? matchedSpecialChar[0].split('').length
    : 1
  return isValidSpecialChar &amp;&amp; getLength &gt;= min
}
&nbsp;
// if password contains both lower and uppercase characters, increase strength value
const matchLowercaseAndUppercase = /([a-z].*[A-Z])|([A-Z].*[a-z])/
const hasLowercaseAndUppercase = test(matchLowercaseAndUppercase)
&nbsp;
// if it has numbers and characters, increase strength value
const hasNumbersAndLetters = x =&gt; test(matchNumbers, x) &amp;&amp; test(matchNumbers, x)
&nbsp;
// if length is 8 characters or more, increase strength value
// @note @VARIATION (BY 2 - THIS IS THE BIGGEST FACTOR)
const isLongEnough = (validPassword: string) =&gt; validPassword.length &gt; 7
&nbsp;
/**
 * @todo - move to best module later
 * @see toStrengthName
 *
 * @return configurable wording for strength at a certain Weight
 */
function toStrength(validPassword: string) {
  let strength = 0
&nbsp;
  if (isLongEnough(validPassword)) {
    strength += 1
  }
  if (hasLowercaseAndUppercase(validPassword)) {
    strength += 1
  }
  if (hasNumbersAndLetters(validPassword)) {
    strength += 1
  }
  if (hasSpecialChar(validPassword, 1)) {
    strength += 1
  }
  // now we have calculated strength value, we can return messages
&nbsp;
  return toStrengthName(strength)
}
&nbsp;
export { toStrength }
export { toStrengthName }
export { isValidPassword }
export default isValidPassword
&nbsp;</pre></td></tr>
</table></pre>
<div class='push'></div><!-- for sticky footer -->
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
  Code coverage
  generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Sat Nov 10 2018 05:28:54 GMT-0800 (Pacific Standard Time)
</div>
</div>
<script src="../prettify.js"></script>
<script>
window.onload = function () {
        if (typeof prettyPrint === 'function') {
            prettyPrint();
        }
};
</script>
<script src="../sorter.js"></script>
</body>
</html>