diff --git a/src/Socialbox/Managers/EncryptionChannelManager.php b/src/Socialbox/Managers/EncryptionChannelManager.php index 29e36c4..945d3b5 100644 --- a/src/Socialbox/Managers/EncryptionChannelManager.php +++ b/src/Socialbox/Managers/EncryptionChannelManager.php @@ -3,586 +3,8 @@ namespace Socialbox\Managers; - use InvalidArgumentException; - use ncc\ThirdParty\Symfony\Uid\UuidV4; - use PDO; - use PDOException; - use Socialbox\Classes\Cryptography; - use Socialbox\Classes\Database; - use Socialbox\Enums\Status\EncryptionChannelState; - use Socialbox\Enums\Types\CommunicationRecipientType; - use Socialbox\Exceptions\DatabaseOperationException; - use Socialbox\Objects\Database\ChannelMessageRecord; - use Socialbox\Objects\Database\EncryptionChannelRecord; - use Socialbox\Objects\PeerAddress; class EncryptionChannelManager { - /** - * Creates a new encryption channel between two peers. - * - * @param PeerAddress|string $callingPeer The peer that is creating the channel. - * @param PeerAddress|string $receivingPeer The peer that is receiving the channel. - * @param string $signatureUuid The UUID of the signature used to create the channel. - * @param string $encryptionPublicKey The public key used for encryption. - * @param string $transportEncryptionAlgorithm The algorithm used for transport encryption. - * @return string The UUID of the created channel. - * @throws DatabaseOperationException If an error occurs while creating the channel. - */ - public static function createChannel(PeerAddress|string $callingPeer, PeerAddress|string $receivingPeer, - string $signatureUuid, string $encryptionPublicKey, string $transportEncryptionAlgorithm, - ?string $uuid=null - ): string - { - if(is_string($callingPeer)) - { - $callingPeer = PeerAddress::fromAddress($callingPeer); - } - if(is_string($receivingPeer)) - { - $receivingPeer = PeerAddress::fromAddress($receivingPeer); - } - - - if(!Cryptography::validatePublicEncryptionKey($encryptionPublicKey)) - { - throw new InvalidArgumentException('Invalid encryption public key provided'); - } - - $transportEncryptionAlgorithm = strtolower($transportEncryptionAlgorithm); - if(!Cryptography::isSupportedAlgorithm($transportEncryptionAlgorithm)) - { - throw new InvalidArgumentException('Unsupported transport encryption algorithm'); - } - - if($uuid === null) - { - $uuid = UuidV4::v4()->toRfc4122(); - } - - try - { - $stmt = Database::getConnection()->prepare('INSERT INTO encryption_channels (uuid, calling_peer, calling_signature_uuid, calling_encryption_public_key, receiving_peer, transport_encryption_algorithm) VALUES (:uuid, :calling_peer, :calling_signature_uuid, :calling_encryption_public_key, :receiving_peer, :transport_encryption_algorithm)'); - $stmt->bindParam(':uuid', $uuid); - $callingPeerAddress = $callingPeer->getAddress(); - $stmt->bindParam(':calling_peer', $callingPeerAddress); - $stmt->bindParam(':calling_signature_uuid', $signatureUuid); - $stmt->bindParam(':calling_encryption_public_key', $encryptionPublicKey); - $receivingPeerAddress = $receivingPeer->getAddress(); - $stmt->bindParam(':receiving_peer', $receivingPeerAddress); - $stmt->bindParam(':transport_encryption_algorithm', $transportEncryptionAlgorithm); - $stmt->execute(); - } - catch(PDOException $e) - { - throw new DatabaseOperationException('Failed to create the encryption channel', $e); - } - - return $uuid; - } - - /** - * Retrieves the incoming encryption channels for the specified peer. - * - * @param string|PeerAddress $peerAddress The peer to retrieve the channels for. - * @param int $limit The maximum number of channels to retrieve. - * @param int $page The page of channels to retrieve. - * @return EncryptionChannelRecord[] The incoming channels for the peer. - * @throws DatabaseOperationException If an error occurs while retrieving the channels. - */ - public static function getChannels(string|PeerAddress $peerAddress, int $limit=100, int $page=0): array - { - if($peerAddress instanceof PeerAddress) - { - $peerAddress = $peerAddress->getAddress(); - } - - try - { - $stmt = Database::getConnection()->prepare('SELECT * FROM encryption_channels WHERE calling_peer=:address OR receiving_peer=:address LIMIT :limit OFFSET :offset'); - $stmt->bindParam(':address', $peerAddress); - $stmt->bindParam(':limit', $limit, PDO::PARAM_INT); - $offset = $page * $limit; - $stmt->bindParam(':offset', $offset, PDO::PARAM_INT); - $stmt->execute(); - $results = $stmt->fetchAll(); - - $channels = []; - foreach($results as $result) - { - $channels[] = new EncryptionChannelRecord($result); - } - - return $channels; - } - catch(PDOException $e) - { - throw new DatabaseOperationException('Failed to retrieve the encryption channels', $e); - } - } - - /** - * Retrieves the incoming encryption channels for the specified peer. - * - * @param string|PeerAddress $peerAddress The peer to retrieve the channels for. - * @param int $limit The maximum number of channels to retrieve. - * @param int $page The page of channels to retrieve. - * @return EncryptionChannelRecord[] The incoming channels for the peer. - * @throws DatabaseOperationException If an error occurs while retrieving the channels. - */ - public static function getRequests(string|PeerAddress $peerAddress, int $limit=100, int $page=0): array - { - if($peerAddress instanceof PeerAddress) - { - $peerAddress = $peerAddress->getAddress(); - } - - try - { - $stmt = Database::getConnection()->prepare('SELECT * FROM encryption_channels WHERE receiving_peer=:address AND state=:state LIMIT :limit OFFSET :offset'); - $stmt->bindParam(':address', $peerAddress); - $state = EncryptionChannelState::AWAITING_RECEIVER->value; - $stmt->bindParam(':state', $state); - $stmt->bindParam(':limit', $limit, PDO::PARAM_INT); - $offset = $page * $limit; - $stmt->bindParam(':offset', $offset, PDO::PARAM_INT); - $stmt->execute(); - $results = $stmt->fetchAll(); - - $channels = []; - foreach($results as $result) - { - $channels[] = new EncryptionChannelRecord($result); - } - - return $channels; - } - catch(PDOException $e) - { - throw new DatabaseOperationException('Failed to retrieve the encryption channels', $e); - } - } - - /** - * Retrieves the incoming encryption channels for the specified peer. - * - * @param string|PeerAddress $peerAddress The peer to retrieve the channels for. - * @param int $limit The maximum number of channels to retrieve. - * @param int $page The page of channels to retrieve. - * @return EncryptionChannelRecord[] The incoming channels for the peer. - * @throws DatabaseOperationException If an error occurs while retrieving the channels. - */ - public static function getIncomingChannels(string|PeerAddress $peerAddress, int $limit=100, int $page=0): array - { - if($peerAddress instanceof PeerAddress) - { - $peerUuid = $peerAddress->getAddress(); - } - - try - { - $stmt = Database::getConnection()->prepare('SELECT * FROM encryption_channels WHERE receiving_peer=:address LIMIT :limit OFFSET :offset'); - $stmt->bindParam(':address', $peerUuid); - $stmt->bindParam(':limit', $limit, PDO::PARAM_INT); - $offset = $page * $limit; - $stmt->bindParam(':offset', $offset, PDO::PARAM_INT); - $stmt->execute(); - $results = $stmt->fetchAll(); - - $channels = []; - foreach($results as $result) - { - $channels[] = new EncryptionChannelRecord($result); - } - - return $channels; - } - catch(PDOException $e) - { - throw new DatabaseOperationException('Failed to retrieve the encryption channels', $e); - } - } - - /** - * Retrieves the outgoing channels for the specified peer. - * - * @param string|PeerAddress $peerAddress The peer to retrieve the channels for. - * @param int $limit The maximum number of channels to retrieve. - * @param int $page The page of channels to retrieve. - * @return EncryptionChannelRecord[] The outgoing channels for the specified peer. - * @throws DatabaseOperationException If an error occurs while retrieving the channels. - */ - public static function getOutgoingChannels(string|PeerAddress $peerAddress, int $limit=100, int $page=0): array - { - if($peerAddress instanceof PeerAddress) - { - $peerAddress = $peerAddress->getAddress(); - } - - try - { - $stmt = Database::getConnection()->prepare('SELECT * FROM encryption_channels WHERE calling_peer=:address LIMIT :limit OFFSET :offset'); - $stmt->bindParam(':address', $peerAddress); - $stmt->bindParam(':limit', $limit, PDO::PARAM_INT); - $offset = $page * $limit; - $stmt->bindParam(':offset', $offset, PDO::PARAM_INT); - $stmt->execute(); - $results = $stmt->fetchAll(); - - $channels = []; - foreach($results as $result) - { - $channels[] = new EncryptionChannelRecord($result); - } - - return $channels; - } - catch(PDOException $e) - { - throw new DatabaseOperationException('Failed to retrieve the encryption channels', $e); - } - } - - /** - * Declines the encryption channel with the specified UUID. - * - * @param string $channelUuid The UUID of the channel to decline. - * @throws DatabaseOperationException If an error occurs while declining the channel. - */ - public static function declineChannel(string $channelUuid): void - { - try - { - $stmt = Database::getConnection()->prepare('UPDATE encryption_channels SET state=:state WHERE uuid=:uuid'); - $state = EncryptionChannelState::DECLINED->value; - $stmt->bindParam(':state', $state); - $stmt->bindParam(':uuid', $channelUuid); - $stmt->execute(); - } - catch(PDOException $e) - { - throw new DatabaseOperationException('Failed to decline the encryption channel', $e); - } - } - - /** - * Accepts the encryption channel with the specified UUID. - * - * @param string $channelUuid The UUID of the channel to accept. - * @param string $signatureUuid The UUID of the signature used to create the channel. - * @param string $encryptionPublicKey The public key used for encryption. - * @param string $encryptedTransportEncryptionKey The encrypted transport encryption key. - * @throws DatabaseOperationException If an error occurs while accepting the channel. - */ - public static function acceptChannel(string $channelUuid, string $signatureUuid, string $encryptionPublicKey, string $encryptedTransportEncryptionKey): void - { - try - { - $stmt = Database::getConnection()->prepare('UPDATE encryption_channels SET state=:state, receiving_signature_uuid=:receiving_signature_uuid, receiving_encryption_public_key=:receiving_encryption_public_key, transport_encryption_algorithm=:transport_encryption_algorithm, transport_encryption_key=:transport_encryption_key WHERE uuid=:uuid'); - $state = EncryptionChannelState::OPENED->value; - $stmt->bindParam(':state', $state); - $stmt->bindParam(':receiving_signature_uuid', $signatureUuid); - $stmt->bindParam(':receiving_encryption_public_key', $encryptionPublicKey); - $stmt->bindParam(':transport_encryption_key', $encryptedTransportEncryptionKey); - $stmt->bindParam(':uuid', $channelUuid); - $stmt->execute(); - } - catch(PDOException $e) - { - throw new DatabaseOperationException('Failed to accept the encryption channel', $e); - } - } - - /** - * Retrieves the encryption channel with the specified UUID. - * - * @param string $channelUuid The UUID of the channel to retrieve. - * @return EncryptionChannelRecord|null The record of the encryption channel. Null if the channel does not exist. - * @throws DatabaseOperationException If an error occurs while retrieving the channel. - */ - public static function getChannel(string $channelUuid): ?EncryptionChannelRecord - { - try - { - $stmt = Database::getConnection()->prepare('SELECT * FROM encryption_channels WHERE uuid=:uuid'); - $stmt->bindParam(':uuid', $channelUuid); - $stmt->execute(); - $result = $stmt->fetch(); - - if($result === false) - { - return null; - } - - return new EncryptionChannelRecord($result); - } - catch(PDOException $e) - { - throw new DatabaseOperationException('Failed to retrieve the encryption channel', $e); - } - } - - /** - * Deletes the encryption channel with the specified UUID. - * - * @param string $channelUuid The UUID of the channel to delete. - * @return void - * @throws DatabaseOperationException If an error occurs while deleting the channel. - */ - public static function deleteChannel(string $channelUuid): void - { - try - { - $stmt = Database::getConnection()->prepare('DELETE FROM encryption_channels WHERE uuid=:uuid'); - $stmt->bindParam(':uuid', $channelUuid); - $stmt->execute(); - } - catch(PDOException $e) - { - throw new DatabaseOperationException('Failed to delete the encryption channel', $e); - } - } - - /** - * Updates the state of the encryption channel with the specified UUID. - * - * @param string $channelUuid The UUID of the channel to update. - * @return EncryptionChannelState The current state of the channel. - * @throws DatabaseOperationException If an error occurs while updating the channel state. - */ - public static function getChannelState(string $channelUuid): EncryptionChannelState - { - try - { - $stmt = Database::getConnection()->prepare('SELECT state FROM encryption_channels WHERE uuid=:uuid'); - $stmt->bindParam(':uuid', $channelUuid); - $stmt->execute(); - - return EncryptionChannelState::from($stmt->fetchColumn()); - } - catch(PDOException $e) - { - throw new DatabaseOperationException('Failed to retrieve the encryption channel state', $e); - } - } - - /** - * Updates the state of the encryption channel with the specified UUID. - * - * @param string $channelUuid The UUID of the channel to update. - * @param EncryptionChannelState $state The new state of the channel. - * @return void The current state of the channel. - * @throws DatabaseOperationException If an error occurs while updating the channel state. - */ - public static function updateChannelState(string $channelUuid, EncryptionChannelState $state): void - { - try - { - $stmt = Database::getConnection()->prepare('UPDATE encryption_channels SET state=:state WHERE uuid=:uuid'); - $state = $state->value; - $stmt->bindParam(':state', $state); - $stmt->bindParam(':uuid', $channelUuid); - $stmt->execute(); - } - catch(PDOException $e) - { - throw new DatabaseOperationException('Failed to update the encryption channel state', $e); - } - } - - /** - * Checks if a channel with the provided UUID exists. - * - * @param string $uuid The UUID of the channel to check. - * @return bool True if the channel exists, False otherwise. - * @throws DatabaseOperationException If an error occurs while checking the channel. - */ - public static function channelExists(string $uuid): bool - { - try - { - $stmt = Database::getConnection()->prepare('SELECT COUNT(*) FROM encryption_channels WHERE uuid=:uuid'); - $stmt->bindParam(':uuid', $uuid); - $stmt->execute(); - - return $stmt->fetchColumn() > 0; - } - catch(PDOException $e) - { - throw new DatabaseOperationException('There was an error while trying to check if the channel UUID exists', $e); - } - } - - /** - * Sends data to the specified channel. - * - * @param string $channelUuid The UUID of the channel to send the data to. - * @param string $message The message to send. - * @param string $signature The signature of the message. - * @param CommunicationRecipientType $recipient The recipient type. - * @return string The UUID of the sent message. - * @throws DatabaseOperationException If an error occurs while sending the message. - */ - public static function sendData(string $channelUuid, string $message, string $signature, CommunicationRecipientType $recipient): string - { - $uuid = UuidV4::v4()->toRfc4122(); - - try - { - $stmt = Database::getConnection()->prepare('INSERT INTO channel_com (uuid, channel_uuid, recipient, message, signature) VALUES (:uuid, :channel_uuid, :recipient, :message, :signature)'); - $stmt->bindParam(':uuid', $uuid); - $stmt->bindParam(':channel_uuid', $channelUuid); - $recipient = $recipient->value; - $stmt->bindParam(':recipient', $recipient); - $stmt->bindParam(':message', $message); - $stmt->bindParam(':signature', $signature); - - $stmt->execute(); - } - catch(PDOException $e) - { - throw new DatabaseOperationException('Failed to send the message', $e); - } - - return $uuid; - } - - /** - * Retrieves the messages for the specified channel and recipient. - * - * @param string $channelUuid The UUID of the channel to retrieve the messages for. - * @param CommunicationRecipientType $recipient The recipient type to retrieve the messages for. - * @return ChannelMessageRecord[] The messages for the specified channel and recipient. - * @throws DatabaseOperationException If an error occurs while retrieving the messages. - */ - public static function receiveData(string $channelUuid, CommunicationRecipientType $recipient): array - { - try - { - $stmt = Database::getConnection()->prepare('SELECT * FROM channel_com WHERE channel_uuid=:channel_uuid AND recipient=:recipient AND received=0 ORDER BY timestamp'); - $stmt->bindParam(':channel_uuid', $channelUuid); - $recipient = $recipient->value; - $stmt->bindParam(':recipient', $recipient); - $stmt->execute(); - $results = $stmt->fetchAll(); - - $messages = []; - foreach($results as $result) - { - $messages[] = new ChannelMessageRecord($result); - } - - return $messages; - } - catch(PDOException $e) - { - throw new DatabaseOperationException('Failed to retrieve the messages', $e); - } - } - - /** - * Retrieves the message with the specified UUID. - * - * @param string $channelUuid The UUID of the channel to retrieve the message for. - * @param string $messageUuid The UUID of the message to retrieve. - * @return ChannelMessageRecord|null The message with the specified UUID. Null if the message does not exist. - * @throws DatabaseOperationException If an error occurs while retrieving the message. - */ - public static function getData(string $channelUuid, string $messageUuid): ?ChannelMessageRecord - { - try - { - $stmt = Database::getConnection()->prepare('SELECT * FROM channel_com WHERE channel_uuid=:channel_uuid AND uuid=:uuid'); - $stmt->bindParam(':channel_uuid', $channelUuid); - $stmt->bindParam(':uuid', $messageUuid); - $stmt->execute(); - $result = $stmt->fetch(); - - if($result === false) - { - return null; - } - - return new ChannelMessageRecord($result); - } - catch(PDOException $e) - { - throw new DatabaseOperationException('Failed to retrieve the message', $e); - } - } - - /** - * Imports the specified message data into the database. - * - * @param ChannelMessageRecord $message The message data to import. - * @throws DatabaseOperationException If an error occurs while importing the message. - */ - public static function importData(ChannelMessageRecord $message): void - { - - try - { - $stmt = Database::getConnection()->prepare('INSERT INTO channel_com (uuid, channel_uuid, recipient, message, signature, received, timestamp) VALUES (:uuid, :channel_uuid, :recipient, :message, :signature, :received, :timestamp)'); - $uuid = $message->getUuid(); - $stmt->bindParam(':uuid', $uuid); - $channelUuid = $message->getChannelUuid(); - $stmt->bindParam(':channel_uuid', $channelUuid); - $recipient = $message->getRecipient()->value; - $stmt->bindParam(':recipient', $recipient); - $messageData = $message->getMessage(); - $stmt->bindParam(':message', $messageData); - $signature = $message->getSignature(); - $stmt->bindParam(':signature', $signature); - $received = $message->isReceived() ? 1 : 0; - $stmt->bindParam(':received', $received); - $timestamp = $message->getTimestamp(); - $stmt->bindParam(':timestamp', $timestamp); - $stmt->execute(); - } - catch(PDOException $e) - { - throw new DatabaseOperationException('Failed to import the message', $e); - } - } - - /** - * Marks the message with the specified UUID as received. - * - * @param string $uuid The UUID of the message to mark as received. - * @throws DatabaseOperationException If an error occurs while marking the message as received. - */ - public static function markDataAsReceived(string $uuid): void - { - try - { - $stmt = Database::getConnection()->prepare('UPDATE channel_com SET received=1 WHERE uuid=:uuid'); - $stmt->bindParam(':uuid', $uuid); - $stmt->execute(); - } - catch(PDOException $e) - { - throw new DatabaseOperationException('Failed to mark the message as received', $e); - } - } - - /** - * Deletes the message with the specified UUID. - * - * @param string $uuid The UUID of the message to delete. - * @throws DatabaseOperationException If an error occurs while deleting the message. - */ - public static function deleteData(string $uuid): void - { - try - { - $stmt = Database::getConnection()->prepare('DELETE FROM channel_com WHERE uuid=:uuid'); - $stmt->bindParam(':uuid', $uuid); - $stmt->execute(); - } - catch(PDOException $e) - { - throw new DatabaseOperationException('Failed to delete the message', $e); - } - } } \ No newline at end of file diff --git a/src/Socialbox/Objects/Database/ChannelMessageRecord.php b/src/Socialbox/Objects/Database/ChannelMessageRecord.php deleted file mode 100644 index 33f5d24..0000000 --- a/src/Socialbox/Objects/Database/ChannelMessageRecord.php +++ /dev/null @@ -1,160 +0,0 @@ -uuid = $data['uuid']; - $this->channelUuid = $data['channel_uuid']; - $this->recipient = CommunicationRecipientType::from($data['recipient']); - $this->message = $data['message']; - $this->signature = $data['signature']; - $this->received = (bool)$data['received']; - - if($data['timestamp'] instanceof DateTime) - { - $this->timestamp = $data['timestamp']; - } - elseif(is_int($data['timestamp'])) - { - $this->timestamp = (new DateTime())->setTimestamp($data['timestamp']); - } - elseif(is_string($data['timestamp'])) - { - $this->timestamp = new DateTime($data['timestamp']); - } - else - { - throw new InvalidArgumentException('Invalid timestamp type, got ' . gettype($data['timestamp'])); - } - } - - /** - * Returns the unique identifier for the message. - * - * @return string - */ - public function getUuid(): string - { - return $this->uuid; - } - - /** - * Returns the UUID of the channel that the message belongs to. - * - * @return string - */ - public function getChannelUuid(): string - { - return $this->channelUuid; - } - - /** - * Returns the recipient type of the message. - * - * @return CommunicationRecipientType - */ - public function getRecipient(): CommunicationRecipientType - { - return $this->recipient; - } - - /** - * Returns the message content. - * - * @return string - */ - public function getMessage(): string - { - return $this->message; - } - - /** - * Returns the signature of the message. - * - * @return string - */ - public function getSignature(): string - { - return $this->signature; - } - - /** - * Returns whether the message has been received. - * - * @return bool - */ - public function isReceived(): bool - { - return $this->received; - } - - /** - * Returns the timestamp of the message. - * - * @return DateTime - */ - public function getTimestamp(): DateTime - { - return $this->timestamp; - } - - /** - * @inheritDoc - */ - public static function fromArray(array $data): ChannelMessageRecord - { - return new self($data); - } - - /** - * @inheritDoc - */ - public function toArray(): array - { - return [ - 'uuid' => $this->uuid, - 'channel_uuid' => $this->channelUuid, - 'recipient' => $this->recipient->value, - 'message' => $this->message, - 'signature' => $this->signature, - 'received' => $this->received, - 'timestamp' => $this->timestamp->format('Y-m-d H:i:s') - ]; - } - - - public function toStandard(): EncryptionChannelMessage - { - return new EncryptionChannelMessage($this->toArray()); - } - } \ No newline at end of file diff --git a/src/Socialbox/Objects/Database/EncryptionChannelRecord.php b/src/Socialbox/Objects/Database/EncryptionChannelRecord.php deleted file mode 100644 index 49c44b9..0000000 --- a/src/Socialbox/Objects/Database/EncryptionChannelRecord.php +++ /dev/null @@ -1,256 +0,0 @@ -uuid = $data['uuid']; - - if(!isset($data['calling_peer'])) - { - throw new InvalidArgumentException('Missing property calling_peer'); - } - else - { - if(is_string($data['calling_peer'])) - { - $this->callingPeer = PeerAddress::fromAddress($data['calling_peer']); - } - elseif($data['calling_peer'] instanceof PeerAddress) - { - $this->callingPeer = $data['calling_peer']; - } - else - { - throw new InvalidArgumentException('Unexpected calling_peer type, got ' . gettype($data['calling_peer'])); - } - } - - $this->callingSignatureUuid = $data['calling_signature_uuid']; - $this->callingEncryptionPublicKey = $data['calling_encryption_public_key']; - - if(!isset($data['receiving_peer'])) - { - throw new InvalidArgumentException('Missing property receiving_peer'); - } - else - { - if(is_string($data['receiving_peer'])) - { - $this->receivingPeer = PeerAddress::fromAddress($data['receiving_peer']); - } - elseif($data['receiving_peer'] instanceof PeerAddress) - { - $this->receivingPeer = $data['receiving_peer']; - } - else - { - throw new InvalidArgumentException('Unexpected receiving_peer type, got ' . gettype($data['receiving_peer'])); - } - } - - $this->receivingSignatureUuid = $data['receiving_signature_uuid'] ?? null; - $this->receivingEncryptionPublicKey = $data['receiving_encryption_public_key'] ?? null; - $this->transportEncryptionAlgorithm = $data['transport_encryption_algorithm']; - $this->transportEncryptionKey = $data['transport_encryption_key'] ?? null; - $this->state = EncryptionChannelState::tryFrom($data['state']) ?? EncryptionChannelState::ERROR; - - if(!isset($data['created'])) - { - throw new InvalidArgumentException('Missing property created'); - } - else - { - if(is_string($data['created'])) - { - $this->created = new DateTime($data['created']); - } - elseif(is_int($data['created'])) - { - $this->created = (new DateTime())->setTimestamp($data['created']); - } - elseif($data['created'] instanceof DateTime) - { - $this->created = $data['created']; - } - else - { - throw new InvalidArgumentException('Unexpected created type, got ' . gettype($data['created'])); - } - } - } - - /** - * Returns the Unique Universal Identifier for the encryption record - * - * @return string - */ - public function getUuid(): string - { - return $this->uuid; - } - - /** - * Returns the address of the calling peer - * - * @return PeerAddress - */ - public function getCallingPeer(): PeerAddress - { - return $this->callingPeer; - } - - /** - * Returns the UUID of the signing keypair that the caller is using - * - * @return string - */ - public function getCallingSignatureUuid(): string - { - return $this->callingSignatureUuid; - } - - /** - * Returns the public key of the encryption keypair that the caller is using - * - * @return string - */ - public function getCallingEncryptionPublicKey(): string - { - return $this->callingEncryptionPublicKey; - } - - /** - * Returns the address of the receiving peer - * - * @return PeerAddress - */ - public function getReceivingPeer(): PeerAddress - { - return $this->receivingPeer; - } - - /** - * Returns the UUID of the signing keypair that the receiver is using - * - * @return string|null - */ - public function getReceivingSignatureUuid(): ?string - { - return $this->receivingSignatureUuid; - } - - /** - * Returns the public key of the encryption keypair that the receiver is using - * - * @return string|null - */ - public function getReceivingEncryptionPublicKey(): ?string - { - return $this->receivingEncryptionPublicKey; - } - - /** - * Returns the algorithm used for transport encryption - * - * @return string - */ - public function getTransportEncryptionAlgorithm(): string - { - return $this->transportEncryptionAlgorithm; - } - - /** - * Returns the key used for transport encryption - * - * @return string|null - */ - public function getTransportEncryptionKey(): ?string - { - return $this->transportEncryptionKey; - } - - /** - * Returns the current state of the encryption channel - * - * @return EncryptionChannelState - */ - public function getState(): EncryptionChannelState - { - return $this->state; - } - - /** - * Returns the creation date of the encryption channel - * - * @return DateTime - */ - public function getCreated(): DateTime - { - return $this->created; - } - - /** - * @inheritDoc - */ - public static function fromArray(array $data): EncryptionChannelRecord - { - return new self($data); - } - - /** - * @inheritDoc - */ - public function toArray(): array - { - return [ - 'uuid' => $this->uuid, - 'calling_peer' => $this->callingPeer->getAddress(), - 'calling_signature_uuid' => $this->callingSignatureUuid, - 'calling_encryption_public_key' => $this->callingEncryptionPublicKey, - 'receiving_peer' => $this->receivingPeer->getAddress(), - 'receiving_signature_uuid' => $this->receivingSignatureUuid, - 'receiving_encryption_public_key' => $this->receivingEncryptionPublicKey, - 'transport_encryption_algorithm' => $this->transportEncryptionAlgorithm, - 'transport_encryption_key' => $this->transportEncryptionKey, - 'state' => $this->state->value, - 'created' => $this->created->format('Y-m-d H:i:s') - ]; - } - - /** - * Converts the Encryption Channel Record to a Standard Encryption Channel - * - * @return EncryptionChannel - */ - public function toStandard(): EncryptionChannel - { - return new EncryptionChannel($this->toArray()); - } - } \ No newline at end of file diff --git a/src/Socialbox/Objects/Standard/EncryptionChannel.php b/src/Socialbox/Objects/Standard/EncryptionChannel.php deleted file mode 100644 index f0df342..0000000 --- a/src/Socialbox/Objects/Standard/EncryptionChannel.php +++ /dev/null @@ -1,222 +0,0 @@ -uuid = $data['uuid']; - $this->callingPeer = $data['calling_peer']; - $this->callingSignatureUuid = $data['calling_signature_uuid']; - $this->callingSignaturePublicKey = $data['calling_signature_public_key']; - $this->callingEncryptionPublicKey = $data['calling_encryption_public_key']; - $this->receivingPeer = $data['receiving_peer']; - $this->receivingSignatureUuid = $data['receiving_signature_uuid']; - $this->receivingSignaturePublicKey = $data['receiving_signature_public_key']; - $this->receivingEncryptionPublicKey = $data['receiving_encryption_public_key']; - $this->transportEncryptionAlgorithm = $data['transport_encryption_algorithm']; - $this->transportEncryptionKey = $data['transport_encryption_key']; - $this->state = EncryptionChannelState::from($data['state']); - - if($data['created'] instanceof DateTime) - { - $this->created = $data['created']->getTimestamp(); - } - elseif(is_int($data['created'])) - { - $this->created = $data['created']; - } - elseif(is_string($data['created'])) - { - $this->created = strtotime($data['created']) ?: throw new InvalidArgumentException('Invalid date format'); - } - else - { - throw new InvalidArgumentException('Invalid date format, got type: ' . gettype($data['created'])); - } - } - - /** - * Returns the Unique Universal Identifier of the Encryption Channel - * - * @return string The UUID of the Encryption Channel - */ - public function getUuid(): string - { - return $this->uuid; - } - - /** - * Returns the Peer address that initiated the Encryption Channel - * - * @return string The Peer address that initiated the Encryption Channel - */ - public function getCallingPeer(): string - { - return $this->callingPeer; - } - - /** - * Returns the Unique Universal Identifier of the Signature used by the calling Peer - * - * @return string The UUID of the Signature used by the calling Peer - */ - public function getCallingSignatureUuid(): string - { - return $this->callingSignatureUuid; - } - - /** - * Returns the Public Key of the Signature used by the calling Peer - * - * @return string The Public Key of the Signature used by the calling Peer - */ - public function getCallingSignaturePublicKey(): string - { - return $this->callingSignaturePublicKey; - } - - /** - * Returns the Public Key of the Encryption used by the calling Peer - * - * @return string The Public Key of the Encryption used by the calling Peer - */ - public function getCallingEncryptionPublicKey(): string - { - return $this->callingEncryptionPublicKey; - } - - /** - * Returns the Peer address that received the Encryption Channel - * - * @return string The Peer address that received the Encryption Channel - */ - public function getReceivingPeer(): string - { - return $this->receivingPeer; - } - - /** - * Returns the Unique Universal Identifier of the Signature used by the receiving Peer - * - * @return string|null The UUID of the Signature used by the receiving Peer, or null if not set - */ - public function getReceivingSignatureUuid(): ?string - { - return $this->receivingSignatureUuid; - } - - /** - * Returns the Public Key of the Signature used by the receiving Peer - * - * @return string|null The Public Key of the Signature used by the receiving Peer, or null if not set - */ - public function getReceivingSignaturePublicKey(): ?string - { - return $this->receivingSignaturePublicKey; - } - - /** - * Returns the Public Key of the Encryption used by the receiving Peer - * - * @return string|null The Public Key of the Encryption used by the receiving Peer, or null if not set - */ - public function getReceivingEncryptionPublicKey(): ?string - { - return $this->receivingEncryptionPublicKey; - } - - /** - * Returns the Algorithm used for the Transport Encryption - * - * @return string The Algorithm used for the Transport Encryption - */ - public function getTransportEncryptionAlgorithm(): string - { - return $this->transportEncryptionAlgorithm; - } - - /** - * Returns the Key used for the Transport Encryption - * - * @return string|null The Key used for the Transport Encryption, or null if not set - */ - public function getTransportEncryptionKey(): ?string - { - return $this->transportEncryptionKey; - } - - /** - * Returns the State of the Encryption Channel - * - * @return EncryptionChannelState The State of the Encryption Channel - */ - public function getState(): EncryptionChannelState - { - return $this->state; - } - - /** - * Returns the Unix Timestamp of the creation date of the Encryption Channel - * - * @return int The Unix Timestamp of the creation date of the Encryption Channel - */ - public function getCreated(): int - { - return $this->created; - } - - /** - * @inheritDoc - */ - public static function fromArray(array $data): EncryptionChannel - { - return new self($data); - } - - /** - * @inheritDoc - */ - public function toArray(): array - { - return [ - 'uuid' => $this->uuid, - 'calling_peer' => $this->callingPeer, - 'calling_signature_uuid' => $this->callingSignatureUuid, - 'calling_encryption_public_key' => $this->callingEncryptionPublicKey, - 'receiving_peer' => $this->receivingPeer, - 'receiving_signature_uuid' => $this->receivingSignatureUuid, - 'receiving_signature_public_key' => $this->receivingSignaturePublicKey, - 'receiving_encryption_public_key' => $this->receivingEncryptionPublicKey, - 'transport_encryption_algorithm' => $this->transportEncryptionAlgorithm, - 'transport_encryption_key' => $this->transportEncryptionKey, - 'state' => $this->state->value, - 'created' => $this->created - ]; - } - } \ No newline at end of file diff --git a/src/Socialbox/Objects/Standard/EncryptionChannelMessage.php b/src/Socialbox/Objects/Standard/EncryptionChannelMessage.php deleted file mode 100644 index ccd8573..0000000 --- a/src/Socialbox/Objects/Standard/EncryptionChannelMessage.php +++ /dev/null @@ -1,145 +0,0 @@ -uuid = $data['uuid']; - $this->channelUuid = $data['channel_uuid']; - $this->recipient = CommunicationRecipientType::from($data['recipient']); - $this->message = $data['message']; - $this->signature = $data['signature']; - $this->received = (bool)$data['received']; - - if($data['timestamp'] instanceof DateTime) - { - $this->timestamp = $data['timestamp']->getTimestamp(); - } - elseif(is_int($data['timestamp'])) - { - $this->timestamp = $data['timestamp']; - } - elseif(is_string($data['timestamp'])) - { - $this->timestamp = strtotime($data['timestamp']) ?: throw new InvalidArgumentException('Invalid date format'); - } - else - { - throw new InvalidArgumentException('Invalid date format, got type: ' . gettype($data['timestamp'])); - } - } - - /** - * The Unique Universal Identifier of the message. - * - * @return string The UUID of the message. - */ - public function getUuid(): string - { - return $this->uuid; - } - - /** - * The Unique Universal Identifier of the channel. - * - * @return string The UUID of the channel. - */ - public function getChannelUuid(): string - { - return $this->channelUuid; - } - - /** - * The recipient of the message. - * - * @return CommunicationRecipientType The recipient of the message. - */ - public function getRecipient(): CommunicationRecipientType - { - return $this->recipient; - } - - /** - * The encrypted message. - * - * @return string The message. - */ - public function getMessage(): string - { - return $this->message; - } - - /** - * The signature of the decrypted message. - * - * @return string The signature of the message. - */ - public function getSignature(): string - { - return $this->signature; - } - - /** - * Whether the message has been received. - * - * @return bool Whether the message has been received. - */ - public function isReceived(): bool - { - return $this->received; - } - - /** - * The timestamp of the message. - * - * @return int The timestamp of the message. - */ - public function getTimestamp(): int - { - return $this->timestamp; - } - - /** - * @inheritDoc - */ - public static function fromArray(array $data): EncryptionChannelMessage - { - return new self($data); - } - - /** - * @inheritDoc - */ - public function toArray(): array - { - return [ - 'uuid' => $this->uuid, - 'channel_uuid' => $this->channelUuid, - 'recipient' => $this->recipient->value, - 'message' => $this->message, - 'signature' => $this->signature, - 'received' => $this->received, - 'timestamp' => $this->timestamp - ]; - } - } \ No newline at end of file