161 lines
3.9 KiB
PHP
161 lines
3.9 KiB
PHP
<?php
|
|
|
|
namespace App\Controllers;
|
|
|
|
use CodeIgniter\Controller;
|
|
use CodeIgniter\HTTP\CLIRequest;
|
|
use CodeIgniter\HTTP\IncomingRequest;
|
|
use CodeIgniter\HTTP\RequestInterface;
|
|
use CodeIgniter\HTTP\ResponseInterface;
|
|
use Psr\Log\LoggerInterface;
|
|
use App\Libraries\Beheer\Session\RetrieveUserSession;
|
|
|
|
/**
|
|
* Class BaseController
|
|
*
|
|
* BaseController provides a convenient place for loading components
|
|
* and performing functions that are needed by all your controllers.
|
|
* Extend this class in any new controllers.
|
|
*/
|
|
abstract class BaseController extends Controller
|
|
{
|
|
/**
|
|
* Instance of the main Request object.
|
|
*
|
|
* @var CLIRequest|IncomingRequest
|
|
*/
|
|
protected $request;
|
|
|
|
/**
|
|
* An array of helpers to be loaded automatically upon
|
|
* class instantiation.
|
|
*
|
|
* @var list<string>
|
|
*/
|
|
protected $helpers = ['common'];
|
|
|
|
/**
|
|
* Session instance
|
|
*/
|
|
protected $session;
|
|
|
|
/**
|
|
* Current authenticated user
|
|
*/
|
|
public $user;
|
|
|
|
/**
|
|
* Authentication status
|
|
*/
|
|
public $authenticated = false;
|
|
|
|
/**
|
|
* Application version
|
|
*/
|
|
public $version = '1.00.81';
|
|
|
|
/**
|
|
* User Model instance
|
|
*/
|
|
protected $userModel;
|
|
|
|
/**
|
|
* @return void
|
|
*/
|
|
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
|
{
|
|
// Do Not Edit This Line
|
|
parent::initController($request, $response, $logger);
|
|
|
|
// Preload any models, libraries, etc, here.
|
|
$this->session = \Config\Services::session();
|
|
|
|
// Make version available to all views
|
|
$renderer = \Config\Services::renderer();
|
|
$renderer->setVar('version', $this->version);
|
|
|
|
// Initialize user session handler
|
|
$this->handleSession();
|
|
}
|
|
|
|
/**
|
|
* Handle session and authentication
|
|
*/
|
|
protected function handleSession(): void
|
|
{
|
|
// Garbage collection for old sessions
|
|
$this->garbageCiSessions();
|
|
|
|
// Set secure site in production
|
|
$this->setSecureSite();
|
|
|
|
// Retrieve user session
|
|
$retrieveSession = new RetrieveUserSession($this->session);
|
|
$retrieveSession->handle();
|
|
|
|
// Get the authenticated flag and user ID from constants
|
|
$this->authenticated = defined('AUTHENTICATED') ? AUTHENTICATED : false;
|
|
|
|
if ($this->authenticated && defined('USERID') && USERID) {
|
|
$this->user = \User::find(USERID);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Garbage collection for old CI sessions
|
|
*/
|
|
protected function garbageCiSessions(): void
|
|
{
|
|
$number = random_int(0, 100);
|
|
|
|
if ($number !== 17) {
|
|
return;
|
|
}
|
|
|
|
$db = \Config\Database::connect();
|
|
$db->query("DELETE FROM ci_sessions WHERE TIMESTAMPDIFF(MINUTE, FROM_UNIXTIME(timestamp), NOW()) > 60");
|
|
}
|
|
|
|
/**
|
|
* Force HTTPS in production
|
|
*/
|
|
protected function setSecureSite(): void
|
|
{
|
|
if (($_ENV['ENVIRONMENT'] ?? 'development') !== 'production') {
|
|
return;
|
|
}
|
|
|
|
if (!isset($_SERVER["HTTPS"]) || $_SERVER["HTTPS"] !== "on") {
|
|
header("Location: " . ($_ENV['APP_URL'] ?? ''));
|
|
exit;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Clean input value (replaces CI3's clean_input method)
|
|
*/
|
|
protected function cleanInput(string $key): string
|
|
{
|
|
$value = $this->request->getPost($key) ?? $this->request->getGet($key) ?? '';
|
|
return str_replace('null', '', $value);
|
|
}
|
|
|
|
/**
|
|
* Return JSON response (replaces CI3's json method)
|
|
*/
|
|
protected function json($data): ResponseInterface
|
|
{
|
|
return $this->response
|
|
->setContentType('application/json')
|
|
->setJSON($data);
|
|
}
|
|
|
|
/**
|
|
* Check if user is authorized (placeholder for subclass implementation)
|
|
*/
|
|
public function unAuthorized(): void
|
|
{
|
|
// Override in subclasses if needed
|
|
}
|
|
}
|