NEW Introduce dolEncrypt and dolDecrypt to be able to encrypt data in db
This commit is contained in:
parent
d751a00e7b
commit
c60f42b1bf
@ -92,7 +92,80 @@ function dol_decode($chain, $key = '1')
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a hash of a string.
|
* Encode a string with a symetric encryption. Used to encrypt sensitive data into database.
|
||||||
|
* Note: If a backup is restored onto another instance with a different $dolibarr_main_instance_unique_id, then decoded value will differ.
|
||||||
|
*
|
||||||
|
* @param string $chain string to encode
|
||||||
|
* @param string $key If '', we use $dolibarr_main_instance_unique_id
|
||||||
|
* @param string $ciphering Default ciphering algorithm
|
||||||
|
* @return string encoded string
|
||||||
|
* @see dolDecrypt(), dol_hash()
|
||||||
|
*/
|
||||||
|
function dolEncrypt($chain, $key = '', $ciphering = "AES-256-CTR")
|
||||||
|
{
|
||||||
|
global $dolibarr_main_instance_unique_id;
|
||||||
|
|
||||||
|
if ($chain === '') {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$reg = array();
|
||||||
|
if (preg_match('/^dolcrypt:([^:]+):(.+)$/', $chain, $reg)) {
|
||||||
|
// The $chain is already a crypted string
|
||||||
|
return $chain;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($key)) {
|
||||||
|
$key = $dolibarr_main_instance_unique_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
$newchain = $chain;
|
||||||
|
|
||||||
|
if (!function_exists('openssl_encrypt')) {
|
||||||
|
return $chain;
|
||||||
|
} else {
|
||||||
|
$newchain = openssl_encrypt($chain, $ciphering, $key);
|
||||||
|
return 'dolcrypt:'.$ciphering.':'.$newchain;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Decode a string with a symetric encryption. Used to decrypt sensitive data saved into database.
|
||||||
|
* Note: If a backup is restored onto another instance with a different $dolibarr_main_instance_unique_id, then decoded value will differ.
|
||||||
|
*
|
||||||
|
* @param string $chain string to encode
|
||||||
|
* @param string $key If '', we use $dolibarr_main_instance_unique_id
|
||||||
|
* @return string encoded string
|
||||||
|
* @see dolEncrypt(), dol_hash()
|
||||||
|
*/
|
||||||
|
function dolDecrypt($chain, $key = '')
|
||||||
|
{
|
||||||
|
global $dolibarr_main_instance_unique_id;
|
||||||
|
|
||||||
|
if ($chain === '') {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($key)) {
|
||||||
|
$key = $dolibarr_main_instance_unique_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
$reg = array();
|
||||||
|
if (preg_match('/^dolcrypt:([^:]+):(.+)$/', $chain, $reg)) {
|
||||||
|
$ciphering = $reg[1];
|
||||||
|
if (function_exists('openssl_decrypt')) {
|
||||||
|
$newchain = openssl_decrypt($reg[2], $ciphering, $key);
|
||||||
|
} else {
|
||||||
|
$newchain = 'Error function openssl_decrypt() not available';
|
||||||
|
}
|
||||||
|
return $newchain;
|
||||||
|
} else {
|
||||||
|
return $chain;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a hash (non reversible encryption) of a string.
|
||||||
* If constant MAIN_SECURITY_HASH_ALGO is defined, we use this function as hashing function (recommanded value is 'password_hash')
|
* If constant MAIN_SECURITY_HASH_ALGO is defined, we use this function as hashing function (recommanded value is 'password_hash')
|
||||||
* If constant MAIN_SECURITY_SALT is defined, we use it as a salt (used only if hashing algorightm is something else than 'password_hash').
|
* If constant MAIN_SECURITY_SALT is defined, we use it as a salt (used only if hashing algorightm is something else than 'password_hash').
|
||||||
*
|
*
|
||||||
|
|||||||
@ -311,8 +311,13 @@ class EmailCollector extends CommonObject
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
include_once DOL_DOCUMENT_ROOT.'/core/lib/security.lib.php';
|
||||||
|
$this->password = dolEncrypt($this->password);
|
||||||
|
|
||||||
$id = $this->createCommon($user, $notrigger);
|
$id = $this->createCommon($user, $notrigger);
|
||||||
|
|
||||||
|
$this->password = dolDecrypt($this->password);
|
||||||
|
|
||||||
if (is_array($this->filters) && count($this->filters)) {
|
if (is_array($this->filters) && count($this->filters)) {
|
||||||
$emailcollectorfilter = new EmailCollectorFilter($this->db);
|
$emailcollectorfilter = new EmailCollectorFilter($this->db);
|
||||||
|
|
||||||
@ -371,6 +376,7 @@ class EmailCollector extends CommonObject
|
|||||||
unset($object->id);
|
unset($object->id);
|
||||||
unset($object->fk_user_creat);
|
unset($object->fk_user_creat);
|
||||||
unset($object->import_key);
|
unset($object->import_key);
|
||||||
|
unset($object->password);
|
||||||
|
|
||||||
// Clear fields
|
// Clear fields
|
||||||
$object->ref = "copy_of_".$object->ref;
|
$object->ref = "copy_of_".$object->ref;
|
||||||
@ -422,6 +428,10 @@ class EmailCollector extends CommonObject
|
|||||||
public function fetch($id, $ref = null)
|
public function fetch($id, $ref = null)
|
||||||
{
|
{
|
||||||
$result = $this->fetchCommon($id, $ref);
|
$result = $this->fetchCommon($id, $ref);
|
||||||
|
|
||||||
|
include_once DOL_DOCUMENT_ROOT.'/core/lib/security.lib.php';
|
||||||
|
$this->password = dolDecrypt($this->password);
|
||||||
|
|
||||||
//if ($result > 0 && ! empty($this->table_element_line)) $this->fetchLines();
|
//if ($result > 0 && ! empty($this->table_element_line)) $this->fetchLines();
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
@ -517,7 +527,14 @@ class EmailCollector extends CommonObject
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->updateCommon($user, $notrigger);
|
include_once DOL_DOCUMENT_ROOT.'/core/lib/security.lib.php';
|
||||||
|
$this->password = dolEncrypt($this->password);
|
||||||
|
|
||||||
|
$result = $this->updateCommon($user, $notrigger);
|
||||||
|
|
||||||
|
$this->password = dolDecrypt($this->password);
|
||||||
|
|
||||||
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user