A super easy PHP Framework for web development!
				https://github.com/exacti/phacil-framework
			
			
		
			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.
		
		
		
		
			
				
					271 lines
				
				5.3 KiB
			
		
		
			
		
	
	
					271 lines
				
				5.3 KiB
			| 
								 
											2 years ago
										 
									 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Copyright © 2024 ExacTI Technology Solutions. All rights reserved.
							 | 
						||
| 
								 | 
							
								 * GPLv3 General License.
							 | 
						||
| 
								 | 
							
								 * https://exacti.com.br
							 | 
						||
| 
								 | 
							
								 * Phacil PHP Framework - https://github.com/exacti/phacil-framework
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Phacil\Framework\Session\Redis;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use Cm\RedisSession\Handler\ConfigInterface;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Config implements ConfigInterface {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * 
							 | 
						||
| 
								 | 
							
									 * @var int
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									private $logLevel = 1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const PARAM_HOST = 'tcp://127.0.0.1';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const PARAM_PORT = 6379;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const PARAM_DATABASE = 3;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const DEFAULT_COMPRESSION_THRESHOLD = 2048;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const PARAM_COMPRESSION_LIBRARY = 'gzip';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const PARAM_TIMEOUT = 2.5;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const PARAM_MAX_CONCURRENCY = 12;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const PARAM_BREAK_AFTER = 30;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const PARAM_SENTINEL_CONNECT_RETRIES = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Session max lifetime
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									const SESSION_MAX_LIFETIME = 31536000;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Try to break lock for at most this many seconds
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									const DEFAULT_FAIL_AFTER = 15;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const PARAM_MIN_LIFETIME = 60;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const PARAM_DISABLE_LOCKING = true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const PARAM_BOT_LIFETIME = 7200;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const PARAM_BOT_FIRST_LIFETIME = 60;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const PARAM_FIRST_LIFETIME = 600;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const PARAM_SESSION_LIFETIME = 31536000;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const PARAM_SENTINEL_SERVERS = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * 
							 | 
						||
| 
								 | 
							
									 * @var \Phacil\Framework\Registry
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									protected $engine;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/** 
							 | 
						||
| 
								 | 
							
									 * Get the Framework instance
							 | 
						||
| 
								 | 
							
									 * @return void 
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function __construct(){
							 | 
						||
| 
								 | 
							
										$this->engine = \Phacil\Framework\Registry::getInstance();
							 | 
						||
| 
								 | 
							
										$this->logLevel = \Phacil\Framework\Config::Debug() ? 6 : $this->logLevel;
							 | 
						||
| 
								 | 
							
										$fg = [];
							 | 
						||
| 
								 | 
							
										foreach (get_class_methods($this) as $key => $value) {
							 | 
						||
| 
								 | 
							
											# code...
							 | 
						||
| 
								 | 
							
											if ($value != '__construct' && $value != 'getLogLevel')
							 | 
						||
| 
								 | 
							
											$fg[$value] = $this->$value();
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										return;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * 
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									function getLogLevel() {
							 | 
						||
| 
								 | 
							
										return $this->engine->config->get('session_redis_log_level') ?: $this->logLevel;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getHost()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return $this->engine->config->get('session_redis_dsn') ? : self::PARAM_HOST;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getPort()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return $this->engine->config->get('session_redis_port') ?: self::PARAM_PORT;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getDatabase()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return (string)$this->engine->config->get('session_redis_database') ?: self::PARAM_DATABASE;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getPassword()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return $this->engine->config->get('session_redis_password') ?: '';
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getTimeout()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return $this->engine->config->get('session_redis_timeout') ? : self::PARAM_TIMEOUT;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getPersistentIdentifier()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return $this->engine->config->get('session_redis_persistent_id') ?: '';
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getCompressionThreshold()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return $this->engine->config->get('session_redis_compression_threshold') ?: self::DEFAULT_COMPRESSION_THRESHOLD ;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getCompressionLibrary()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return $this->engine->config->get('session_redis_compression_library') ?: (self::PARAM_COMPRESSION_LIBRARY);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getMaxConcurrency()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return $this->engine->config->get('session_redis_max_concurrency') ?: (self::PARAM_MAX_CONCURRENCY);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getMaxLifetime()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return $this->engine->config->get('session_redis_max_lifetime') ?: self::SESSION_MAX_LIFETIME;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getMinLifetime()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return (int)$this->engine->config->get('session_redis_min_lifetime') ?: (self::PARAM_MIN_LIFETIME);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getDisableLocking()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return (bool)$this->engine->config->get('session_redis_disable_locking') ?:  (self::PARAM_DISABLE_LOCKING);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getBotLifetime()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return (int) $this->engine->config->get('session_redis_bot_lifetime') ?: (self::PARAM_BOT_LIFETIME);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getBotFirstLifetime()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return (string)$this->engine->config->get('session_redis_bot_first_lifetime') ?: (self::PARAM_BOT_FIRST_LIFETIME);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getFirstLifetime()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return (int)$this->engine->config->get('session_redis_first_lifetime') ?: (self::PARAM_FIRST_LIFETIME);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getBreakAfter()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return (int)$this->engine->config->get('session_redis_break_after') ?: (self::PARAM_BREAK_AFTER);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getLifetime()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return (int)$this->engine->config->get('session_redis_expire') ?: self::PARAM_SESSION_LIFETIME;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getSentinelServers()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return $this->engine->config->get('session_redis_sentinel_servers') ?: null;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getSentinelMaster()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return $this->engine->config->get('session_redis_sentinel_master') ?: null;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getSentinelVerifyMaster()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return $this->engine->config->get('session_redis_verify_master') ?: (null);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getSentinelConnectRetries()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return $this->engine->config->get('session_redis_sentinel_connect_retries') ?: (self::PARAM_SENTINEL_CONNECT_RETRIES);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * {@inheritdoc}
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getFailAfter()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return (int)$this->engine->config->get('session_redis_fail_after') ?: self::DEFAULT_FAIL_AFTER;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |