. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Tools\OAuthServer\Entities; use Espo\Core\Name\Field; use Espo\Core\ORM\Entity; use Espo\Tools\OAuthServer\ClientType; use UnexpectedValueException; class Client extends Entity { public const string ENTITY_TYPE = 'OAuthClient'; public const string FIELD_STATUS = 'status'; public const string FIELD_IDENTIFIER = 'identifier'; public const string FIELD_CLIENT_TYPE = 'clientType'; public const string FIELD_SCOPES = 'scopes'; public const string FIELD_REDIRECT_URIS = 'redirectUris'; public const string LINK_SECRETS = 'secrets'; public const string STATUS_ACTIVE = 'Active'; public const string STATUS_INACTIVE = 'Inactive'; public function getName(): ?string { return $this->get(Field::NAME); } public function setName(string $name): self { return $this->set(Field::NAME, $name); } public function getClientType(): ClientType { $raw = $this->get(self::FIELD_CLIENT_TYPE) ?? throw new UnexpectedValueException("No client type."); return ClientType::tryFrom($raw) ?? throw new UnexpectedValueException("Bad client type."); } public function setClientType(ClientType $clientType): self { return $this->set(self::FIELD_CLIENT_TYPE, $clientType->value); } /** * @return ?non-empty-string */ public function getIdentifier(): ?string { /** @var ?non-empty-string */ return $this->get(self::FIELD_IDENTIFIER); } public function setIdentifier(?string $clientId): self { return $this->set(self::FIELD_IDENTIFIER, $clientId); } public function isActive(): bool { return $this->get(self::FIELD_STATUS) === self::STATUS_ACTIVE; } public function setActive(): self { return $this->set(self::FIELD_STATUS, self::STATUS_ACTIVE); } public function setInactive(): self { return $this->set(self::FIELD_STATUS, self::STATUS_INACTIVE); } /** * @return non-empty-string[] */ public function getScopes(): array { $scopes = $this->get(self::FIELD_SCOPES) ?? []; foreach ($scopes as $scope) { if (!$scope) { throw new UnexpectedValueException("Empty scope."); } } return $scopes; } /** * @param string[] $scopes */ public function setScopes(array $scopes): self { return $this->set(self::FIELD_SCOPES, $scopes); } /** * @return string[] */ public function getRedirectUris(): array { return $this->get(self::FIELD_REDIRECT_URIS) ?? []; } /** * @param string[] $redirectUris */ public function setRedirectUris(array $redirectUris): self { return $this->set(self::FIELD_REDIRECT_URIS, $redirectUris); } }