Initial Commit

This commit is contained in:
David Stone
2024-11-30 18:24:12 -07:00
commit e8f7955c1c
5432 changed files with 1397750 additions and 0 deletions

View File

@ -0,0 +1,120 @@
<?php
/**
* The Session Handler.
*
* This class is responsible for setting up the
* session of the SSO user, and resuming it
* when the user is redirected back to the original
* broker site.
*
* @package WP_Ultimo
* @subpackage SSO
* @since 2.0.11
*/
namespace WP_Ultimo\SSO;
use \WP_Ultimo\Dependencies\Jasny\SSO\Server\SessionInterface;
use \WP_Ultimo\Dependencies\Jasny\SSO\ServerException;
use \WP_Ultimo\SSO\Exception\SSO_Session_Exception;
// Exit if accessed directly
defined('ABSPATH') || exit;
/**
* The SSO session handler.
*
* @since 2.0.11
*/
class SSO_Session_Handler implements SessionInterface {
/**
* The SSO manager instance.
*
* @since 2.0.11
* @var \WP_Ultimo\SSO
*/
public $sso_manager;
/**
* Build the handler with the SSO manager.
*
* @since 2.0.11
*
* @param \WP_Ultimo\SSO\SSO|null $sso_manager The sso manager.
*/
public function __construct(\WP_Ultimo\SSO\SSO $sso_manager = null) {
$this->sso_manager = $sso_manager;
} // end __construct;
/**
* Returns the session id.
*
* @since 2.0.11
*/
public function getId(): string { // phpcs:ignore
return $this->sso_manager->input('broker');
} // end getId;
/**
* Start a new session.
*
* @since 2.0.11
*
* @throws ServerException If session can't be started.
* @throws SSO_Session_Exception If session can't be started.
*/
public function start(): void { // phpcs:ignore
$site_hash = $this->sso_manager->input('broker');
if (!get_current_user_id()) {
throw new SSO_Session_Exception('User not logged in.', 401);
} // end if;
$id = $this->sso_manager->decode($site_hash, $this->sso_manager->salt());
set_site_transient("sso-{$site_hash}-{$id}", get_current_user_id(), 180);
} // end start;
/**
* Resume an existing session.
*
* @since 2.0.11
*
* @throws ServerException If session can't be started.
* @throws BrokerException If session is expired.
*
* @param string $id The session id.
*/
public function resume(string $id): void { // phpcs:ignore
$decoded_id = $this->sso_manager->decode($id, $this->sso_manager->salt());
$user_id = get_site_transient("sso-{$id}-{$decoded_id}");
if ($user_id) {
$this->sso_manager->set_target_user_id($user_id);
} // end if;
} // end resume;
/**
* Check if a session is active. (status PHP_SESSION_ACTIVE).
*
* @see session_status()
*
* @since 2.0.11
*/
public function isActive(): bool { // phpcs:ignore
return false;
} // end isActive;
} // end class SSO_Session_Handler;