PABX da Simples IP
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

210 lines
5.7 KiB

<?php
/**
* Created by PhpStorm.
* User: user
* Date: 22/09/2017
* Time: 09:20
*/
/**
* Class Sessao
*/
class Sessao extends SessionHandler implements SessionHandlerInterface {
private static $namePattern = "sess_%s";
private $savePath;
public static function getTmpFileName($idProgSrc, $prefix = '_report') {
$sessionName = static::getSessionName();
return "{$sessionName}{$prefix}{$idProgSrc}";
}
public static function getSessionName() {
$idSessao = session_id();
return sprintf(static::$namePattern, $idSessao);
}
/**
* @inheritdoc
*/
public function open($savePath, $sessionName) {
$this->savePath = $savePath;
if (!is_dir($this->savePath)) {
@mkdir($this->savePath, 0777);
}
if (!is_readable($this->savePath) || !is_writable($this->savePath)) {
@chmod($this->savePath, 0777);
}
return true;
}
/**
* @inheritdoc
*/
public function close() {
return true;
}
/**
* @inheritdoc
*/
public function destroy($session_id) {
$sessionPath = static::getPath('session', $session_id);
$files = glob($sessionPath);
foreach ($files as $file) {
if (file_exists($file)) {
@unlink($file);
}
}
$tmpPath = static::getPath('tmp', $session_id);
$filesReport = glob($tmpPath);
foreach ($filesReport as $fileReport) {
if (file_exists($fileReport)) {
@unlink($fileReport);
}
}
return true;
}
public static function getPath($for = 'tmp', $sessionId = null, $isForGlob = true) {
$idSessao = is_null($sessionId) || empty($sessionId) ? session_id() : $sessionId;
$for = strtolower($for);
$path = null;
switch ($for) {
case 'tmp':
$path = (sys_get_temp_dir() . DIRECTORY_SEPARATOR);
break;
default:
$sessionSavePath = session_save_path();
$lastCharacter = substr($sessionSavePath, -1);
if ($lastCharacter != DIRECTORY_SEPARATOR) {
$sessionSavePath = $sessionSavePath . DIRECTORY_SEPARATOR;
}
$path = $sessionSavePath;
break;
}
$path .= sprintf(static::$namePattern, $idSessao);
if ($isForGlob) {
return $path . '*';
}
return $path;
}
/**
* @inheritdoc
*/
public function gc($maxlifetime) {
$sessionPath = static::getPath('session');
$files = glob($sessionPath);
//array que armazena os id's das sess<EFBFBD>es que foram removidas
$outdatedSessions = [];
foreach ($files as $file) {
clearstatcache(true, $file);
if (filemtime($file) + $maxlifetime < time() && file_exists($file)) {
$name = explode('_', $file);
$outdatedSessions[] = $name[1];
@unlink($file);
}
}
//varre o diret<EFBFBD>rio onde os arquivos tempor<EFBFBD>rios de relat<EFBFBD>rios foram salvos
//e apaga todos os arquivos gerados pelo usu<EFBFBD>rio durante a sess<EFBFBD>o
if (!empty($outdatedSessions)) {
foreach ($outdatedSessions as $idSessao) {
$path = static::getPath('tmp', $idSessao);
$reportFiles = glob($path);
foreach ($reportFiles as $reportFile) {
if (file_exists($reportFile)) {
@unlink($reportFile);
}
}
}
}
return true;
}
/**
* @inheritdoc
*/
public function read($session_id) {
// $path = static::getPath('session', $session_id, false);
// return (string)@file_get_contents($path);
return parent::read($session_id);
}
/**
* @inheritdoc
*/
public function write($session_id, $session_data) {
return parent::write($session_id, $session_data);
}
/**
* decrypt AES 256
*
* @param string $edata
* @param string $password
*
* @return string decrypted data
*/
function decrypt($edata, $password) {
$data = base64_decode($edata);
$salt = substr($data, 0, 16);
$ct = substr($data, 16);
$rounds = 3; // depends on key length
$data00 = $password . $salt;
$hash = array();
$hash[0] = hash('sha256', $data00, true);
$result = $hash[0];
for ($i = 1; $i < $rounds; $i++) {
$hash[$i] = hash('sha256', $hash[$i - 1] . $data00, true);
$result .= $hash[$i];
}
$key = substr($result, 0, 32);
$iv = substr($result, 32, 16);
return openssl_decrypt($ct, 'AES-256-CBC', $key, true, $iv);
}
/**
* crypt AES 256
*
* @param string $data
* @param string $password
*
* @return string base64 encrypted data
*/
function encrypt($data, $password) {
// Set a random salt
$salt = openssl_random_pseudo_bytes(16);
$salted = '';
$dx = '';
// Salt the key(32) and iv(16) = 48
while (strlen($salted) < 48) {
$dx = hash('sha256', $dx . $password . $salt, true);
$salted .= $dx;
}
$key = substr($salted, 0, 32);
$iv = substr($salted, 32, 16);
$encrypted_data = openssl_encrypt($data, 'AES-256-CBC', $key, true, $iv);
return base64_encode($salt . $encrypted_data);
}
}