Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
931 commits
Select commit Hold shift + click to select a range
3a36d9c
feat(policy): update DefaultPolicyResolver.php
vitormattos Apr 13, 2026
5b16bff
test(policy): update policy-preferences-visibility.spec.ts
vitormattos Apr 13, 2026
ea6a85c
feat(ui): update CodeEditor.vue
vitormattos Apr 13, 2026
ef85ea3
test(policy): update Preferences.spec.ts
vitormattos Apr 13, 2026
d145e55
test(policy): update signatureFooterModel.spec.ts
vitormattos Apr 13, 2026
a518aba
test(policy): update signatureFooterRuleEditor.spec.ts
vitormattos Apr 13, 2026
97a7073
test(policy): update useRealPolicyWorkbench.spec.ts
vitormattos Apr 13, 2026
2bdf747
test(policy): update SettingsPolicyWorkbench.spec.ts
vitormattos Apr 13, 2026
7741c36
feat(policy): update Preferences.vue
vitormattos Apr 13, 2026
eb9b143
feat(policy): update PolicyRuleEditorPanel.vue
vitormattos Apr 13, 2026
bebf242
feat(policy): update RealPolicyWorkbench.vue
vitormattos Apr 13, 2026
afb6fb5
feat(policy): update realTypes.ts
vitormattos Apr 13, 2026
9ea4796
feat(policy): update SignatureFooterRuleEditor.vue
vitormattos Apr 13, 2026
6bb08a1
feat(policy): update model.ts
vitormattos Apr 13, 2026
9ab99bd
feat(policy): update realDefinition.ts
vitormattos Apr 13, 2026
82aaa91
feat(policy): update useRealPolicyWorkbench.ts
vitormattos Apr 13, 2026
acfdd6d
test(policy): update PageControllerTest.php
vitormattos Apr 13, 2026
c4d9de6
test(policy): update PolicyServiceTest.php
vitormattos Apr 13, 2026
c48a968
test(policy): update FooterPolicyTest.php
vitormattos Apr 13, 2026
3ae5cc1
feat(api): accept footer policy override in request-signature controller
vitormattos Apr 13, 2026
7d337c6
feat(policy): resolve add_footer request overrides on signature requests
vitormattos Apr 13, 2026
c89382f
feat(footer): support request-level policy overrides during rendering
vitormattos Apr 13, 2026
3476d33
feat(sign): apply add_footer policy snapshot when stamping footer
vitormattos Apr 13, 2026
fa5692a
chore(types): include add_footer in policy snapshot response docs
vitormattos Apr 13, 2026
402d13f
feat(store): send footer policy override in request-signature payload
vitormattos Apr 13, 2026
a2d4987
feat(ui): add request-time footer template selection and preference
vitormattos Apr 13, 2026
db7b57b
test(store): cover footer policy override payload rules
vitormattos Apr 13, 2026
08fe0dc
test(ui): cover footer template selector and preference behavior
vitormattos Apr 13, 2026
2d7e90c
test(policy): cover add_footer request override resolution in service
vitormattos Apr 13, 2026
289f1b4
chore: replace footer template select with radio controls and improve…
vitormattos Apr 13, 2026
8c9c11f
test: add FilePolicyApplierTest covering all six policy apply/sync me…
vitormattos Apr 13, 2026
0c6fb86
refactor: extract policy apply/sync logic into FilePolicyApplier service
vitormattos Apr 13, 2026
2138ae8
refactor: delegate all policy application to FilePolicyApplier in Req…
vitormattos Apr 13, 2026
d04d342
test: migrate policy tests to FilePolicyApplierTest; swap PolicyServi…
vitormattos Apr 13, 2026
a7d6873
feat: accept structured policy payload in request signature controller
vitormattos Apr 13, 2026
3311adb
feat: validate active policy context for request overrides
vitormattos Apr 13, 2026
3b3f1cf
test: cover policy payload mapping in request signature controller
vitormattos Apr 13, 2026
f4e09c9
test: validate active context authorization rules
vitormattos Apr 13, 2026
c8cc048
refactor: send policy overrides envelope from files store
vitormattos Apr 13, 2026
c8c68ff
refactor: consume canonical signature flow values in signer
vitormattos Apr 13, 2026
13c344b
refactor: remove numeric signature flow normalization in signers list
vitormattos Apr 13, 2026
8774a8a
test: align signer signature flow expectations with canonical values
vitormattos Apr 13, 2026
a790e3f
test: align signers list behavior with canonical signature flow
vitormattos Apr 13, 2026
718b25b
test: update files store policy override payload assertions
vitormattos Apr 13, 2026
29d5a77
test: update request tab signature flow scenarios
vitormattos Apr 13, 2026
4b4c4f0
test: normalize indentation in unauthenticated email token e2e
vitormattos Apr 13, 2026
cb0ff7f
test: normalize indentation in native engine files list e2e
vitormattos Apr 13, 2026
d5eb886
chore: regenerate openapi contract for policy payload
vitormattos Apr 13, 2026
eb8b531
chore: regenerate full openapi contract for policy payload
vitormattos Apr 13, 2026
04850e5
chore: regenerate openapi types for policy payload
vitormattos Apr 13, 2026
6c060dc
chore: regenerate full openapi types for policy payload
vitormattos Apr 13, 2026
53539c8
refactor: remove legacy policy workbench composable spec
vitormattos Apr 13, 2026
77ecb14
refactor: remove legacy settings policy workbench view
vitormattos Apr 13, 2026
b593649
refactor: remove legacy confetti rule editor
vitormattos Apr 13, 2026
b4f508d
refactor: remove legacy confetti rule module entry
vitormattos Apr 13, 2026
c8f3cd0
refactor: remove legacy identify factors rule editor
vitormattos Apr 13, 2026
3195243
refactor: remove legacy identify factors module entry
vitormattos Apr 13, 2026
bb802e5
refactor: remove legacy signature flow rule editor
vitormattos Apr 13, 2026
80af377
refactor: remove legacy signature flow module entry
vitormattos Apr 13, 2026
883b9a1
refactor: remove legacy signature stamp rule editor
vitormattos Apr 13, 2026
8737f08
refactor: remove legacy signature stamp module entry
vitormattos Apr 13, 2026
7daf8c3
refactor: remove legacy policy workbench shared types
vitormattos Apr 13, 2026
ae27529
refactor: remove legacy policy workbench composable
vitormattos Apr 13, 2026
5d4ee4f
refactor(policy): delegate appliers from provider folders
vitormattos Apr 13, 2026
893e33f
refactor(policy): add signature flow file policy applier
vitormattos Apr 13, 2026
b2cffd0
refactor(policy): add docmdp file policy applier
vitormattos Apr 13, 2026
86b1f8e
refactor(policy): add footer file policy applier
vitormattos Apr 13, 2026
6ddee7b
test(policy): use data providers in file policy applier test
vitormattos Apr 13, 2026
edb4be0
test(policy): add signature flow file policy applier test
vitormattos Apr 13, 2026
7cad1f2
test(policy): add docmdp file policy applier test
vitormattos Apr 13, 2026
3c565c2
test(policy): add footer file policy applier test
vitormattos Apr 13, 2026
f214652
test(openssl): mock certificate policy service in unit test
vitormattos Apr 13, 2026
da7bb08
test(e2e): move policy preferences cleanup to hooks
vitormattos Apr 13, 2026
a0e7824
test(e2e): move policy settings cleanup to hooks
vitormattos Apr 13, 2026
3ab595b
test(e2e): move workbench personas cleanup to hooks
vitormattos Apr 13, 2026
2a8ba76
test(e2e): stabilize signature flow sidebar lifecycle
vitormattos Apr 13, 2026
4223818
test(e2e): refactor sequential multi-signer fixture setup
vitormattos Apr 13, 2026
08dd29e
fix(tests): sort imports alphabetically in DocMdpFilePolicyApplierTest
vitormattos Apr 13, 2026
df9d535
fix(tests): update FooterPolicyValueTest to include new fields in exp…
vitormattos Apr 13, 2026
045479a
fix(tests): add missing inheritedValue in ResolvedPolicyTest toArray …
vitormattos Apr 13, 2026
6fc84cf
fix(tests): add missing inheritedValue in PolicyControllerTest toArra…
vitormattos Apr 13, 2026
d23e6af
fix(tests): add missing inheritedValue in TemplateLoaderTest toArray …
vitormattos Apr 13, 2026
7b63434
fix(e2e): replace non-existent 'Save footer preference' button check …
vitormattos Apr 13, 2026
5059806
fix(e2e): allow 401 in clearOwnPreference when group admin user is no…
vitormattos Apr 13, 2026
3ddfc4e
fix(e2e): stabilize preferences visibility scenario with explicit set…
vitormattos Apr 13, 2026
f2e015b
refactor(policy): add file policy applier contract
vitormattos Apr 13, 2026
b193ab1
refactor(policy): adapt signature flow applier to shared contract
vitormattos Apr 13, 2026
43e0f32
refactor(policy): adapt docmdp applier to shared contract
vitormattos Apr 13, 2026
0de3e69
refactor(policy): adapt footer applier to shared contract
vitormattos Apr 13, 2026
70040e5
refactor(policy): auto-discover file appliers from provider registry
vitormattos Apr 13, 2026
8d38434
refactor(policy): remove unused private wrappers from file applier
vitormattos Apr 13, 2026
458f942
test(policy): replace private-reflection checks with public orchestra…
vitormattos Apr 13, 2026
8bd5765
feat(e2e): add policy-api support module with generic OCS helpers
vitormattos Apr 13, 2026
98418c4
refactor(e2e): use policy-api support helpers in preferences visibili…
vitormattos Apr 13, 2026
ec14000
refactor(e2e): use policy-api support helpers in workbench personas spec
vitormattos Apr 13, 2026
41ee14f
refactor(e2e): use policy-api support helpers in sidebar spec
vitormattos Apr 13, 2026
862d6e4
chore: fix SPDX copyright year in FilePolicyApplier
vitormattos Apr 13, 2026
9d9087a
chore: fix SPDX copyright year in DocMdpFilePolicyApplier
vitormattos Apr 13, 2026
6769156
chore: fix SPDX copyright year in FooterFilePolicyApplier
vitormattos Apr 13, 2026
bd4fb2e
chore: fix SPDX copyright year in SignatureFlowFilePolicyApplier
vitormattos Apr 13, 2026
9c9a608
feat(e2e): add nc-navigation support module with expandSettingsMenu h…
vitormattos Apr 13, 2026
a18c098
refactor(e2e): use nc-navigation expandSettingsMenu in preferences vi…
vitormattos Apr 13, 2026
c2d70e3
refactor(e2e): use policy-api and nc-navigation helpers in settings m…
vitormattos Apr 13, 2026
605b3bd
refactor(e2e): use system-policies and policy-api helpers in multi-si…
vitormattos Apr 13, 2026
a404ec9
refactor(policy-footer): extract footer template source option resolu…
vitormattos Apr 14, 2026
a283f7c
refactor(request-sidebar): consume footer source options from provide…
vitormattos Apr 14, 2026
2a56b5f
test(policy-footer): cover footer template source option resolution
vitormattos Apr 14, 2026
046a837
style(e2e): normalize indentation in multi-signer sequential spec
vitormattos Apr 14, 2026
952a463
feat(policy-flow): add shared signature flow model helpers
vitormattos Apr 14, 2026
848b6c3
refactor(policy-flow): reuse shared model in real definition
vitormattos Apr 14, 2026
9468f4b
refactor(request-sidebar): use signature flow support model helpers
vitormattos Apr 14, 2026
67e405f
test(policy-flow): add model coverage for signature flow resolution
vitormattos Apr 14, 2026
8dde180
feat(policy-flow): extract request payload resolver to model
vitormattos Apr 14, 2026
57c9854
feat(policy-footer): extract request payload resolver to model
vitormattos Apr 14, 2026
c5776be
refactor(request-sidebar): consume policy payload resolvers from models
vitormattos Apr 14, 2026
3d57dce
test(policy-flow): cover request payload resolver
vitormattos Apr 14, 2026
d8ca6b1
test(policy-footer): cover request payload resolver
vitormattos Apr 14, 2026
75c478f
refactor(types): derive system and user policy states from OpenAPI
vitormattos Apr 14, 2026
cb50422
fix(playwright): send form content type for provisioning app config r…
vitormattos Apr 14, 2026
4f3e11e
refactor(request-sign-groups): remove unnecessary context field from …
vitormattos Apr 14, 2026
59bd804
feat(policy-workbench): probe group access for group-admin scope dete…
vitormattos Apr 14, 2026
7b819dd
feat(policy-workbench): restrict scope options based on group-admin a…
vitormattos Apr 14, 2026
8bbd0de
test(policy-workbench): cover probeGroupAccess branch for group-admin
vitormattos Apr 14, 2026
fa5c83c
feat(footer-handler): add writeQrcodeOnFooter override for preview re…
vitormattos Apr 14, 2026
4527fe1
feat(footer-service): pass writeQrcodeOnFooter to handler in renderPr…
vitormattos Apr 14, 2026
2401414
feat(admin-controller): accept writeQrcodeOnFooter in footer preview …
vitormattos Apr 14, 2026
f6684bd
fix(signature-footer-editor): send writeQrcodeOnFooter flag in previe…
vitormattos Apr 14, 2026
1f152d4
test(footer-service): cover writeQrcodeOnFooter override scenarios in…
vitormattos Apr 14, 2026
6d7d9c3
test(e2e): validate writeQrcodeOnFooter flag in footer preview API vi…
vitormattos Apr 14, 2026
82e00e6
fix: add request-sign-groups policy model
vitormattos Apr 14, 2026
93a293a
fix: add request-sign-groups rule editor
vitormattos Apr 14, 2026
ae7d8fe
fix: add request-sign-groups real definition
vitormattos Apr 14, 2026
8a61cff
fix: document footer preview QR code parameter
vitormattos Apr 14, 2026
3d05f2e
chore: regenerate openapi schema
vitormattos Apr 14, 2026
298555c
chore: regenerate full openapi schema
vitormattos Apr 14, 2026
6c3cea0
chore: regenerate openapi types
vitormattos Apr 14, 2026
5180db2
chore: regenerate full openapi types
vitormattos Apr 14, 2026
93bc850
fix: remove unsupported eval CSP call in page controller
vitormattos Apr 14, 2026
0be59dd
fix: remove unsupported eval CSP call in injection middleware
vitormattos Apr 14, 2026
25967df
feat: add IPolicyAuthorizationService interface for group policy auth…
vitormattos Apr 14, 2026
dd64a66
feat: implement PolicyAuthorizationService for group policy auth
vitormattos Apr 14, 2026
243539c
test: cover group policy authorization service
vitormattos Apr 14, 2026
68676e4
refactor: delegate group policy auth to IPolicyAuthorizationService
vitormattos Apr 14, 2026
179f99f
test: update AccountServiceTest to mock IPolicyAuthorizationService
vitormattos Apr 14, 2026
8ceafca
refactor: remove noisy scoped-admin hint from request-sign-groups editor
vitormattos Apr 14, 2026
c764738
test: validate manageable group scope filtering for single and multip…
vitormattos Apr 14, 2026
72d3611
refactor: move shared file policy applier contract to provider suppor…
vitormattos Apr 14, 2026
5d06503
refactor: remove misplaced provider file policy contract
vitormattos Apr 14, 2026
09e245b
refactor: update FilePolicyApplier to use support contract namespace
vitormattos Apr 14, 2026
0ad98a9
refactor: update DocMdp file applier contract import
vitormattos Apr 14, 2026
3e04964
refactor: update footer file applier contract import
vitormattos Apr 14, 2026
796d9ca
refactor: update signature flow file applier contract import
vitormattos Apr 14, 2026
ed0b8c8
refactor: place file policy applier contract in policy contracts name…
vitormattos Apr 14, 2026
f1fb00e
refactor: remove provider support contract after relocation
vitormattos Apr 14, 2026
74b17bb
refactor: point FilePolicyApplier to policy contract namespace
vitormattos Apr 14, 2026
d8a8adf
refactor: point DocMdp file applier to policy contract namespace
vitormattos Apr 14, 2026
383e47b
refactor: point Footer file applier to policy contract namespace
vitormattos Apr 14, 2026
ebcd376
refactor: point Signature file applier to policy contract namespace
vitormattos Apr 14, 2026
1b1efc2
refactor: update PolicyController.php
vitormattos Apr 14, 2026
073b438
refactor: update ValidateHelper.php
vitormattos Apr 14, 2026
6effd68
refactor: update Version18001Date20260320000000.php
vitormattos Apr 14, 2026
fa60a6d
refactor: update PolicyProviders.php
vitormattos Apr 14, 2026
55d20e3
refactor: update PolicySource.php
vitormattos Apr 14, 2026
252f3b6
refactor: update RequestSignGroupsPolicy.php
vitormattos Apr 14, 2026
5d8bf67
refactor: update RequestSignGroupsPolicyGuard.php
vitormattos Apr 14, 2026
dd1bf1a
refactor: update RequestSignGroupsPolicyValue.php
vitormattos Apr 14, 2026
e5b1df5
refactor: update RequestSignAuthorizationService.php
vitormattos Apr 14, 2026
2619d54
refactor: update RequestSignatureTab.vue
vitormattos Apr 14, 2026
f588772
refactor: update RightSidebar.vue
vitormattos Apr 14, 2026
d7e5b24
refactor: update RealPolicyWorkbench.vue
vitormattos Apr 14, 2026
58caf77
refactor: update realTypes.ts
vitormattos Apr 14, 2026
14ae367
refactor: update realDefinition.ts
vitormattos Apr 14, 2026
67c7a1b
refactor: update useRealPolicyWorkbench.ts
vitormattos Apr 14, 2026
29c847d
refactor: update Settings.vue
vitormattos Apr 14, 2026
7fe0416
test: update PolicyControllerTest.php
vitormattos Apr 14, 2026
c7bba73
test: update ValidateHelperTest.php
vitormattos Apr 14, 2026
24091f2
test: update Version18001Date20260320000000Test.php
vitormattos Apr 14, 2026
d406e3d
test: update PolicyRegistryTest.php
vitormattos Apr 14, 2026
6f3e881
test: update PolicySourceTest.php
vitormattos Apr 14, 2026
009f926
test: update RequestSignGroupsPolicyTest.php
vitormattos Apr 14, 2026
f4b8520
test: update RequestSignGroupsPolicyGuardTest.php
vitormattos Apr 14, 2026
6b084c1
test: update RequestSignAuthorizationServiceTest.php
vitormattos Apr 14, 2026
3a983ca
test: update RightSidebar.spec.ts
vitormattos Apr 14, 2026
12a3fb5
test: update useRealPolicyWorkbench.spec.ts
vitormattos Apr 14, 2026
b6a0226
fix: register alias for policy authorization interface
vitormattos Apr 14, 2026
96fa3e9
test: throw app config type conflict for non-string overwrite
vitormattos Apr 14, 2026
88250bc
chore: regenerate openapi schema
vitormattos Apr 14, 2026
d4effc4
chore: regenerate administration openapi schema
vitormattos Apr 14, 2026
9c782e6
chore: regenerate full openapi schema
vitormattos Apr 14, 2026
4338ef1
chore: regenerate openapi frontend types
vitormattos Apr 14, 2026
9962dd5
chore: regenerate administration openapi frontend types
vitormattos Apr 14, 2026
92a1f31
chore: regenerate full openapi frontend types
vitormattos Apr 14, 2026
3b665ed
refactor: remove policy authorization interface alias registration
vitormattos Apr 14, 2026
2d6d835
refactor: inject concrete policy authorization service in account ser…
vitormattos Apr 14, 2026
3ab9605
test: use concrete policy authorization service in account service test
vitormattos Apr 14, 2026
22b58c1
test: cover null-reset bypass in RequestSignGroupsPolicyGuard
vitormattos Apr 14, 2026
07b5935
test: cover null reset for groups_request_sign system policy in contr…
vitormattos Apr 14, 2026
a8e008a
fix: allow null reset for groups_request_sign in normalizeManagedValue
vitormattos Apr 14, 2026
8df3dd2
fix: pass allowNullReset=true to guard on system policy set endpoint
vitormattos Apr 14, 2026
0dd1697
feat: add supportsUserPreference() hook to IPolicyDefinition interface
vitormattos Apr 14, 2026
fd1d9f5
feat: implement supportsUserPreference() in PolicySpec with default true
vitormattos Apr 14, 2026
52512fc
test: assert canSaveAsUserDefault and canUseAsRequestOverride are fal…
vitormattos Apr 14, 2026
55a76af
test: assert groups_request_sign does not support user preference
vitormattos Apr 14, 2026
acdbcb6
fix: gate canSaveAsUserDefault and canUseAsRequestOverride on support…
vitormattos Apr 14, 2026
6e5b820
fix: mark groups_request_sign as not supporting user preference
vitormattos Apr 14, 2026
a2e55ce
fix: hide Preferences menu when request-sign is not allowed
vitormattos Apr 14, 2026
bd67f2d
test: cover Preferences menu visibility for request-sign permission
vitormattos Apr 14, 2026
dc3efc1
fix: hide preference sections when request-sign is not allowed
vitormattos Apr 14, 2026
76ea8af
test: cover hidden preferences when request-sign is denied
vitormattos Apr 14, 2026
899a327
fix: avoid unsupported user preference reset for system policy save
vitormattos Apr 14, 2026
7383a2e
test: cover system save without user-scope reset
vitormattos Apr 14, 2026
d2327e2
fix: accept string targets in policy workbench selector
vitormattos Apr 14, 2026
0c45bab
fix: allow system create save for immutable policy defaults
vitormattos Apr 14, 2026
dbcc587
test: cover system create save with immutable override
vitormattos Apr 14, 2026
c1a5b14
fix: detect immutable override state in rule editor
vitormattos Apr 15, 2026
98a0153
fix: disable immutable override switch in policy modal
vitormattos Apr 15, 2026
c0af508
test: grant request-sign permission in preferences e2e
vitormattos Apr 15, 2026
94b10bb
chore: require psr http client for psalm
vitormattos Apr 15, 2026
869a629
chore: lock psr http client dependencies
vitormattos Apr 15, 2026
8856a0e
fix: hide immutable override toggle in policy editor
vitormattos Apr 15, 2026
26e7627
test: cover hidden immutable override toggle
vitormattos Apr 15, 2026
3f486fd
feat: add autosave feedback and undo in preferences
vitormattos Apr 15, 2026
98c4817
test: cover autosave undo in preferences
vitormattos Apr 15, 2026
6537cae
refactor: simplify preferences autosave ui
vitormattos Apr 15, 2026
8eb4b33
test: cover simplified preferences autosave behavior
vitormattos Apr 15, 2026
d4cba8b
fix: prevent autosave feedback layout shift
vitormattos Apr 15, 2026
33df5a2
test: stub loading icon in preferences spec
vitormattos Apr 15, 2026
b793ef0
fix: clear undo snapshot after undoing preference change
vitormattos Apr 15, 2026
07db2cd
test: assert undo arrow hidden after undoing preference
vitormattos Apr 15, 2026
ea65082
fix: show reset button when user has a saved preference on page load
vitormattos Apr 15, 2026
8f07ba8
test: cover reset button visibility on page load and undo label logic
vitormattos Apr 15, 2026
58f8a35
fix: anchor undo button inside editor shell instead of floating toolbar
vitormattos Apr 15, 2026
a13f5cb
fix: move undo button above editor shell with visible text label
vitormattos Apr 15, 2026
421bad3
test: verify reset button shows for add_footer on page load
vitormattos Apr 15, 2026
820db3d
fix: make preferences action reset-only without transient undo state
vitormattos Apr 15, 2026
21697e1
fix: allow hiding footer template reset button via prop
vitormattos Apr 15, 2026
2e6e367
test: update preferences specs for reset-only behavior
vitormattos Apr 15, 2026
8d58443
test: cover hidden template reset button option
vitormattos Apr 15, 2026
8778e8d
fix(signature-footer): fall back to system default when inherited tem…
vitormattos Apr 16, 2026
3f4844a
test(signature-footer): update resolveEditorProps tests to expect cor…
vitormattos Apr 16, 2026
2168471
fix(preferences): show template reset button when inherited template …
vitormattos Apr 16, 2026
94d44bd
fix(signature-footer): save concrete template value instead of empty …
vitormattos Apr 16, 2026
0f4c3ea
test(signature-footer): expect concrete inherited template value afte…
vitormattos Apr 16, 2026
f3dd99d
style(signature-footer): remove redundant comment in resolveEditorProps
vitormattos Apr 16, 2026
5adfffb
style(signature-footer): remove redundant comments in SignatureFooter…
vitormattos Apr 16, 2026
16f2519
fix: align footer policy reset behavior
vitormattos Apr 17, 2026
20e0f02
fix: restore footer template policy sync and default state
vitormattos Apr 17, 2026
e8db3c3
feat: restrict policy workbench group targets to manageable scope
vitormattos Apr 18, 2026
f007c70
fix: correct Playwright test base URLs for policy API tests
vitormattos Apr 19, 2026
e0949a0
fix: stabilize policy menu visibility test and align local Playwright…
vitormattos Apr 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8",
"nextcloud/ocp": "dev-master",
"psr/http-client": "^1.0",
"roave/security-advisories": "dev-latest"
},
"config": {
Expand Down
107 changes: 106 additions & 1 deletion composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion lib/AppInfo/Application.php
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ public function register(IRegistrationContext $context): void {
$context->registerNotifierService(Notifier::class);

$context->registerSearchProvider(FileSearchProvider::class);

$context->registerEventListener(LoadSidebar::class, TemplateLoader::class);
$context->registerEventListener(BeforeNodeDeletedEvent::class, BeforeNodeDeletedListener::class);
$context->registerEventListener(CacheEntryRemovedEvent::class, BeforeNodeDeletedListener::class);
Expand Down
23 changes: 23 additions & 0 deletions lib/Command/Developer/Reset.php
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,12 @@ protected function configure(): void {
mode: InputOption::VALUE_NONE,
description: 'Reset config'
)
->addOption(
name: 'policy',
shortcut: null,
mode: InputOption::VALUE_NONE,
description: 'Reset policy data'
)
;
}

Expand Down Expand Up @@ -140,6 +146,10 @@ protected function execute(InputInterface $input, OutputInterface $output): int
$this->resetConfig();
$ok = true;
}
if ($input->getOption('policy') || $all) {
$this->resetPolicy();
$ok = true;
}
} catch (\Exception $e) {
$this->logger->error($e->getMessage());
throw $e;
Expand Down Expand Up @@ -254,4 +264,17 @@ private function resetConfig(): void {
} catch (\Throwable) {
}
}

private function resetPolicy(): void {
try {
$delete = $this->db->getQueryBuilder();
$delete->delete('libresign_permission_set_binding')
->executeStatement();

$delete = $this->db->getQueryBuilder();
$delete->delete('libresign_permission_set')
->executeStatement();
} catch (\Throwable) {
}
}
}
61 changes: 8 additions & 53 deletions lib/Controller/AdminController.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,14 @@
use OCA\Libresign\Service\IdentifyMethodService;
use OCA\Libresign\Service\Install\ConfigureCheckService;
use OCA\Libresign\Service\Install\InstallService;
use OCA\Libresign\Service\Policy\PolicyService;
use OCA\Libresign\Service\ReminderService;
use OCA\Libresign\Service\SignatureBackgroundService;
use OCA\Libresign\Service\SignatureTextService;
use OCA\Libresign\Settings\Admin;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\ContentSecurityPolicy;
use OCP\AppFramework\Http\DataDownloadResponse;
Expand Down Expand Up @@ -83,6 +85,7 @@ public function __construct(
private ReminderService $reminderService,
private FooterService $footerService,
private DocMdpConfigService $docMdpConfigService,
private PolicyService $policyService,
private IdentifyMethodService $identifyMethodService,
private FileMapper $fileMapper,
) {
Expand Down Expand Up @@ -894,15 +897,18 @@ public function saveFooterTemplate(string $template = '', int $width = 595, int
* @param string $template Template to preview
* @param int $width Width of preview in points (default: 595 - A4 width)
* @param int $height Height of preview in points (default: 50)
* @param ?bool $writeQrcodeOnFooter Whether to force QR code rendering in footer preview (null uses policy)
* @return DataDownloadResponse<Http::STATUS_OK, 'application/pdf', array{}>|DataResponse<Http::STATUS_BAD_REQUEST, LibresignErrorResponse, array{}>
*
* 200: OK
* 400: Bad request
*/
#[NoAdminRequired]
#[NoCSRFRequired]
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/admin/footer-template/preview-pdf', requirements: ['apiVersion' => '(v1)'])]
public function footerTemplatePreviewPdf(string $template = '', int $width = 595, int $height = 50) {
public function footerTemplatePreviewPdf(string $template = '', int $width = 595, int $height = 50, ?bool $writeQrcodeOnFooter = null) {
try {
$pdf = $this->footerService->renderPreviewPdf($template ?: null, $width, $height);
$pdf = $this->footerService->renderPreviewPdf($template ?: null, $width, $height, $writeQrcodeOnFooter);
return new DataDownloadResponse($pdf, 'footer-preview.pdf', 'application/pdf');
} catch (\Exception $e) {
return new DataResponse([
Expand Down Expand Up @@ -960,57 +966,6 @@ private function saveOrDeleteConfig(string $key, ?string $value, string $default
}
}

/**
* Set signature flow configuration
*
* @param bool $enabled Whether to force a signature flow for all documents
* @param string|null $mode Signature flow mode: 'parallel' or 'ordered_numeric' (only used when enabled is true)
* @return DataResponse<Http::STATUS_OK, LibresignMessageResponse, array{}>|DataResponse<Http::STATUS_BAD_REQUEST, LibresignErrorResponse, array{}>|DataResponse<Http::STATUS_INTERNAL_SERVER_ERROR, LibresignErrorResponse, array{}>
*
* 200: Configuration saved successfully
* 400: Invalid signature flow mode provided
* 500: Internal server error
*/
#[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/admin/signature-flow/config', requirements: ['apiVersion' => '(v1)'])]
public function setSignatureFlowConfig(bool $enabled, ?string $mode = null): DataResponse {
try {
if (!$enabled) {
$this->appConfig->deleteKey(Application::APP_ID, 'signature_flow');
return new DataResponse([
'message' => $this->l10n->t('Settings saved'),
]);
}

if ($mode === null) {
return new DataResponse([
'error' => $this->l10n->t('Mode is required when signature flow is enabled.'),
], Http::STATUS_BAD_REQUEST);
}

try {
$signatureFlow = \OCA\Libresign\Enum\SignatureFlow::from($mode);
} catch (\ValueError) {
return new DataResponse([
'error' => $this->l10n->t('Invalid signature flow mode. Use "parallel" or "ordered_numeric".'),
], Http::STATUS_BAD_REQUEST);
}

$this->appConfig->setValueString(
Application::APP_ID,
'signature_flow',
$signatureFlow->value
);

return new DataResponse([
'message' => $this->l10n->t('Settings saved'),
]);
} catch (\Exception $e) {
return new DataResponse([
'error' => $e->getMessage(),
], Http::STATUS_INTERNAL_SERVER_ERROR);
}
}

/**
* Configure DocMDP signature restrictions
*
Expand Down
8 changes: 4 additions & 4 deletions lib/Controller/FileController.php
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ public function validateBinary(): DataResponse {
->toArray();
$statusCode = Http::STATUS_OK;
} catch (InvalidArgumentException $e) {
$message = $this->l10n->t($e->getMessage());
$message = $e->getMessage();
$return = [
'action' => JSActions::ACTION_DO_NOTHING,
'errors' => [['message' => $message]]
Expand Down Expand Up @@ -254,15 +254,15 @@ private function validate(
->toArray();
$statusCode = Http::STATUS_OK;
} catch (LibresignException $e) {
$message = $this->l10n->t($e->getMessage());
$message = $e->getMessage();
$return = [
'action' => JSActions::ACTION_DO_NOTHING,
'errors' => [['message' => $message]]
];
$statusCode = Http::STATUS_NOT_FOUND;
} catch (\Throwable $th) {
$message = $this->l10n->t($th->getMessage());
$this->logger->error($message);
$this->logger->error($th->getMessage(), ['exception' => $th]);
$message = $this->l10n->t('Internal error. Contact admin.');
$return = [
'action' => JSActions::ACTION_DO_NOTHING,
'errors' => [['message' => $message]]
Expand Down
15 changes: 12 additions & 3 deletions lib/Controller/PageController.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
use OCA\Libresign\Db\FileMapper;
use OCA\Libresign\Db\SignRequestMapper;
use OCA\Libresign\Exception\LibresignException;
use OCA\Libresign\Handler\FooterHandler;
use OCA\Libresign\Helper\JSActions;
use OCA\Libresign\Helper\ValidateHelper;
use OCA\Libresign\Middleware\Attribute\PrivateValidation;
Expand All @@ -23,6 +24,7 @@
use OCA\Libresign\Service\FileService;
use OCA\Libresign\Service\IdentifyMethod\SignatureMethod\TokenService;
use OCA\Libresign\Service\IdentifyMethodService;
use OCA\Libresign\Service\Policy\PolicyService;
use OCA\Libresign\Service\RequestSignatureService;
use OCA\Libresign\Service\SessionService;
use OCA\Libresign\Service\SignerElementsService;
Expand Down Expand Up @@ -58,6 +60,8 @@ public function __construct(
private AccountService $accountService,
protected SignFileService $signFileService,
protected RequestSignatureService $requestSignatureService,
private PolicyService $policyService,
private FooterHandler $footerHandler,
private SignerElementsService $signerElementsService,
protected IL10N $l10n,
private IdentifyMethodService $identifyMethodService,
Expand Down Expand Up @@ -106,7 +110,14 @@ public function index(): TemplateResponse {

$this->provideSignerSignatues();
$this->initialState->provideInitialState('identify_methods', $this->identifyMethodService->getIdentifyMethodsSettings());
$this->initialState->provideInitialState('signature_flow', $this->appConfig->getValueString(Application::APP_ID, 'signature_flow', \OCA\Libresign\Enum\SignatureFlow::NONE->value));
$resolvedPolicies = [];
foreach ($this->policyService->resolveKnownPolicies() as $policyKey => $resolvedPolicy) {
$resolvedPolicies[$policyKey] = $resolvedPolicy->toArray();
}
$this->initialState->provideInitialState('effective_policies', [
'policies' => $resolvedPolicies,
]);
$this->initialState->provideInitialState('footer_template', $this->footerHandler->getTemplate());
$this->initialState->provideInitialState('docmdp_config', $this->docMdpConfigService->getConfig());
$this->initialState->provideInitialState('legal_information', $this->appConfig->getValueString(Application::APP_ID, 'legal_information'));

Expand All @@ -120,7 +131,6 @@ public function index(): TemplateResponse {
$response = new TemplateResponse(Application::APP_ID, 'main');

$policy = new ContentSecurityPolicy();
$policy->allowEvalScript(true);
$policy->addAllowedFrameDomain('\'self\'');
$policy->addAllowedWorkerSrcDomain("'self'");
$response->setContentSecurityPolicy($policy);
Expand Down Expand Up @@ -387,7 +397,6 @@ public function sign(string $uuid): TemplateResponse {
$response = new TemplateResponse(Application::APP_ID, 'external', [], TemplateResponse::RENDER_AS_BASE);

$policy = new ContentSecurityPolicy();
$policy->allowEvalScript(true);
$policy->addAllowedWorkerSrcDomain("'self'");
$response->setContentSecurityPolicy($policy);

Expand Down
Loading
Loading