aboutsummaryrefslogtreecommitdiffstats
path: root/src/helpers/password-helpers.js
diff options
context:
space:
mode:
authorLibravatar Stefan Malzner <stefan@adlk.io>2017-10-13 12:29:40 +0200
committerLibravatar Stefan Malzner <stefan@adlk.io>2017-10-13 12:29:40 +0200
commit58cda9cc7fb79ca9df6746de7f9662bc08dc156a (patch)
tree1211600c2a5d3b5f81c435c6896618111a611720 /src/helpers/password-helpers.js
downloadferdium-app-58cda9cc7fb79ca9df6746de7f9662bc08dc156a.tar.gz
ferdium-app-58cda9cc7fb79ca9df6746de7f9662bc08dc156a.tar.zst
ferdium-app-58cda9cc7fb79ca9df6746de7f9662bc08dc156a.zip
initial commit
Diffstat (limited to 'src/helpers/password-helpers.js')
-rw-r--r--src/helpers/password-helpers.js36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/helpers/password-helpers.js b/src/helpers/password-helpers.js
new file mode 100644
index 000000000..7aacaa4d0
--- /dev/null
+++ b/src/helpers/password-helpers.js
@@ -0,0 +1,36 @@
1import { SHA256 } from 'jshashes';
2
3export function hash(password) {
4 return new SHA256().b64(password);
5}
6
7export function scorePassword(password) {
8 let score = 0;
9 if (!password) {
10 return score;
11 }
12
13 // award every unique letter until 5 repetitions
14 const letters = {};
15 for (let i = 0; i < password.length; i += 1) {
16 letters[password[i]] = (letters[password[i]] || 0) + 1;
17 score += 5.0 / letters[password[i]];
18 }
19
20 // bonus points for mixing it up
21 const variations = {
22 digits: /\d/.test(password),
23 lower: /[a-z]/.test(password),
24 upper: /[A-Z]/.test(password),
25 nonWords: /\W/.test(password),
26 };
27
28 let variationCount = 0;
29 Object.keys(variations).forEach((key) => {
30 variationCount += (variations[key] === true) ? 1 : 0;
31 });
32
33 score += (variationCount - 1) * 10;
34
35 return parseInt(score, 10);
36}