%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/circles/lib/Tools/Model/
Upload File :
Create Path :
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,
		];
	}
}

Zerion Mini Shell 1.0