diff --git a/src/Socialbox/Classes/Utilities.php b/src/Socialbox/Classes/Utilities.php index 231fa85..d12ad20 100644 --- a/src/Socialbox/Classes/Utilities.php +++ b/src/Socialbox/Classes/Utilities.php @@ -83,7 +83,6 @@ class Utilities if ($decoded === false) { - var_dump($data); throw new InvalidArgumentException('Failed to decode data from Base64'); } diff --git a/src/Socialbox/Managers/ResolvedServersManager.php b/src/Socialbox/Managers/ResolvedServersManager.php index 69ae2d1..781f6f4 100644 --- a/src/Socialbox/Managers/ResolvedServersManager.php +++ b/src/Socialbox/Managers/ResolvedServersManager.php @@ -81,10 +81,11 @@ class ResolvedServersManager * Retrieves the resolved server record from the database for a given domain. * * @param string $domain The domain name for which to retrieve the resolved server record. - * @return ResolvedServerRecord The resolved server record associated with the given domain. + * @return ResolvedServerRecord|null The resolved server record associated with the given domain. * @throws DatabaseOperationException If there is an error retrieving the resolved server record from the database. + * @throws \DateMalformedStringException If the date string is malformed. */ - public static function getResolvedServer(string $domain): ResolvedServerRecord + public static function getResolvedServer(string $domain): ?ResolvedServerRecord { try { @@ -92,7 +93,13 @@ class ResolvedServersManager $statement->bindParam(1, $domain); $statement->execute(); $result = $statement->fetch(); - return new ResolvedServerRecord($result); + + if($result === false) + { + return null; + } + + return ResolvedServerRecord::fromArray($result); } catch(PDOException $e) { diff --git a/src/Socialbox/Objects/Standard/SessionState.php b/src/Socialbox/Objects/Standard/SessionState.php index 5c81dd4..d4d4715 100644 --- a/src/Socialbox/Objects/Standard/SessionState.php +++ b/src/Socialbox/Objects/Standard/SessionState.php @@ -15,7 +15,7 @@ * @var SessionFlags[]|null */ private ?array $flags; - private DateTime $created; + private int $created; /** * Constructor for initializing the object with the provided data. @@ -25,7 +25,6 @@ * - 'identified_as': mixed, The identity information. * - 'authenticated': bool, Whether the object is authenticated. * - 'flags': string|null, Optional flags in - * @throws \DateMalformedStringException */ public function __construct(array $data) { @@ -48,49 +47,101 @@ if(is_int($data['created'])) { - $this->created = new DateTime(); - $this->created->setTimestamp($data['created']); + $this->created = $data['created']; } elseif($data['created'] instanceof DateTime) { - $this->created = $data['created']; + $this->created = $data['created']->getTimestamp(); } else { - $this->created = new DateTime($data['created']); + $this->created = time(); } } + /** + * Retrieves the UUID of the current instance. + * + * @return string The UUID as a string. + */ public function getUuid(): string { return $this->uuid; } + /** + * + * @return string The identifier associated with the entity. + */ public function getIdentifiedAs(): string { return $this->identifiedAs; } + /** + * Checks if the user is authenticated. + * + * @return bool Returns true if the user is authenticated, otherwise false. + */ public function isAuthenticated(): bool { return $this->authenticated; } + /** + * + * @return array|null + */ public function getFlags(): ?array { return $this->flags; } - public function getCreated(): DateTime + /** + * Checks if the provided flag exists within the current flags. + * + * @param string|SessionFlags $flag The flag to check, either as a string or an instance of SessionFlags. + * @return bool Returns true if the flag is found in the current flags, otherwise false. + */ + public function containsFlag(string|SessionFlags $flag): bool + { + if($this->flags === null || count($this->flags) === 0) + { + return false; + } + + if($flag instanceof SessionFlags) + { + $flag = $flag->value; + } + + return in_array($flag, $this->flags); + } + + /** + * + * @return int Returns the created timestamp as an integer. + */ + public function getCreated(): int { return $this->created; } + /** + * Creates a new instance of SessionState from the provided array. + * + * @param array $data The input array containing data to initialize the SessionState instance. + * @return SessionState A new instance of the SessionState class. + */ public static function fromArray(array $data): SessionState { return new self($data); } + /** + * + * @return array An associative array representation of the object's properties, including 'uuid', 'identified_as', 'authenticated', 'flags', and 'created'. + */ public function toArray(): array { return [ @@ -98,7 +149,7 @@ 'identified_as' => $this->identifiedAs, 'authenticated' => $this->authenticated, 'flags' => $this->flags, - 'created' => $this->created->getTimestamp() + 'created' => $this->created, ]; } } \ No newline at end of file diff --git a/src/Socialbox/SocialClient.php b/src/Socialbox/SocialClient.php index 9dae1ec..201d9f7 100644 --- a/src/Socialbox/SocialClient.php +++ b/src/Socialbox/SocialClient.php @@ -5,14 +5,12 @@ use Socialbox\Classes\RpcClient; use Socialbox\Classes\Utilities; use Socialbox\Exceptions\CryptographyException; - use Socialbox\Exceptions\DatabaseOperationException; use Socialbox\Exceptions\ResolutionException; use Socialbox\Exceptions\RpcException; use Socialbox\Objects\ExportedSession; - use Socialbox\Objects\KeyPair; use Socialbox\Objects\PeerAddress; - use Socialbox\Objects\RpcError; use Socialbox\Objects\RpcRequest; + use Socialbox\Objects\Standard\SessionState; class SocialClient extends RpcClient { @@ -43,6 +41,19 @@ )->getResponse()->getResult(); } + /** + * Retrieves the current state of the session from the server. + * + * @return SessionState Returns an instance of SessionState representing the session's current state. + * @throws RpcException Thrown if the RPC request fails. + */ + public function getSessionState(): SessionState + { + return SessionState::fromArray($this->sendRequest( + new RpcRequest('getSessionState', Utilities::randomCrc32()) + )->getResponse()->getResult()); + } + /** * Retrieves the privacy policy from the server. * diff --git a/tests/test.php b/tests/test.php index 0b671b4..f176dbe 100644 --- a/tests/test.php +++ b/tests/test.php @@ -4,11 +4,7 @@ import('net.nosial.socialbox'); $client = new \Socialbox\SocialClient(generateRandomPeer()); - var_dump($client->ping()); - var_dump($client->getPrivacyPolicy()); - var_dump($client->acceptPrivacyPolicy()); - var_dump($client->getTermsOfService()); - var_dump($client->acceptTermsOfService()); + var_dump($client->getSessionState()); function generateRandomPeer() {