2026-10-18 17:01:36 +00:00
<? php
2026-10-18 19:27:17 -04:00
declare ( strict_types = 1 );
2026-10-21 06:53:45 -04:00
ini_set ( 'display_errors' , '0' );
ini_set ( 'log_errors' , '1' );
2026-10-18 19:27:17 -04:00
header ( 'X-Content-Type-Options: nosniff' );
header ( 'Referrer-Policy: no-referrer' );
header ( 'X-Frame-Options: DENY' );
header ( 'Cache-Control: no-store' );
set_exception_handler ( function ( Throwable $e ) : void {
2026-10-21 06:53:45 -04:00
$status = $e instanceof AppException ? $e -> status : ( $e instanceof InvalidArgumentException ? 422 : 500 );
$message = $status < 500 ? $e -> getMessage () : 'The application could not complete this request. Please try again later.' ;
if ( $e instanceof PDOException && $e -> getCode () === '23000' ) {
$status = 409 ;
$message = 'This record already exists or is still referenced by another record.' ;
}
if ( $status >= 500 )
error_log (( string ) $e );
2026-10-20 06:45:30 -04:00
http_response_code ( $status );
2026-10-21 06:53:45 -04:00
if ( strtolower ( $_SERVER [ 'HTTP_X_REQUESTED_WITH' ] ?? '' ) === 'xmlhttprequest' ) {
header ( 'Content-Type: application/json' );
echo json_encode ([ 'ok' => false , 'error' => $message ]);
} else {
header ( 'Content-Type: text/html; charset=UTF-8' );
echo '<!doctype html><html lang="en"><title>Request could not be completed</title><main><h1>Request could not be completed</h1><p>' . htmlspecialchars ( $message , ENT_QUOTES , 'UTF-8' ) . '</p><p><a href="main.php">Return to the application</a></p></main></html>' ;
}
2026-10-18 19:27:17 -04:00
});
require_once __DIR__ . '/classes/Base.php' ;
$application = new Base ();
2026-10-21 06:53:45 -04:00
$https = Transport :: https ( $_SERVER , getenv ( 'HCR_TRUSTED_PROXIES' ) ?: '' );
2026-10-20 06:45:30 -04:00
header ( "Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'" );
header ( 'Permissions-Policy: camera=(), microphone=(), geolocation=()' );
2026-10-21 06:53:45 -04:00
if ( $https && ( string ) $application -> getSettings () -> Environment === 'Production' )
header ( 'Strict-Transport-Security: max-age=31536000' );
2026-10-18 19:27:17 -04:00
if (( string ) $application -> getSettings () -> Environment === 'Production' && ! $https ) {
http_response_code ( 400 );
exit ( 'HTTPS is required. Open the secure application URL.' );
}
ini_set ( 'session.use_strict_mode' , '1' );
ini_set ( 'session.use_only_cookies' , '1' );
session_name ( 'HUNTINGCLUBROSTER' );
session_set_cookie_params ([
'lifetime' => 0 , 'path' => '/' ,
'secure' => $https ,
'httponly' => true , 'samesite' => 'Lax' ,
]);
2026-10-18 17:01:36 +00:00
session_start ();
2026-10-18 19:27:17 -04:00
$application -> do ();