From 28fbc7324814521dfb528d6a29451549c79d6615 Mon Sep 17 00:00:00 2001 From: matthieu Date: Sun, 15 Mar 2026 18:09:20 +0100 Subject: [PATCH] feat(bookstack) : add BookStackSettings API resource with provider and processor Co-Authored-By: Claude Sonnet 4.6 --- src/ApiResource/BookStackSettings.php | 45 ++++++++++++++++++++++ src/State/BookStackSettingsProcessor.php | 49 ++++++++++++++++++++++++ src/State/BookStackSettingsProvider.php | 30 +++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 src/ApiResource/BookStackSettings.php create mode 100644 src/State/BookStackSettingsProcessor.php create mode 100644 src/State/BookStackSettingsProvider.php 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; + } +}