%PDF- %PDF-
Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/circles/lib/Tools/Model/ |
Current File : //www/varak.net/nextcloud.varak.net/apps_old/apps/circles/lib/Tools/Model/NCSignedRequest.php |
<?php declare(strict_types=1); /** * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ namespace OCA\Circles\Tools\Model; use JsonSerializable; use OCP\IRequest; class NCSignedRequest implements JsonSerializable { /** @var string */ private $body = ''; /** @var int */ private $time = 0; /** @var IRequest */ private $incomingRequest; /** @var NCRequest */ private $outgoingRequest; /** @var string */ private $origin = ''; /** @var string */ private $digest = ''; /** @var SimpleDataStore */ private $signatureHeader; /** @var string */ private $host = ''; /** @var string */ private $clearSignature = ''; /** @var string */ private $signedSignature = ''; /** @var NCSignatory */ private $signatory; public function __construct(string $body = '') { $this->setBody($body); } /** * IRequest of the incoming request * incoming * * @return IRequest */ public function getIncomingRequest(): IRequest { return $this->incomingRequest; } /** * @param IRequest $request * * @return NCSignedRequest */ public function setIncomingRequest(IRequest $request): self { $this->incomingRequest = $request; return $this; } /** * NCRequest of the outgoing request * outgoing * * @param NCRequest $request * * @return NCSignedRequest */ public function setOutgoingRequest(NCRequest $request): self { $this->outgoingRequest = $request; return $this; } /** * @return NCRequest */ public function getOutgoingRequest(): NCRequest { return $this->outgoingRequest; } /** * Body content of the request * incoming/outgoing * * @return string */ public function getBody(): string { return $this->body; } /** * @param string $body * * @return self */ public function setBody(string $body): self { $this->body = $body; $this->setDigest('SHA-256=' . base64_encode(hash("sha256", utf8_encode($body), true))); return $this; } /** * Timestamp of the request * incoming (outgoing ?) * * @return int */ public function getTime(): int { return $this->time; } /** * @param int $time * * @return self */ public function setTime(int $time): self { $this->time = $time; return $this; } /** * Origin of the request, based on the keyId * incoming * * @return string */ public function getOrigin(): string { return $this->origin; } /** * @param string $origin * * @return self */ public function setOrigin(string $origin): self { $this->origin = $origin; return $this; } /** * @return string */ public function getDigest(): string { return $this->digest; } /** * @param string $digest * * @return $this */ public function setDigest(string $digest): self { $this->digest = $digest; return $this; } /** * Data from the 'Signature' header * incoming/outgoing * * @return SimpleDataStore */ public function getSignatureHeader(): SimpleDataStore { return $this->signatureHeader; } /** * @param SimpleDataStore $signatureHeader * * @return self */ public function setSignatureHeader(SimpleDataStore $signatureHeader): self { $this->signatureHeader = $signatureHeader; return $this; } /** * _Clear_ value of the Signature. * incoming/outgoing * * - estimated signature on incoming request * - generated signature on outgoing request * * @param string $clearSignature * * @return NCSignedRequest */ public function setClearSignature(string $clearSignature): self { $this->clearSignature = $clearSignature; return $this; } /** * @return string */ public function getClearSignature(): string { return $this->clearSignature; } /** * _Signed_ value of the signature. * /!\ base64_encoded, not RAW /!\ * * incoming/outgoing * * @param string $signedSignature * * @return self */ public function setSignedSignature(string $signedSignature): self { $this->signedSignature = $signedSignature; return $this; } /** * @return string */ public function getSignedSignature(): string { return $this->signedSignature; } /** * Host/Address to be used in the signature. * incoming/outgoing * * - incoming should set the local address * - outgoing should set the recipient address * * @param string $host * * @return NCSignedRequest */ public function setHost(string $host): self { $this->host = $host; return $this; } /** * @return string */ public function getHost(): string { return $this->host; } /** * Signatory used to sign the request * incoming/outgoing * * @param NCSignatory $signatory */ public function setSignatory(NCSignatory $signatory): void { $this->signatory = $signatory; } /** * @return NCSignatory */ public function getSignatory(): NCSignatory { return $this->signatory; } /** * @return bool */ public function hasSignatory(): bool { return ($this->signatory !== null); } /** * @return array */ public function jsonSerialize(): array { return [ 'body' => $this->getBody(), 'time' => $this->getTime(), 'incomingRequest' => ($this->incomingRequest !== null), 'outgoingRequest' => $this->outgoingRequest !== null ? $this->getOutgoingRequest() : false, 'origin' => $this->getOrigin(), 'digest' => $this->getDigest(), 'signatureHeader' => ($this->signatureHeader !== null) ? $this->getSignatureHeader() : false, 'host' => $this->getHost(), 'clearSignature' => $this->getClearSignature(), 'signedSignature' => base64_encode($this->getSignedSignature()), 'signatory' => ($this->hasSignatory()) ? $this->getSignatory() : false, ]; } }