* feat: add ID verification requirement for signers (B7)
* fix: add missing message and dryRun props to FileDropzone in ID verification gate
* fix: guard Complete button and submitStep() against ID verification bypass
---------
Co-authored-by: Bob Develop <developbob50@gmail.com>
* feat: add consent banner requirement for signers (B6)
- Add REQUIRE_CONSENT_KEY to AccountConfig for per-account toggle
- Add consent_given event type to SubmissionEvent for audit trail
- Add consent checkbox UI on last step of signing form (form.vue)
- Add isLastStep computed property and onConsentChange method
- Create API endpoint (submitter_consents#create) to record consent
- Add requireConsent prop passing from server via data attribute
- Add settings toggle in Account preferences page
- Add i18n translations for all 14 languages (JS + Rails)
- Submit button disabled until consent checkbox is checked
* fix: add REQUIRE_CONSENT_KEY to AccountConfigsController ALLOWED_KEYS
* fix: keep consent checkbox visible after checking (don't remove from DOM)
* fix: bind checkbox checked state to consentAccepted for step navigation sync
---------
Co-authored-by: mario.pander <developbob50@gmail.com>
* feat: externalize storage config via environment variables (v1.5.0)
- Add storage_configured?, storage_service, storage_settings to ExternalConfig
- Show read-only banner and disable form when S3/GCS/Azure env vars are set
- Keep storage link visible in settings nav when externally configured
- Add 8 RSpec tests for storage config detection and settings
* fix: add server-side guard to reject storage form POST when env-configured
Addresses Devin Review feedback: the disabled fieldset was client-side only.
Now StorageSettingsController#create redirects with an alert when
ExternalConfig.storage_configured? is true.
* fix: use i18n key for storage read-only banner instead of hardcoded string
* fix: use conditional fieldset tags to avoid BetterHtml interpolation error
---------
Co-authored-by: Bob Develop <developbob50@gmail.com>
- Add Docuseal.personalized?(account) helper that returns true when
a custom logo is attached OR a brand name is configured
- Show 'Powered by DocuSeal' footer in the app layout when personalized
- Show 'Powered by DocuSeal' line in email attribution when personalized
- No footer shown in default (non-personalized) state
Co-authored-by: Bob Develop <developbob50@gmail.com>
* Fix ESLint quote-props errors in signature_step.vue
* feat: add per-account custom logo support with env var fallback
- Add has_one_attached :logo to Account model
- Add Docuseal.custom_logo_url helper reading CUSTOM_LOGO_URL env var
- Create AccountLogoController with upload/delete actions
- Update shared/_logo.html.erb to render: account.logo > CUSTOM_LOGO_URL > default SVG
- Replace logo_form placeholder with actual upload form + preview + delete
- Add route for account_logo under /settings
- Add i18n translations for logo flash messages
* test: add Playwright tests for custom logo upload, delete, and env fallback
---------
Co-authored-by: mario.pander <developbob50@gmail.com>
Co-authored-by: David Pierre-Francois <david.pierre-francois@videotron.com>
* feat: add pluggable field detection system (v0.14.0)
Add external field detection via Ruby scripts and YAML profiles.
Two plugin mechanisms supported side-by-side:
1. Ruby scripts (FIELD_DETECTION_SCRIPTS_DIR) - full-power handlers
registered via Templates::FieldDetection.register(name, handler)
2. YAML profiles (FIELD_DETECTION_CONFIG_DIR) - declarative configs
with text anchors + relative offsets OR absolute positions
Core changes:
- lib/templates/field_detection.rb: registry, loader, dispatcher
- lib/templates/field_detection/config_based.rb: YAML profile engine
with anchor-based and absolute positioning, negative page indices
- Controller accepts algorithm param, dispatches accordingly
- Split-button UI: main action = ML detection, dropdown = profiles
- RSpec tests for both modules with fixture YAML profiles
No business-specific algorithms ship with docuseal - all are injected
at deploy time via ConfigMap/mounted volumes.
* fix: use proper user/account setup in config_based spec
* fix: include submitters in algorithm detection response
---------
Co-authored-by: Bob Develop <developbob50@gmail.com>