Skip to content

Commit 5405914

Browse files
authored
Merge pull request #7314 from LibreSign/feat/policy-signature-flow-phase1-groundwork
feat: policy signature flow phase1 groundwork
2 parents 7005206 + 891535d commit 5405914

File tree

111 files changed

+26570
-2007
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

111 files changed

+26570
-2007
lines changed

composer.lock

Lines changed: 17 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/Command/Developer/Reset.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,12 @@ protected function configure(): void {
9696
mode: InputOption::VALUE_NONE,
9797
description: 'Reset config'
9898
)
99+
->addOption(
100+
name: 'policy',
101+
shortcut: null,
102+
mode: InputOption::VALUE_NONE,
103+
description: 'Reset policy data'
104+
)
99105
;
100106
}
101107

@@ -140,6 +146,10 @@ protected function execute(InputInterface $input, OutputInterface $output): int
140146
$this->resetConfig();
141147
$ok = true;
142148
}
149+
if ($input->getOption('policy') || $all) {
150+
$this->resetPolicy();
151+
$ok = true;
152+
}
143153
} catch (\Exception $e) {
144154
$this->logger->error($e->getMessage());
145155
throw $e;
@@ -254,4 +264,17 @@ private function resetConfig(): void {
254264
} catch (\Throwable) {
255265
}
256266
}
267+
268+
private function resetPolicy(): void {
269+
try {
270+
$delete = $this->db->getQueryBuilder();
271+
$delete->delete('libresign_permission_set_binding')
272+
->executeStatement();
273+
274+
$delete = $this->db->getQueryBuilder();
275+
$delete->delete('libresign_permission_set')
276+
->executeStatement();
277+
} catch (\Throwable) {
278+
}
279+
}
257280
}

lib/Controller/AdminController.php

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
use OCA\Libresign\Service\IdentifyMethodService;
2525
use OCA\Libresign\Service\Install\ConfigureCheckService;
2626
use OCA\Libresign\Service\Install\InstallService;
27+
use OCA\Libresign\Service\Policy\PolicyService;
2728
use OCA\Libresign\Service\ReminderService;
2829
use OCA\Libresign\Service\SignatureBackgroundService;
2930
use OCA\Libresign\Service\SignatureTextService;
@@ -83,6 +84,7 @@ public function __construct(
8384
private ReminderService $reminderService,
8485
private FooterService $footerService,
8586
private DocMdpConfigService $docMdpConfigService,
87+
private PolicyService $policyService,
8688
private IdentifyMethodService $identifyMethodService,
8789
private FileMapper $fileMapper,
8890
) {
@@ -974,36 +976,21 @@ private function saveOrDeleteConfig(string $key, ?string $value, string $default
974976
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/admin/signature-flow/config', requirements: ['apiVersion' => '(v1)'])]
975977
public function setSignatureFlowConfig(bool $enabled, ?string $mode = null): DataResponse {
976978
try {
977-
if (!$enabled) {
978-
$this->appConfig->deleteKey(Application::APP_ID, 'signature_flow');
979-
return new DataResponse([
980-
'message' => $this->l10n->t('Settings saved'),
981-
]);
982-
}
983-
984-
if ($mode === null) {
979+
if ($enabled && $mode === null) {
985980
return new DataResponse([
986981
'error' => $this->l10n->t('Mode is required when signature flow is enabled.'),
987982
], Http::STATUS_BAD_REQUEST);
988983
}
989984

990-
try {
991-
$signatureFlow = \OCA\Libresign\Enum\SignatureFlow::from($mode);
992-
} catch (\ValueError) {
993-
return new DataResponse([
994-
'error' => $this->l10n->t('Invalid signature flow mode. Use "parallel" or "ordered_numeric".'),
995-
], Http::STATUS_BAD_REQUEST);
996-
}
997-
998-
$this->appConfig->setValueString(
999-
Application::APP_ID,
1000-
'signature_flow',
1001-
$signatureFlow->value
1002-
);
985+
$this->policyService->saveSystem('signature_flow', $enabled ? $mode : null);
1003986

1004987
return new DataResponse([
1005988
'message' => $this->l10n->t('Settings saved'),
1006989
]);
990+
} catch (\InvalidArgumentException) {
991+
return new DataResponse([
992+
'error' => $this->l10n->t('Invalid signature flow mode. Use "parallel" or "ordered_numeric".'),
993+
], Http::STATUS_BAD_REQUEST);
1007994
} catch (\Exception $e) {
1008995
return new DataResponse([
1009996
'error' => $e->getMessage(),

lib/Controller/PageController.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
use OCA\Libresign\Service\FileService;
2424
use OCA\Libresign\Service\IdentifyMethod\SignatureMethod\TokenService;
2525
use OCA\Libresign\Service\IdentifyMethodService;
26+
use OCA\Libresign\Service\Policy\PolicyService;
2627
use OCA\Libresign\Service\RequestSignatureService;
2728
use OCA\Libresign\Service\SessionService;
2829
use OCA\Libresign\Service\SignerElementsService;
@@ -58,6 +59,7 @@ public function __construct(
5859
private AccountService $accountService,
5960
protected SignFileService $signFileService,
6061
protected RequestSignatureService $requestSignatureService,
62+
private PolicyService $policyService,
6163
private SignerElementsService $signerElementsService,
6264
protected IL10N $l10n,
6365
private IdentifyMethodService $identifyMethodService,
@@ -106,7 +108,13 @@ public function index(): TemplateResponse {
106108

107109
$this->provideSignerSignatues();
108110
$this->initialState->provideInitialState('identify_methods', $this->identifyMethodService->getIdentifyMethodsSettings());
109-
$this->initialState->provideInitialState('signature_flow', $this->appConfig->getValueString(Application::APP_ID, 'signature_flow', \OCA\Libresign\Enum\SignatureFlow::NONE->value));
111+
$resolvedPolicies = [];
112+
foreach ($this->policyService->resolveKnownPolicies() as $policyKey => $resolvedPolicy) {
113+
$resolvedPolicies[$policyKey] = $resolvedPolicy->toArray();
114+
}
115+
$this->initialState->provideInitialState('effective_policies', [
116+
'policies' => $resolvedPolicies,
117+
]);
110118
$this->initialState->provideInitialState('docmdp_config', $this->docMdpConfigService->getConfig());
111119
$this->initialState->provideInitialState('legal_information', $this->appConfig->getValueString(Application::APP_ID, 'legal_information'));
112120

0 commit comments

Comments
 (0)