Prepare for 1.0.0 release

Sweep of stale upstream cruft and missing release-process plumbing:

- SECURITY.md routes vuln reports to wabosign@wabo.cc
- package.json renamed wabosign + license/repository fields
- Drop the docuseal.com fallback href in signature_step.vue
- Delete docs/api/ (10 upstream language stubs) and rewrite stale
  docuseal.com URLs in docs/openapi.json + docs/embedding/* +
  docs/webhooks/* to sign.wabo.cc
- Remove console_redirect + enquiries controllers and routes
  (/upgrade, /manage, /console_redirect were DocuSeal-SaaS-only).
  Strip the navbar Console icon, the embed_scripts upgrade-to-Pro
  fallback, the sessions_controller CONSOLE_URL redirect, and the
  CONSOLE_URL/CDN_URL/CLOUD_URL/ENQUIRIES_URL constants. The four
  "Learn more" links in templates/_embedding.html.erb now point at
  sign.wabo.cc/docs/embedding; the two CDN script-src refs use the
  local embed_script_url helper.
- Dockerfile gains OCI image labels via ARG VERSION/REVISION
- docker.yml passes labels + build-args from metadata-action@v5 so
  the published image has the right manifest-level metadata
- Add CHANGELOG.md (Keep-a-Changelog) and a Releases section in README

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
pull/687/head
Wabo 1 month ago
parent 27af280dee
commit a1ca9c5791

@ -21,7 +21,7 @@ jobs:
- name: Docker meta
id: meta
uses: docker/metadata-action@v4
uses: docker/metadata-action@v5
with:
images: ghcr.io/wabolabs/wabosign
tags: |
@ -51,3 +51,7 @@ jobs:
push: true
platforms: linux/amd64,linux/arm64
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
VERSION=${{ github.ref_name }}
REVISION=${{ github.sha }}

@ -0,0 +1,34 @@
# Changelog
All notable changes to WaboSign are documented here. The format is based on
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this project
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.0.0] — 2026-05-17
First WaboSign release. Forked from [DocuSeal](https://github.com/docusealco/docuseal) 2.5.3.
### Added
- Google Workspace SSO via `omniauth-google-oauth2`, configurable from `/settings/sso` with ENV + DB fallback. See [GOOGLE_SSO.md](GOOGLE_SSO.md).
- SMS invitations via BulkVS, configurable from `/settings/sms`. See [SMS.md](SMS.md).
- Custom account logo upload with server-side SVG sanitization. The logo renders on the sign-in page, signing flow, dashboard navbar, share-link QR page, and audit-trail PDFs.
- Editor and Viewer user roles alongside Admin. Editors get CRUD on templates and submissions; Viewers get read-only access. Self-service profile management is preserved for every role.
- OCI image labels (`org.opencontainers.image.*`) and multi-arch (linux/amd64 + linux/arm64) Docker builds wired via `.github/workflows/docker.yml`.
- [CHANGELOG.md](CHANGELOG.md) and a Releases section in [README.md](README.md).
### Changed
- Removed the upstream "Pro" feature paywall — multi-account, SSO, SMS, audit trail, and timestamping all work out of the box on a self-hosted deployment.
- Rebranded all UI surfaces, emails, and asset paths from DocuSeal to WaboSign while preserving AGPL §7(b) upstream attribution in [NOTICE](NOTICE), [REBRANDING.md](REBRANDING.md), [LICENSE_ADDITIONAL_TERMS](LICENSE_ADDITIONAL_TERMS), and the in-app "Powered by" footer.
- Default container image is now `ghcr.io/wabolabs/wabosign` (public).
- Security contact in [SECURITY.md](SECURITY.md) now routes to `wabosign@wabo.cc`.
### Removed
- Developer Newsletter step from the initial-setup flow (was a DocuSeal mailing-list signup).
- Console-redirect endpoints (`/upgrade`, `/manage`, `/console_redirect`) and the enquiries form — only made sense for DocuSeal's hosted multitenant SaaS.
- Upstream API-docs language stubs at `docs/api/` (10 files referencing `api.docuseal.com`). The OpenAPI spec at `docs/openapi.json` and the embedding/webhook guides remain (URLs rewritten to `sign.wabo.cc`).
- The "Upgrade to Pro" fallback markup served by the embed-script controller — replaced with a neutral "embed assets not loaded" message.
### Security
- Account-logo SVG uploads are sanitized via Nokogiri before storage (strips `<script>`, `<foreignObject>`, `on*` attributes, and external `href` / `xlink:href` values).
[1.0.0]: https://github.com/wabolabs/wabosign/releases/tag/1.0.0

@ -42,6 +42,19 @@ RUN echo "gem 'shakapacker'" > Gemfile && ./bin/shakapacker
FROM ruby:4.0.1-alpine AS app
ARG VERSION="dev"
ARG REVISION="unknown"
LABEL org.opencontainers.image.title="WaboSign" \
org.opencontainers.image.description="Self-hosted, open-source document filling and signing platform — a WaboSign fork of DocuSeal." \
org.opencontainers.image.url="https://github.com/wabolabs/wabosign" \
org.opencontainers.image.source="https://github.com/wabolabs/wabosign" \
org.opencontainers.image.documentation="https://github.com/wabolabs/wabosign#readme" \
org.opencontainers.image.vendor="WaboLabs" \
org.opencontainers.image.licenses="AGPL-3.0-or-later" \
org.opencontainers.image.version="${VERSION}" \
org.opencontainers.image.revision="${REVISION}"
ENV RAILS_ENV=production
ENV BUNDLE_WITHOUT="development:test"
ENV OPENSSL_CONF=/etc/openssl_legacy.cnf

@ -40,9 +40,11 @@ WaboSign is a fork of [DocuSeal](https://github.com/docusealco/docuseal) under A
## Docker
```sh
docker run --name wabosign -p 3000:3000 -v .:/data ghcr.io/wabolabs/wabosign:latest
docker run --name wabosign -p 3000:3000 -v .:/data ghcr.io/wabolabs/wabosign:1.0.0
```
`:latest` always tracks the most recent release; pin a `MAJOR.MINOR.PATCH` tag for reproducible deployments.
By default the container uses SQLite for data. Point at PostgreSQL or MySQL by setting `DATABASE_URL`.
### Docker Compose
@ -57,6 +59,13 @@ Make sure your DNS points at the server so Caddy can issue an SSL cert automatic
WaboSign ships with email + password (Devise) and TOTP two-factor auth out of the box. Google Workspace SSO can be enabled by setting three environment variables — see [GOOGLE_SSO.md](GOOGLE_SSO.md) for the full operator guide.
## Releases
- **Current release:** 1.0.0 — see [CHANGELOG.md](CHANGELOG.md).
- **Container image:** `ghcr.io/wabolabs/wabosign:1.0.0` (or `:latest`).
- **Versioning:** `MAJOR.MINOR.PATCH` per [semver.org](https://semver.org).
- **Tagging triggers a build:** pushing a `MAJOR.MINOR.PATCH` git tag runs [`.github/workflows/docker.yml`](.github/workflows/docker.yml), which builds `linux/amd64` + `linux/arm64` and pushes to GHCR.
## License
WaboSign is distributed under the [GNU Affero General Public License v3.0](LICENSE), with the §7(b) [Additional Terms](LICENSE_ADDITIONAL_TERMS) preserved from upstream.

@ -1,14 +1,12 @@
# Reporting a Vulnerability
If you come across any security concern or vulnarability, please report the information via email to security@docuseal.com instead of opening a GitHub issue. We will promptly respond and will collaborate with you to validate the issue, and resolve it ASAP.
If you discover a security concern or vulnerability in WaboSign, please report it privately by email to **wabosign@wabo.cc** rather than opening a public GitHub issue. We will acknowledge receipt, work with you to validate the report, and ship a fix.
**We have a bug bounty program to reward security researchers.**
Out of scope vulnerabilities:
## Out of scope
- CSRF
- DNSSEC, CAA, CSP headers
- DNS or email security related
- Rate Limiting
- Rate limiting
Note: We reserve the right to classify any reported vulnerability as out of scope for the bug bounty program.
We reserve the right to classify any reported issue as out of scope.

@ -1,26 +0,0 @@
# frozen_string_literal: true
class ConsoleRedirectController < ApplicationController
skip_before_action :authenticate_user!
skip_authorization_check
def index
if request.path == '/upgrade'
params[:redir] = Wabosign.multitenant? ? "#{Wabosign::CONSOLE_URL}/plans" : "#{Wabosign::CONSOLE_URL}/on_premises"
end
params[:redir] = "#{Wabosign::CONSOLE_URL}/manage" if request.path == '/manage'
return redirect_to(new_user_session_path({ redir: params[:redir] }.compact)) if true_user.blank?
auth = JsonWebToken.encode(uuid: true_user.uuid,
scope: :console,
exp: 1.minute.from_now.to_i)
redir_uri = Addressable::URI.parse(params[:redir])
path = redir_uri.path if params[:redir].to_s.starts_with?(Wabosign::CONSOLE_URL)
redirect_to "#{Wabosign::CONSOLE_URL}#{path}?#{{ **redir_uri&.query_values, 'auth' => auth }.to_query}",
allow_other_host: true
end
end

@ -6,13 +6,8 @@ class EmbedScriptsController < ActionController::Metal
connectedCallback() {
this.innerHTML = `
<div style="text-align: center; padding: 20px; font-family: Arial, sans-serif;">
<h2>Upgrade to Pro</h2>
<p>Unlock embedded components by upgrading to Pro</p>
<div style="margin-top: 40px;">
<a href="#{Wabosign::CONSOLE_URL}/on_premises" target="_blank" style="padding: 15px 25px; background-color: #222; color: white; text-decoration: none; border-radius: 5px; font-size: 16px; cursor: pointer;">
Learn More
</a>
</div>
<h2>Embedded components not loaded</h2>
<p>The embed assets could not be served from this WaboSign instance. Check that the host is reachable and that the embed script is being served from the same origin.</p>
</div>
`;
}

@ -1,22 +0,0 @@
# frozen_string_literal: true
class EnquiriesController < ApplicationController
skip_before_action :authenticate_user!
skip_authorization_check
def create
if params[:talk_to_sales] == 'on'
Faraday.post(Wabosign::ENQUIRIES_URL,
enquiry_params.merge(type: :talk_to_sales).to_json,
'Content-Type' => 'application/json')
end
head :ok
end
private
def enquiry_params
params.require(:user).permit(:email)
end
end

@ -30,11 +30,7 @@ class SessionsController < Devise::SessionsController
private
def after_sign_in_path_for(...)
if params[:redir].present?
return console_redirect_index_path(redir: params[:redir]) if params[:redir].starts_with?(Wabosign::CONSOLE_URL)
return params[:redir]
end
return params[:redir] if params[:redir].present?
super
end

@ -320,7 +320,7 @@
class="text-base-content/60 text-xs text-center w-full mt-1 select-none"
>
{{ t('by_clicking_you_agree_to_the').replace('{button}', buttonText.charAt(0).toUpperCase() + buttonText.slice(1)) }} <a
:href="esignDisclosureUrl || 'https://www.docuseal.com/esign-disclosure'"
:href="esignDisclosureUrl"
target="_blank"
>
<span class="inline md:hidden">

@ -34,14 +34,6 @@
<span class="mr-1"><%= t('profile') %></span>
<% end %>
</li>
<% if !Wabosign.demo? && can?(:manage, EncryptedConfig) %>
<li>
<%= link_to Wabosign.multitenant? ? console_redirect_index_path : Wabosign::CONSOLE_URL, data: { prefetch: false }, class: 'flex items-center' do %>
<%= svg_icon('terminal', class: 'w-5 h-5 flex-shrink-0 stroke-2') %>
<%= t('console') %>
<% end %>
</li>
<% end %>
<% if can?(:read, EncryptedConfig.new(key: EncryptedConfig::ESIGN_CERTS_KEY, account: current_account)) %>
<li>
<%= link_to settings_esign_path, class: 'flex items-center' do %>

@ -55,8 +55,8 @@
<div id="js_1" class="block my-4">
<div class="mockup-code overflow-hidden pb-0 mt-4">
<span class="top-0 right-0 absolute flex">
<%= link_to t('learn_more'), console_redirect_index_path(redir: "#{Wabosign::CONSOLE_URL}/embedding/form"), target: '_blank', data: { turbo: false }, class: 'btn btn-ghost text-gray-100 flex', rel: 'noopener' %>
<clipboard-copy data-text="<script src=&quot;<%= Wabosign::CDN_URL %>/js/form.js&quot;></script>
<%= link_to t(:learn_more), "#{Wabosign::PRODUCT_URL}/docs/embedding", target: "_blank", data: { turbo: false }, class: "btn btn-ghost text-gray-100 flex", rel: "noopener" %>
<clipboard-copy data-text="<script src=&quot;<%= embed_script_url(filename: "form.js") %>&quot;></script>
<docuseal-form data-src=&quot;<%= start_form_url(slug: template.slug) %>&quot;></docuseal-form>
">
@ -78,7 +78,7 @@
</clipboard-copy>
</span>
<pre class="before:!m-0 pl-6 pb-4 overflow-auto"><code class="overflow-hidden w-full"><span style="color: #f4bf75">&lt;script </span><span style="color: #6a9fb5">src=</span><span style="color: #90a959">"<%= Wabosign::CDN_URL %>/js/form.js"</span><span style="color: #f4bf75">&gt;&lt;/script&gt;</span>
<pre class="before:!m-0 pl-6 pb-4 overflow-auto"><code class="overflow-hidden w-full"><span style="color: #f4bf75">&lt;script </span><span style="color: #6a9fb5">src=</span><span style="color: #90a959">"<%= embed_script_url(filename: "form.js") %>"</span><span style="color: #f4bf75">&gt;&lt;/script&gt;</span>
<span style="color: #f4bf75">&lt;docuseal-form</span> <span style="color: #6a9fb5">data-src=</span><span style="color: #90a959">"<%= start_form_url(slug: template.slug) %>"</span><span style="color: #f4bf75">&gt;</span><span style="color: #f4bf75">&lt;/docuseal-form&gt;</span>
</code></pre>
@ -88,7 +88,7 @@
<div id="react_1" class="block my-4 hidden">
<div class="mockup-code overflow-hidden pb-0 mt-4">
<span class="top-0 right-0 absolute flex">
<%= link_to t('learn_more'), console_redirect_index_path(redir: "#{Wabosign::CONSOLE_URL}/embedding/form"), target: '_blank', data: { turbo: false }, class: 'btn btn-ghost text-gray-100 flex', rel: 'noopener' %>
<%= link_to t(:learn_more), "#{Wabosign::PRODUCT_URL}/docs/embedding", target: "_blank", data: { turbo: false }, class: "btn btn-ghost text-gray-100 flex", rel: "noopener" %>
<clipboard-copy data-text="import React from &quot;react&quot;
import { DocusealForm } from '@docuseal/react'
@ -135,7 +135,7 @@ export function App() {
<div id="vue_1" class="block my-4 hidden">
<div class="mockup-code overflow-hidden pb-0 mt-4">
<span class="top-0 right-0 absolute flex">
<%= link_to t('learn_more'), console_redirect_index_path(redir: "#{Wabosign::CONSOLE_URL}/embedding/form"), target: '_blank', data: { turbo: false }, class: 'btn btn-ghost text-gray-100 flex', rel: 'noopener' %>
<%= link_to t(:learn_more), "#{Wabosign::PRODUCT_URL}/docs/embedding", target: "_blank", data: { turbo: false }, class: "btn btn-ghost text-gray-100 flex", rel: "noopener" %>
<clipboard-copy data-text="<template>
<DocusealForm
:src=&quot;'<%= start_form_url(slug: template.slug) %>'&quot;
@ -193,7 +193,7 @@ export default {
<div id="angular_1" class="block my-4 hidden">
<div class="mockup-code overflow-hidden pb-0 mt-4">
<span class="top-0 right-0 absolute flex">
<%= link_to t('learn_more'), console_redirect_index_path(redir: "#{Wabosign::CONSOLE_URL}/embedding/form"), target: '_blank', data: { turbo: false }, class: 'btn btn-ghost text-gray-100 flex', rel: 'noopener' %>
<%= link_to t(:learn_more), "#{Wabosign::PRODUCT_URL}/docs/embedding", target: "_blank", data: { turbo: false }, class: "btn btn-ghost text-gray-100 flex", rel: "noopener" %>
<clipboard-copy data-text="import { Component } from '@angular/core';
import { DocusealFormComponent } from '@docuseal/angular';

@ -66,7 +66,6 @@ Rails.application.routes.draw do
resources :timestamp_server, only: %i[create]
resources :dashboard, only: %i[index]
resources :setup, only: %i[index create]
resources :enquiries, only: %i[create]
resources :users, only: %i[new create edit update destroy] do
resource :send_reset_password, only: %i[update], controller: 'users_send_reset_password'
end
@ -80,9 +79,6 @@ Rails.application.routes.draw do
resources :download, only: %i[index], controller: 'submissions_download'
end
resources :submitters, only: %i[edit update]
resources :console_redirect, only: %i[index]
resources :upgrade, only: %i[index], controller: 'console_redirect'
resources :manage, only: %i[index], controller: 'console_redirect'
resource :testing_account, only: %i[create destroy]
resources :testing_api_settings, only: %i[index]
resources :submitters_autocomplete, only: %i[index]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -3,7 +3,7 @@
### Example Code
```javascript
<script src="https://docuseal.com/js/builder.js"></script>
<script src="https://sign.wabo.cc/js/builder.js"></script>
<docuseal-builder
data-token="<%= JWT.encode({

@ -13,7 +13,7 @@ import { DocusealFormComponent } from '@docuseal/angular';
template: `
<div class="app">
<docuseal-form
[src]="'https://docuseal.com/d/{{template_slug}}'"
[src]="'https://sign.wabo.cc/d/{{template_slug}}'"
[email]="'{{signer_email}}'">
</docuseal-form>
</div>
@ -162,7 +162,7 @@ export class AppComponent {}
"type": "string",
"required": false,
"description": "URL to redirect to after the submission completion.",
"example": "https://docuseal.com/success"
"example": "https://sign.wabo.cc/success"
},
"completedMessage": {
"type": "object",

@ -3,11 +3,11 @@
### Example Code
```javascript
<script src="https://cdn.docuseal.com/js/form.js"></script>
<script src="https://sign.wabo.cc/js/form.js"></script>
<docuseal-form
id="docusealForm"
data-src="https://docuseal.com/d/{{ template_slug }}"
data-src="https://sign.wabo.cc/d/{{ template_slug }}"
data-email="{{ signer_email }}">
</docuseal-form>
@ -240,7 +240,7 @@
"type": "string",
"required": false,
"description": "URL to redirect to after the submission completion.",
"example": "https://docuseal.com/success"
"example": "https://sign.wabo.cc/success"
},
"data-completed-message-title": {
"type": "string",

@ -10,7 +10,7 @@ export function App() {
return (
<div className="app">
<DocusealForm
src="https://docuseal.com/d/{{template_slug}}"
src="https://sign.wabo.cc/d/{{template_slug}}"
email="{{signer_email}}"
onComplete={(data) => console.log(data)}
/>
@ -159,7 +159,7 @@ export function App() {
"type": "string",
"required": false,
"description": "URL to redirect to after the submission completion.",
"example": "https://docuseal.com/success"
"example": "https://sign.wabo.cc/success"
},
"completedMessage": {
"type": "object",

@ -5,7 +5,7 @@
```vue
<template>
<DocusealForm
:src="'https://docuseal.com/d/{{template_slug}}'"
:src="'https://sign.wabo.cc/d/{{template_slug}}'"
:email="'{{signer_email}}'"
@complete="onFormComplete"
/>
@ -227,7 +227,7 @@ export default {
"type": "string",
"required": false,
"description": "URL to redirect to after the submission completion.",
"example": "https://docuseal.com/success"
"example": "https://sign.wabo.cc/success"
},
"completed-message": {
"type": "object",

@ -572,8 +572,8 @@
{
"id": 5,
"uuid": "d94e615f-76e3-46d5-8f98-36bdacb8664a",
"url": "https://docuseal.com/file/hash/sample-document.pdf",
"preview_image_url": "https://docuseal.com/file/hash/0.jpg",
"url": "https://sign.wabo.cc/file/hash/sample-document.pdf",
"preview_image_url": "https://sign.wabo.cc/file/hash/0.jpg",
"filename": "example-document.pdf"
}
]
@ -1018,8 +1018,8 @@
{
"id": 5,
"uuid": "d94e615f-76e3-46d5-8f98-36bdacb8664a",
"url": "https://docuseal.com/file/hash/sample-document.pdf",
"preview_image_url": "https://docuseal.com/file/hash/0.jpg",
"url": "https://sign.wabo.cc/file/hash/sample-document.pdf",
"preview_image_url": "https://sign.wabo.cc/file/hash/0.jpg",
"filename": "example-document.pdf"
}
]
@ -1600,7 +1600,7 @@
"submitters_order": "random",
"slug": "VyL4szTwYoSvXq",
"status": "completed",
"audit_log_url": "https://docuseal.com/file/hash/example.pdf",
"audit_log_url": "https://sign.wabo.cc/file/hash/example.pdf",
"combined_document_url": null,
"expire_at": null,
"completed_at": "2023-12-10T15:49:21.895Z",
@ -1665,7 +1665,7 @@
"Submissions"
],
"summary": "Create a submission",
"description": "This API endpoint allows you to create signature requests (submissions) for a document template and send them to the specified submitters (signers).<br><b>Related Guides</b><br><a href=\"https://www.docuseal.com/guides/send-documents-for-signature-via-api\" class=\"link\">Send documents for signature via API</a><br><a href=\"https://www.docuseal.com/guides/pre-fill-pdf-document-form-fields-with-api\" class=\"link\">Pre-fill PDF document form fields with API</a>",
"description": "This API endpoint allows you to create signature requests (submissions) for a document template and send them to the specified submitters (signers).<br><b>Related Guides</b><br><a href=\"https://sign.wabo.cc/guides/send-documents-for-signature-via-api\" class=\"link\">Send documents for signature via API</a><br><a href=\"https://sign.wabo.cc/guides/pre-fill-pdf-document-form-fields-with-api\" class=\"link\">Pre-fill PDF document form fields with API</a>",
"operationId": "createSubmission",
"parameters": [],
"requestBody": {
@ -1681,7 +1681,7 @@
"properties": {
"template_id": {
"type": "integer",
"description": "The unique identifier of the template. Document template forms can be created via the Web UI, <a href=\"https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form\" class=\"link\">PDF and DOCX API</a>, or <a href=\"https://www.docuseal.com/guides/create-pdf-document-fillable-form-with-html-api\" class=\"link\">HTML API</a>.",
"description": "The unique identifier of the template. Document template forms can be created via the Web UI, <a href=\"https://sign.wabo.cc/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form\" class=\"link\">PDF and DOCX API</a>, or <a href=\"https://sign.wabo.cc/guides/create-pdf-document-fillable-form-with-html-api\" class=\"link\">HTML API</a>.",
"example": 1000001
},
"send_email": {
@ -2264,7 +2264,7 @@
"send_sms": false
},
"role": "First Party",
"embed_src": "https://docuseal.com/s/pAMimKcyrLjqVt"
"embed_src": "https://sign.wabo.cc/s/pAMimKcyrLjqVt"
}
]
}
@ -2723,7 +2723,7 @@
"source": "link",
"submitters_order": "random",
"slug": "VyL4szTwYoSvXq",
"audit_log_url": "https://docuseal.com/blobs/proxy/hash/example.pdf",
"audit_log_url": "https://sign.wabo.cc/blobs/proxy/hash/example.pdf",
"combined_document_url": null,
"completed_at": "2023-12-14T15:49:21.701Z",
"expire_at": null,
@ -2757,7 +2757,7 @@
"documents": [
{
"name": "example",
"url": "https://docuseal.com/blobs/proxy/hash/example.pdf"
"url": "https://sign.wabo.cc/blobs/proxy/hash/example.pdf"
}
],
"role": "First Party"
@ -2789,7 +2789,7 @@
"documents": [
{
"name": "example",
"url": "https://docuseal.com/file/hash/example.pdf"
"url": "https://sign.wabo.cc/file/hash/example.pdf"
}
],
"status": "completed"
@ -2924,7 +2924,7 @@
"documents": [
{
"name": "example",
"url": "https://docuseal.com/file/hash/example.pdf"
"url": "https://sign.wabo.cc/file/hash/example.pdf"
}
]
}
@ -3204,7 +3204,7 @@
"send_sms": false
},
"role": "First Party",
"embed_src": "https://docuseal.com/s/pAMimKcyrLjqVt"
"embed_src": "https://sign.wabo.cc/s/pAMimKcyrLjqVt"
},
{
"id": 2,
@ -3256,7 +3256,7 @@
"Submissions"
],
"summary": "Create a submission from PDF",
"description": "The API endpoint provides the functionality to create one-off submission request from a PDF. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href=\"https://www.docuseal.com/examples/fieldtags.pdf\" target=\"_blank\" class=\"link font-bold\">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href=\"https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form\" class=\"link\">Use embedded text field tags to create a fillable form</a>\n",
"description": "The API endpoint provides the functionality to create one-off submission request from a PDF. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href=\"https://sign.wabo.cc/examples/fieldtags.pdf\" target=\"_blank\" class=\"link font-bold\">https://sign.wabo.cc/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href=\"https://sign.wabo.cc/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form\" class=\"link\">Use embedded text field tags to create a fillable form</a>\n",
"operationId": "createSubmissionFromPdf",
"parameters": [],
"requestBody": {
@ -4220,7 +4220,7 @@
"completed_redirect_url": "https://example.com/"
},
"role": "First Party",
"embed_src": "https://docuseal.com/s/pAMimKcyrLjqVt"
"embed_src": "https://sign.wabo.cc/s/pAMimKcyrLjqVt"
}
],
"source": "api",
@ -4271,7 +4271,7 @@
"Submissions"
],
"summary": "Create a submission from DOCX",
"description": "The API endpoint provides functionality to create a one-off submission request from a DOCX file with dynamic content variables. Use <code>[[variable_name]]</code> text tags to define dynamic content variables in the document. See <a href=\"https://www.docuseal.com/examples/demo_template.docx\" target=\"_blank\" class=\"link font-bold\">https://www.docuseal.com/examples/demo_template.docx</a> for the specific text variable syntax, including dynamic content tables and list. You can also use the <code>{{signature}}</code> field syntax to define fillable fields, as in a PDF.<br><b>Related Guides</b><br><a href=\"https://www.docuseal.com/guides/use-dynamic-content-variables-in-docx-to-create-personalized-documents\" class=\"link\">Use dynamic content variables in DOCX to create personalized documents</a>",
"description": "The API endpoint provides functionality to create a one-off submission request from a DOCX file with dynamic content variables. Use <code>[[variable_name]]</code> text tags to define dynamic content variables in the document. See <a href=\"https://sign.wabo.cc/examples/demo_template.docx\" target=\"_blank\" class=\"link font-bold\">https://sign.wabo.cc/examples/demo_template.docx</a> for the specific text variable syntax, including dynamic content tables and list. You can also use the <code>{{signature}}</code> field syntax to define fillable fields, as in a PDF.<br><b>Related Guides</b><br><a href=\"https://sign.wabo.cc/guides/use-dynamic-content-variables-in-docx-to-create-personalized-documents\" class=\"link\">Use dynamic content variables in DOCX to create personalized documents</a>",
"operationId": "createSubmissionFromDocx",
"parameters": [],
"requestBody": {
@ -5133,7 +5133,7 @@
"completed_redirect_url": "https://example.com/"
},
"role": "First Party",
"embed_src": "https://docuseal.com/s/pAMimKcyrLjqVt"
"embed_src": "https://sign.wabo.cc/s/pAMimKcyrLjqVt"
}
],
"source": "api",
@ -5184,7 +5184,7 @@
"Submissions"
],
"summary": "Create a submission from HTML",
"description": "This API endpoint allows you to create a one-off submission request document using the provided HTML content, with special field tags rendered as a fillable and signable form.<br><b>Related Guides</b><br><a href=\"https://www.docuseal.com/guides/create-pdf-document-fillable-form-with-html-api\" class=\"link\">Create PDF document fillable form with HTML</a>",
"description": "This API endpoint allows you to create a one-off submission request document using the provided HTML content, with special field tags rendered as a fillable and signable form.<br><b>Related Guides</b><br><a href=\"https://sign.wabo.cc/guides/create-pdf-document-fillable-form-with-html-api\" class=\"link\">Create PDF document fillable form with HTML</a>",
"operationId": "createSubmissionFromHtml",
"parameters": [],
"requestBody": {
@ -6061,7 +6061,7 @@
"completed_redirect_url": "https://example.com/"
},
"role": "First Party",
"embed_src": "https://docuseal.com/s/pAMimKcyrLjqVt"
"embed_src": "https://sign.wabo.cc/s/pAMimKcyrLjqVt"
}
],
"source": "api",
@ -6439,7 +6439,7 @@
"documents": [
{
"name": "sample-document",
"url": "https://docuseal.com/file/hash/sample-document.pdf"
"url": "https://sign.wabo.cc/file/hash/sample-document.pdf"
}
],
"role": "First Party"
@ -6459,7 +6459,7 @@
"Submitters"
],
"summary": "Update a submitter",
"description": "The API endpoint allows you to update submitter details, pre-fill or update field values and re-send emails.<br><b>Related Guides</b><br><a href=\"https://www.docuseal.com/guides/pre-fill-pdf-document-form-fields-with-api#automatically_sign_documents_via_api\" class=\"link\">Automatically sign documents via API</a>",
"description": "The API endpoint allows you to update submitter details, pre-fill or update field values and re-send emails.<br><b>Related Guides</b><br><a href=\"https://sign.wabo.cc/guides/pre-fill-pdf-document-form-fields-with-api#automatically_sign_documents_via_api\" class=\"link\">Automatically sign documents via API</a>",
"operationId": "updateSubmitter",
"parameters": [
{
@ -6975,7 +6975,7 @@
],
"documents": [],
"role": "First Party",
"embed_src": "https://docuseal.com/s/pAMimKcyrLjqVt"
"embed_src": "https://sign.wabo.cc/s/pAMimKcyrLjqVt"
}
}
}
@ -7401,7 +7401,7 @@
"documents": [
{
"name": "sample-document",
"url": "https://docuseal.com/file/eyJfcmFpbHMiOnsiIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--f9758362acced0f3c86cdffad02800e/sample-document.pdf"
"url": "https://sign.wabo.cc/file/eyJfcmFpbHMiOnsiIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--f9758362acced0f3c86cdffad02800e/sample-document.pdf"
}
],
"role": "First Party"
@ -7898,7 +7898,7 @@
{
"id": 3,
"uuid": "09a8bc73-a7a9-4fd9-8173-95752bdf0af5",
"url": "https://docuseal.com/file/hash/Test%20Template.pdf"
"url": "https://sign.wabo.cc/file/hash/Test%20Template.pdf"
}
]
}
@ -8358,7 +8358,7 @@
{
"id": 9,
"uuid": "ded62277-9705-4fac-b5dc-58325d4102eb",
"url": "https://docuseal.com/file/hash/sample-document.pdf",
"url": "https://sign.wabo.cc/file/hash/sample-document.pdf",
"filename": "sample-document.pdf"
}
]
@ -8380,7 +8380,7 @@
"Templates"
],
"summary": "Create a template from HTML",
"description": "The API endpoint provides the functionality to seamlessly generate a PDF document template by utilizing the provided HTML content while incorporating pre-defined fields.<br><b>Related Guides</b><br><a href=\"https://www.docuseal.com/guides/create-pdf-document-fillable-form-with-html-api\" class=\"link\">Create PDF document fillable form with HTML</a>",
"description": "The API endpoint provides the functionality to seamlessly generate a PDF document template by utilizing the provided HTML content while incorporating pre-defined fields.<br><b>Related Guides</b><br><a href=\"https://sign.wabo.cc/guides/create-pdf-document-fillable-form-with-html-api\" class=\"link\">Create PDF document fillable form with HTML</a>",
"operationId": "createTemplateFromHtml",
"parameters": [],
"requestBody": {
@ -8871,7 +8871,7 @@
{
"id": 3,
"uuid": "09a8bc73-a7a9-4fd9-8173-95752bdf0af5",
"url": "https://docuseal.com/file/hash/Test%20Template.pdf"
"url": "https://sign.wabo.cc/file/hash/Test%20Template.pdf"
}
]
}
@ -8892,7 +8892,7 @@
"Templates"
],
"summary": "Create a template from Word DOCX",
"description": "The API endpoint provides the functionality to create a fillable document template for existing Microsoft Word document. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href=\"https://www.docuseal.com/examples/fieldtags.docx\" target=\"_blank\" class=\"link font-bold\" >https://www.docuseal.com/examples/fieldtags.docx</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href=\"https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form\" class=\"link\">Use embedded text field tags to create a fillable form</a>\n",
"description": "The API endpoint provides the functionality to create a fillable document template for existing Microsoft Word document. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href=\"https://sign.wabo.cc/examples/fieldtags.docx\" target=\"_blank\" class=\"link font-bold\" >https://sign.wabo.cc/examples/fieldtags.docx</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href=\"https://sign.wabo.cc/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form\" class=\"link\">Use embedded text field tags to create a fillable form</a>\n",
"operationId": "createTemplateFromDocx",
"parameters": [],
"requestBody": {
@ -9595,7 +9595,7 @@
{
"id": 7,
"uuid": "48d2998f-266b-47e4-beb2-250ab7ccebdf",
"url": "https://docuseal.com/hash/DemoPDF.pdf"
"url": "https://sign.wabo.cc/hash/DemoPDF.pdf"
}
]
}
@ -9616,7 +9616,7 @@
"Templates"
],
"summary": "Create a template from PDF",
"description": "The API endpoint provides the functionality to create a fillable document template for a PDF file. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href=\"https://www.docuseal.com/examples/fieldtags.pdf\" target=\"_blank\" class=\"link font-bold\">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href=\"https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form\" class=\"link\">Use embedded text field tags to create a fillable form</a>\n",
"description": "The API endpoint provides the functionality to create a fillable document template for a PDF file. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href=\"https://sign.wabo.cc/examples/fieldtags.pdf\" target=\"_blank\" class=\"link font-bold\">https://sign.wabo.cc/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href=\"https://sign.wabo.cc/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form\" class=\"link\">Use embedded text field tags to create a fillable form</a>\n",
"operationId": "createTemplateFromPdf",
"parameters": [],
"requestBody": {
@ -10337,7 +10337,7 @@
{
"id": 7,
"uuid": "48d2998f-266b-47e4-beb2-250ab7ccebdf",
"url": "https://docuseal.com/file/hash/Demo%20PDF.pdf"
"url": "https://sign.wabo.cc/file/hash/Demo%20PDF.pdf"
}
]
}
@ -10816,7 +10816,7 @@
{
"id": 9,
"uuid": "ded62277-9705-4fac-b5dc-58325d4102eb",
"url": "https://docuseal.com/file/hash/sample-document.pdf",
"url": "https://sign.wabo.cc/file/hash/sample-document.pdf",
"filename": "sample-document.pdf"
}
]

@ -9,7 +9,7 @@ During the form filling and signing process, 3 types of events may occur and are
It's important to note that each of these events contain information available at the time of dispatch, so some data may be missing or incomplete depending on the specific event. Failed webhook requests (4xx, 5xx) are automatically retried multiple times within 48 hours (every 2^attempt minutes) for all production accounts.
**Related Guides**
[Download Signed Documents](https://www.docuseal.com/guides/download-signed-documents)
[Download Signed Documents](https://sign.wabo.cc/guides/download-signed-documents)
```json
{
@ -130,7 +130,7 @@ During the form filling and signing process, 3 types of events may occur and are
},
"combined_document_url": {
"type": "string",
"description": "The URL of the combined documents with audit log. Combined documents can be enabled via <a href=\"https://docuseal.com/settings/account\" target=\"_blank\" class=\"link\">/settings/accounts</a>."
"description": "The URL of the combined documents with audit log. Combined documents can be enabled via <a href=\"https://sign.wabo.cc/settings/account\" target=\"_blank\" class=\"link\">/settings/accounts</a>."
},
"status": {
"type": "string",

@ -3,7 +3,6 @@
module Wabosign
PRODUCT_URL = ENV.fetch('PRODUCT_URL', 'https://sign.wabo.cc')
PRODUCT_EMAIL_URL = ENV.fetch('PRODUCT_EMAIL_URL', PRODUCT_URL)
ENQUIRIES_URL = "#{PRODUCT_URL}/enquiries".freeze
PRODUCT_NAME = 'WaboSign'
# AGPLv3 §7(b) upstream attribution — must remain visible in interactive UIs.
UPSTREAM_NAME = 'DocuSeal'
@ -14,25 +13,6 @@ module Wabosign
HOST = ENV.fetch('HOST', 'localhost')
AATL_CERT_NAME = 'wabosign_aatl'
GOOGLE_DEFAULT_ACCOUNT_ID = ENV.fetch('GOOGLE_DEFAULT_ACCOUNT_ID', nil)
CONSOLE_URL = if Rails.env.development?
'http://console.localhost.io:3001'
elsif ENV['MULTITENANT'] == 'true'
"https://console.#{HOST}"
else
"https://console.#{HOST}"
end
CLOUD_URL = if Rails.env.development?
'http://localhost:3000'
else
PRODUCT_URL
end
CDN_URL = if Rails.env.development?
'http://localhost:3000'
elsif ENV['MULTITENANT'] == 'true'
"https://cdn.#{HOST}"
else
"https://cdn.#{HOST}"
end
CERTS = JSON.parse(ENV.fetch('CERTS', '{}'))
TIMESERVER_URL = ENV.fetch('TIMESERVER_URL', nil)

@ -1,6 +1,11 @@
{
"name": "docuseal",
"name": "wabosign",
"private": true,
"license": "AGPL-3.0-or-later",
"repository": {
"type": "git",
"url": "git+https://github.com/wabolabs/wabosign.git"
},
"dependencies": {
"@babel/core": "7.21.8",
"@babel/plugin-transform-runtime": "7.21.4",

@ -1091,7 +1091,7 @@ RSpec.describe 'Signing Form' do
expect(page).to have_content('This submission has multiple signers, which prevents the use of a sharing link ' \
"as it's unclear which signer is responsible for specific fields. " \
'To resolve this, follow this guide to define the default signer details.')
expect(page).to have_link('guide', href: 'https://www.docuseal.com/resources/pre-filling-recipients')
expect(page).to have_link('guide', href: 'https://sign.wabo.cc/docs/pre-filling-recipients')
end
it 'shows a "Not found" error message if a logged-out user associated with the template account opens the link' do

Loading…
Cancel
Save