You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.3 KiB
PHP
82 lines
2.3 KiB
PHP
<?php
|
|
namespace App\Libs;
|
|
|
|
use Illuminate\Support\Facades\Crypt;
|
|
|
|
trait Encryptable
|
|
{
|
|
public function getCryptData()
|
|
{
|
|
if($this->_crypt_data == null && $this->_cryptable) {
|
|
$cryptValue = $this->{$this->_cryptable};
|
|
// logger($cryptValue);
|
|
// print_r($cryptValue);
|
|
if($cryptValue) {
|
|
try {
|
|
$decryptValue = Crypt::decryptString($cryptValue);
|
|
$this->_crypt_data = json_decode($decryptValue, true);
|
|
} catch (\Exception $e) {
|
|
logger($e->getTraceAsString());
|
|
$this->_crypt_data = [];
|
|
}
|
|
// print_r($this->_crypt_data);
|
|
}
|
|
else $this->_crypt_data = [];
|
|
// logger($this->_crypt_data);
|
|
// print_r($this->_crypt_data);
|
|
}
|
|
return $this->_crypt_data;
|
|
}
|
|
|
|
public function cryptData($data)
|
|
{
|
|
if($data == null || count($data) == 0) {
|
|
$this->{$this->_cryptable} = null;
|
|
$this->_crypt_data = null;
|
|
return;
|
|
}
|
|
|
|
// print_r($data);
|
|
$jsonText = json_encode($data);
|
|
// AES-256-CBC
|
|
try {
|
|
$encryptValue = Crypt::encryptString($jsonText);
|
|
$this->{$this->_cryptable} = $encryptValue;
|
|
$this->_crypt_data = null;
|
|
} catch (\Exception $e) {
|
|
logger($e->getTraceAsString());
|
|
$this->{$this->_cryptable} = null;
|
|
$this->_crypt_data = null;
|
|
}
|
|
}
|
|
|
|
public function getAttribute($key)
|
|
{
|
|
if (in_array($key, $this->encryptable)) {
|
|
return $this->getEncryptValue($key);
|
|
}
|
|
return parent::getAttribute($key);
|
|
}
|
|
|
|
private function getEncryptValue($key)
|
|
{
|
|
if (in_array($key, $this->encryptable)) {
|
|
$data = $this->getCryptData();
|
|
if(isset($data[$key])) return $data[$key];
|
|
return null;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function setAttribute($key, $value)
|
|
{
|
|
// logger('--------EncrypUser------');
|
|
if (in_array($key, $this->encryptable)) {
|
|
$data = $this->getCryptData();
|
|
if($value) $data[$key] = $value;
|
|
$this->cryptData($data);
|
|
}
|
|
else parent::setAttribute($key, $value);
|
|
}
|
|
}
|