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.
		
		
		
		
			
				
					146 lines
				
				2.9 KiB
			
		
		
			
		
	
	
					146 lines
				
				2.9 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\Cookies;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use Phacil\Framework\Config as FrameworkConfig;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @since 2.0.0
							 | 
						||
| 
								 | 
							
								 * @package Phacil\Framework\Cookies
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class Config
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									const STRICT = 'Strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const LAX = 'Lax';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const NONE = 'None';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const DEFAULT_HTTP_ONLY = true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const DEFAULT_DOMAIN = '';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const DEFAULT_PATH = '/';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const DEFAULT_EXPIRY = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * 
							 | 
						||
| 
								 | 
							
									 * @var string[]
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									private $value = [];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function __construct(
							 | 
						||
| 
								 | 
							
										FrameworkConfig $config
							 | 
						||
| 
								 | 
							
									) {
							 | 
						||
| 
								 | 
							
										//$this->config = $config;
							 | 
						||
| 
								 | 
							
										$this->value['sameSite'] = $config->get('cookie_same_site') ?: self::STRICT;
							 | 
						||
| 
								 | 
							
										$this->value['expires'] = $config->get('cookie_expires') ?: self::DEFAULT_EXPIRY;
							 | 
						||
| 
								 | 
							
										$this->value['path'] = $config->get('cookie_path') ?: self::DEFAULT_PATH;
							 | 
						||
| 
								 | 
							
										$this->value['domain'] = $config->get('cookie_domain') ?: self::DEFAULT_DOMAIN;
							 | 
						||
| 
								 | 
							
										$this->value['secure'] = $config->get('cookie_secure') !== null ? $config->get('cookie_secure') : ($this->isSecure());
							 | 
						||
| 
								 | 
							
										$this->value['httpOnly'] = $config->get('cookie_http_only') !== null ? $config->get('cookie_http_only') : self::DEFAULT_HTTP_ONLY;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/** @return $this  */
							 | 
						||
| 
								 | 
							
									public function setStrict()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										$this->value['sameSite'] = self::STRICT;
							 | 
						||
| 
								 | 
							
										return $this;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/** @return $this  */
							 | 
						||
| 
								 | 
							
									public function setLax()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										$this->value['sameSite'] = self::LAX;
							 | 
						||
| 
								 | 
							
										return $this;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/** @return $this  */
							 | 
						||
| 
								 | 
							
									public function setNone()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										$this->value['sameSite'] = self::NONE;
							 | 
						||
| 
								 | 
							
										return $this;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * @param string $key 
							 | 
						||
| 
								 | 
							
									 * @return string 
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getValue($key)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return $this->value[$key];
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/** @return string[]  */
							 | 
						||
| 
								 | 
							
									public function getValues()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return $this->value;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * @param string $key 
							 | 
						||
| 
								 | 
							
									 * @param string|int $value 
							 | 
						||
| 
								 | 
							
									 * @return $this 
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function setValue($key, $value) {
							 | 
						||
| 
								 | 
							
										$this->value[$key] = $value;
							 | 
						||
| 
								 | 
							
										return $this;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/** 
							 | 
						||
| 
								 | 
							
									 * Check if is secure (SSL) connection
							 | 
						||
| 
								 | 
							
									 * @return bool  
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function isSecure()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/** @return string  */
							 | 
						||
| 
								 | 
							
									public function getSameSite() {
							 | 
						||
| 
								 | 
							
										return $this->value['sameSite'];
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/** @return string  */
							 | 
						||
| 
								 | 
							
									public function getExpires() {
							 | 
						||
| 
								 | 
							
										return $this->value['expires'];
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/** @return string  */
							 | 
						||
| 
								 | 
							
									public function getPath() {
							 | 
						||
| 
								 | 
							
										return $this->value['path'];
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/** @return string  */
							 | 
						||
| 
								 | 
							
									public function getDomain() {
							 | 
						||
| 
								 | 
							
										return $this->value['domain'];
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/** @return string  */
							 | 
						||
| 
								 | 
							
									public function getSecure() {
							 | 
						||
| 
								 | 
							
										return $this->value['secure'];
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/** @return string  */
							 | 
						||
| 
								 | 
							
									public function getHttpOnly() {
							 | 
						||
| 
								 | 
							
										return $this->value['httpOnly'];
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * 
							 | 
						||
| 
								 | 
							
									 * @return $this
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									static public function getInstance()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										$class = get_called_class();
							 | 
						||
| 
								 | 
							
										return \Phacil\Framework\Registry::getAutoInstance((new $class()));
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |