diff --git a/src/ApiResource/BookStackSettings.php b/src/ApiResource/BookStackSettings.php new file mode 100644 index 0000000..1ea3f20 --- /dev/null +++ b/src/ApiResource/BookStackSettings.php @@ -0,0 +1,45 @@ + ['bookstack_settings:read']], + provider: BookStackSettingsProvider::class, + security: "is_granted('ROLE_ADMIN')", + ), + new Put( + uriTemplate: '/settings/bookstack', + denormalizationContext: ['groups' => ['bookstack_settings:write']], + normalizationContext: ['groups' => ['bookstack_settings:read']], + provider: BookStackSettingsProvider::class, + processor: BookStackSettingsProcessor::class, + security: "is_granted('ROLE_ADMIN')", + ), + ], +)] +final class BookStackSettings +{ + #[Groups(['bookstack_settings:read', 'bookstack_settings:write'])] + public ?string $url = null; + + #[Groups(['bookstack_settings:write'])] + public ?string $tokenId = null; + + #[Groups(['bookstack_settings:write'])] + public ?string $tokenSecret = null; + + #[Groups(['bookstack_settings:read'])] + public bool $hasToken = false; +} diff --git a/src/State/BookStackSettingsProcessor.php b/src/State/BookStackSettingsProcessor.php new file mode 100644 index 0000000..d7d2217 --- /dev/null +++ b/src/State/BookStackSettingsProcessor.php @@ -0,0 +1,49 @@ +configRepository->findSingleton(); + if (null === $config) { + $config = new BookStackConfiguration(); + } + + $config->setUrl($data->url); + + if (null !== $data->tokenId && '' !== $data->tokenId + && null !== $data->tokenSecret && '' !== $data->tokenSecret) { + $config->setEncryptedTokenId($this->tokenEncryptor->encrypt($data->tokenId)); + $config->setEncryptedTokenSecret($this->tokenEncryptor->encrypt($data->tokenSecret)); + } + + $this->em->persist($config); + $this->em->flush(); + + $result = new BookStackSettings(); + $result->url = $config->getUrl(); + $result->hasToken = $config->hasToken(); + + return $result; + } +} diff --git a/src/State/BookStackSettingsProvider.php b/src/State/BookStackSettingsProvider.php new file mode 100644 index 0000000..5d0db34 --- /dev/null +++ b/src/State/BookStackSettingsProvider.php @@ -0,0 +1,30 @@ +configRepository->findSingleton(); + $dto = new BookStackSettings(); + + if (null !== $config) { + $dto->url = $config->getUrl(); + $dto->hasToken = $config->hasToken(); + } + + return $dto; + } +}