Initial Commit
This commit is contained in:
120
inc/sso/class-sso-session-handler.php
Normal file
120
inc/sso/class-sso-session-handler.php
Normal 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;
|
Reference in New Issue
Block a user