* 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>
- Add IP_ALLOWLIST_KEY to AccountConfig model
- Add enforce_ip_allowlist before_action in ApplicationController (web: sign out + redirect)
- Add enforce_ip_allowlist before_action in Api::ApiBaseController (API: 403 Forbidden)
- Support single IPs and CIDR ranges via IPAddr
- Create settings UI in _compliances.html.erb with text area
- Parse text area input (newline/comma separated) into array
- Add i18n translations for all 14 languages
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>
* feat: add custom brand name + font feature (v1.2.0)
- Add BRAND_NAME_KEY, BRAND_NAME_FONT_KEY, BRAND_NAME_FONTS whitelist to AccountConfig
- Modify _title.html.erb to render custom brand name with configurable font
- Create _brand_name_form.html.erb partial with text input + font dropdown
- Add brand name form to personalization_settings/show.html.erb
- Add BRAND_NAME keys to PersonalizationSettingsController ALLOWED_KEYS
- Apply brand name header in mailer layout
- Add i18n translations (EN, ES, IT, FR, PT, DE, NL)
- Env override support via DOCUSEAL_CONFIG_BRAND_NAME / DOCUSEAL_CONFIG_BRAND_NAME_FONT
- When brand_name is unset, upstream DocuSeal text renders as before
- When set, configured text renders in chosen font (CSS font-family inline)
* fix: address review — correct font CSS fallback, system-ui quoting, server-side validation
- Add brand_font_css helper to AccountConfig for proper CSS output
- system-ui rendered unquoted; Inter uses sans-serif fallback; script fonts use cursive
- Add server-side validation rejecting fonts not in BRAND_NAME_FONTS whitelist
- Add invalid_font_selection i18n key
* fix: use Rails form helpers for BetterHtml compatibility in brand name and UI visibility forms
---------
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 'Generated by DocuSeal' disclaimer below typed signature preview
* fix: use t() for i18n instead of hardcoded English disclaimer text
Add generated_by_docuseal translation key to all 7 locales (en, es, it, fr, pt, de, nl) and use t() in the Vue component for consistency with the rest of the internationalized UI.
* fix: add generated_by_docuseal translations to JavaScript i18n module
---------
Co-authored-by: Bob Develop <developbob50@gmail.com>
* feat: add typed signature with font picker to user profile
- Add 'Type' tab alongside 'Draw' and 'Upload' in signature/initials modals
- Create typed-signature-form custom element for canvas-based typed signatures
- Persist font preference per user via UserConfig (signature_font/initials_font)
- Pre-select saved font when reopening the modal
- Add i18n keys for 'type' and 'type_signature_here' in all 7 languages
* fix: use options_for_select to satisfy BetterHtml validation
---------
Co-authored-by: Bob Develop <developbob50@gmail.com>