112 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php 
 | |
| 
 | |
| /**
 | |
|  * @author          Tassos Marinos <info@tassos.gr>
 | |
|  * @link            https://www.tassos.gr
 | |
|  * @copyright       Copyright © 2024 Tassos All Rights Reserved
 | |
|  * @license         GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
 | |
| */
 | |
| 
 | |
| namespace NRFramework;
 | |
| 
 | |
| defined('_JEXEC') or die('Restricted access');
 | |
| 
 | |
| use Joomla\CMS\Factory;
 | |
| use Joomla\CMS\Crypt\Crypt;
 | |
| 
 | |
| class VisitorToken
 | |
| {
 | |
|    /**
 | |
|      *  Class instance
 | |
|      *
 | |
|      *  @var  object
 | |
|      */
 | |
|     private static $instance;
 | |
| 
 | |
| 	/**
 | |
| 	 *  Cookie Name
 | |
| 	 *
 | |
| 	 *  @var  string
 | |
| 	 */
 | |
| 	private $cookieName = "nrid";
 | |
| 
 | |
| 	/**
 | |
| 	 *  Represents the maximum age of the visitor's cookie in seconds.
 | |
| 	 *
 | |
| 	 *  @var  Integer
 | |
| 	 */
 | |
| 	private $expire = 90000000;
 | |
| 
 | |
|     /**
 | |
|      *  Cookies Object
 | |
|      *
 | |
|      *  @var  object
 | |
|      */
 | |
|     private $cookies;
 | |
| 
 | |
|     /**
 | |
|      *  Class constructor
 | |
|      */
 | |
|     private function __construct()
 | |
|     {
 | |
|         $this->cookies = Factory::getApplication()->input->cookie;
 | |
| 
 | |
|         $token = $this->cookies->get($this->cookieName, null);
 | |
| 
 | |
|         if ($token === null)
 | |
|         {
 | |
|             $this->store($this->create());
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      *  Returns class instance
 | |
|      *
 | |
|      *  @return  object
 | |
|      */
 | |
|     public static function getInstance()
 | |
|     {
 | |
|         if (is_null(self::$instance))
 | |
|         {
 | |
|             self::$instance = new self();
 | |
|         }
 | |
| 
 | |
|         return self::$instance;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      *  Get a visitor's unique token id, if a token isn't set yet one will be generated.
 | |
|      *
 | |
|      *  @param   boolean   $forceNew  If true, force a new token to be created
 | |
|      *  
 | |
|      *  @return  string    The session token
 | |
|      */
 | |
|     public function get($forceNew = false)
 | |
|     {
 | |
|         return $this->cookies->get($this->cookieName);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      *  Create a token-string
 | |
|      *
 | |
|      *  @param   integer $length  Length of string
 | |
|      *
 | |
|      *  @return  string  Generated token
 | |
|      */
 | |
|     private function create($length = 8)
 | |
|     {
 | |
|         return bin2hex(Crypt::genRandomBytes($length));
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      *  Saves the cookie to the visitor's browser
 | |
|      *
 | |
|      *  @param   string  $value  Cookie Value
 | |
|      *
 | |
|      *  @return  void
 | |
|      */
 | |
|     private function store($value)
 | |
|     {
 | |
|         $this->cookies->set($this->cookieName, $value, time() + $this->expire, '/', '', true);
 | |
|     }
 | |
| } |