Changeset View
Changeset View
Standalone View
Standalone View
lib/app/base-chips/field-types/password.js
"use strict"; | |||||
const Promise = require("bluebird"); | const Promise = require("bluebird"); | ||||
const SecureHasher = require("../../../utils/secure-hasher.js"); | const SecureHasher = require("../../../utils/secure-hasher.js"); | ||||
const crypto = require("crypto"); | |||||
module.exports = app => ({ | module.exports = app => ({ | ||||
name: "password", | name: "password", | ||||
extends: "text", | extends: "text", | ||||
get_description: function(context, { digits, capitals }) { | get_description(context, { digits, capitals }) { | ||||
let message = "Stores a password in a correct way"; | let message = "Stores a password in a correct way"; | ||||
if (!digits && !capitals) { | if (!digits && !capitals) { | ||||
return message; | return message; | ||||
} | } | ||||
message += " with "; | message += " with "; | ||||
if (digits) { | if (digits) { | ||||
message += `required digits: ${digits} `; | message += `required digits: ${digits} `; | ||||
} | } | ||||
if (capitals) { | if (capitals) { | ||||
message += `required capitals: ${capitals} `; | message += `required capitals: ${capitals} `; | ||||
} | } | ||||
return message; | return message; | ||||
}, | }, | ||||
is_proper_value: function(context, { digits, capitals }, new_value) { | is_proper_value(context, { digits, capitals }, new_value) { | ||||
const pattern_array = []; | const pattern_array = []; | ||||
if (!digits && !capitals) { | if (!digits && !capitals) { | ||||
return Promise.resolve(); | return Promise.resolve(); | ||||
} | } | ||||
if (digits) { | if (digits) { | ||||
pattern_array.push(new RegExp(`(.*[0-9]+.*){${digits}}`)); | pattern_array.push(new RegExp(`(.*[0-9]+.*){${digits}}`)); | ||||
} | } | ||||
if (capitals) { | if (capitals) { | ||||
pattern_array.push(new RegExp(`(.*[A-Z]+.*){${capitals}}`)); | pattern_array.push(new RegExp(`(.*[A-Z]+.*){${capitals}}`)); | ||||
} | } | ||||
const isAccepted = pattern_array | const isAccepted = pattern_array | ||||
.map(n => n.test(new_value)) | .map(n => n.test(new_value)) | ||||
.reduce((a, b) => a && b, true); | .reduce((a, b) => a && b, true); | ||||
if (isAccepted) { | if (isAccepted) { | ||||
return Promise.resolve(); | return Promise.resolve(); | ||||
} else { | } | ||||
const digits = digits || "0"; | const requiredDigits = digits || "0"; | ||||
const capitals = capitals || "0"; | const requiredCapitals = capitals || "0"; | ||||
return Promise.reject( | return Promise.reject( | ||||
`It didn't fulfill the requirements: required digits - ${digits} , required capitals ${capitals}` | `It didn't fulfill the requirements: required digits - ${requiredDigits} , required capitals ${requiredCapitals}` | ||||
); | ); | ||||
} | |||||
}, | }, | ||||
encode: function(context, params, value_in_code) { | encode(context, params, value_in_code) { | ||||
const hashing_params = Object.assign( | const hashing_params = { | ||||
{}, | ...app.ConfigManager.get("password_hash"), | ||||
app.ConfigManager.get("password_hash"), | ...params, | ||||
params | }; | ||||
); | |||||
const salt = SecureHasher.generateRandomSalt( | const salt = SecureHasher.generateRandomSalt( | ||||
hashing_params.salt_length | hashing_params.salt_length | ||||
); | ); | ||||
return SecureHasher.hash(value_in_code, salt, hashing_params); | return SecureHasher.hash(value_in_code, salt, hashing_params); | ||||
}, | }, | ||||
get_aggregation_stages: require("./../../../chip-types/field-type-default-methods.js") | get_aggregation_stages: require("./../../../chip-types/field-type-default-methods.js") | ||||
.get_aggregation_stages, | .get_aggregation_stages, | ||||
decode: function(context, params, value_in_db) { | decode(context, params, value_in_db) { | ||||
return null; | return null; | ||||
}, | }, | ||||
format: function(context, params, decoded_value, format_params) { | format(context, params, decoded_value, format_params) { | ||||
return decoded_value; | return decoded_value; | ||||
}, | }, | ||||
}); | }); |