mirror of
https://github.com/docusealco/docuseal
synced 2026-11-06 15:02:33 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c9f39e7b1a | ||
|
|
1060aa84ba | ||
|
|
b6f68ddde3 | ||
|
|
12dd96e34c | ||
|
|
52ba415429 | ||
|
|
601c984f3f | ||
|
|
9d90304d9a | ||
|
|
788493c0a6 | ||
|
|
e1342860c4 |
No files matched your search
+1
-1
@@ -31,7 +31,7 @@ ENV BUNDLE_WITHOUT="development:test"
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
RUN apk add --no-cache build-base sqlite-dev libpq-dev mariadb-dev vips-dev vips-poppler vips-heif libc6-compat ttf-freefont
|
||||
RUN apk add --no-cache build-base sqlite-dev libpq-dev mariadb-dev vips-dev vips-poppler vips-heif libc6-compat ttf-freefont ttf-liberation && cp /usr/share/fonts/liberation/LiberationSans-Regular.ttf /LiberationSans-Regular.ttf && apk del ttf-liberation
|
||||
|
||||
COPY ./Gemfile ./Gemfile.lock ./
|
||||
|
||||
|
||||
@@ -1,11 +1,17 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class ConsoleRedirectController < ApplicationController
|
||||
skip_before_action :authenticate_user!
|
||||
|
||||
def index
|
||||
return redirect_to(new_user_session_path({ redir: params[:redir] }.compact)) if current_user.blank?
|
||||
|
||||
auth = JsonWebToken.encode(uuid: current_user.uuid,
|
||||
scope: :console,
|
||||
exp: 1.minute.from_now.to_i)
|
||||
|
||||
redirect_to("#{Docuseal::CONSOLE_URL}?#{{ auth: }.to_query}", allow_other_host: true)
|
||||
path = Addressable::URI.parse(params[:redir]).path if params[:redir].to_s.starts_with?(Docuseal::CONSOLE_URL)
|
||||
|
||||
redirect_to("#{Docuseal::CONSOLE_URL}#{path}?#{{ auth: }.to_query}", allow_other_host: true)
|
||||
end
|
||||
end
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
class RegistrationsController < Devise::RegistrationsController
|
||||
prepend_before_action :require_no_authentication, only: [:show]
|
||||
prepend_before_action :maybe_redirect_if_signed_in, only: [:show]
|
||||
|
||||
def show; end
|
||||
|
||||
@@ -13,6 +14,23 @@ class RegistrationsController < Devise::RegistrationsController
|
||||
|
||||
private
|
||||
|
||||
def after_sign_up_path_for(...)
|
||||
if params[:redir].present?
|
||||
return console_redirect_index_path(redir: params[:redir]) if params[:redir].starts_with?(Docuseal::CONSOLE_URL)
|
||||
|
||||
return params[:redir]
|
||||
end
|
||||
|
||||
super
|
||||
end
|
||||
|
||||
def maybe_redirect_if_signed_in
|
||||
return unless signed_in?
|
||||
return if params[:redir].blank?
|
||||
|
||||
redirect_to after_sign_up_path_for(current_user)
|
||||
end
|
||||
|
||||
def require_no_authentication
|
||||
super
|
||||
|
||||
|
||||
@@ -12,6 +12,16 @@ 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?(Docuseal::CONSOLE_URL)
|
||||
|
||||
return params[:redir]
|
||||
end
|
||||
|
||||
super
|
||||
end
|
||||
|
||||
def require_no_authentication
|
||||
super
|
||||
|
||||
|
||||
@@ -327,7 +327,7 @@ export default {
|
||||
onWindowResize (e) {
|
||||
const breakpointLg = 1024
|
||||
|
||||
this.isBreakpointLg = this.$el.getRootNode().children[0].offsetWidth < breakpointLg
|
||||
this.isBreakpointLg = this.$el.getRootNode().querySelector('div').offsetWidth < breakpointLg
|
||||
},
|
||||
setDocumentRefs (el) {
|
||||
if (el) {
|
||||
|
||||
@@ -31,8 +31,6 @@ class EncryptedConfig < ApplicationRecord
|
||||
|
||||
belongs_to :account
|
||||
|
||||
validates :key, inclusion: { in: CONFIG_KEYS }
|
||||
|
||||
encrypts :value
|
||||
|
||||
serialize :value, JSON
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
<div class="max-w-xl mx-auto px-2">
|
||||
<h1 class="text-3xl font-bold text-center my-8">Profile Details</h1>
|
||||
<%= form_for('', as: resource_name, html: { class: 'space-y-6' }, url: new_registration_path) do |f| %>
|
||||
<%= form_for('', as: resource_name, html: { class: 'space-y-6' }, data: { turbo: params[:redir].blank? }, url: new_registration_path) do |f| %>
|
||||
<% if params[:redir].present? %>
|
||||
<%= hidden_field_tag :redir, params[:redir] %>
|
||||
<% end %>
|
||||
<div class="space-y-2">
|
||||
<%= render 'devise/shared/error_messages', resource: %>
|
||||
<%= f.fields_for resource do |ff| %>
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
<div class="max-w-xl mx-auto px-2">
|
||||
<h1 class="text-3xl font-bold text-center my-8">Create Free Account</h1>
|
||||
<%= form_for(User.new, html: { class: 'space-y-6' }, url: new_registration_path, method: :get) do |f| %>
|
||||
<%= form_for(User.new, html: { class: 'space-y-6' }, url: new_registration_path, data: { turbo: params[:redir].blank? }, method: :get) do |f| %>
|
||||
<% if params[:redir].present? %>
|
||||
<%= hidden_field_tag :redir, params[:redir] %>
|
||||
<% end %>
|
||||
<div class="space-y-2">
|
||||
<div class="form-control">
|
||||
<%= f.label :email, class: 'label' %>
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
<div class="max-w-xl mx-auto px-2">
|
||||
<h1 class="text-4xl font-bold text-center my-8">Log In</h1>
|
||||
<%= form_for(resource, as: resource_name, html: { class: 'space-y-6' }, url: session_path(resource_name)) do |f| %>
|
||||
<%= form_for(resource, as: resource_name, html: { class: 'space-y-6' }, data: { turbo: params[:redir].blank? }, url: session_path(resource_name)) do |f| %>
|
||||
<% if params[:redir].present? %>
|
||||
<%= hidden_field_tag :redir, params[:redir] %>
|
||||
<% end %>
|
||||
<div class="space-y-2">
|
||||
<div class="form-control">
|
||||
<%= f.label :email, class: 'label' %>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<%= link_to 'Log in', new_session_path(resource_name), class: 'link link-hover' %>
|
||||
<% end %>
|
||||
<%- if devise_mapping.registerable? && controller_name != 'registrations' %>
|
||||
<%= link_to 'Create free account', registration_path, class: 'link link-hover' %>
|
||||
<%= link_to 'Create free account', registration_path({ redir: params[:redir] }.compact_blank), class: 'link link-hover' %>
|
||||
<% end %>
|
||||
<%- if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations' %>
|
||||
<%= link_to 'Forgot your password?', new_password_path(resource_name), class: 'link link-hover' %>
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<div class="alert my-4">
|
||||
<%= svg_icon('info_circle', class: 'w-6 h-6') %>
|
||||
<div>
|
||||
<p class="font-bold">Unlock with DocuSeal Enterprise</p>
|
||||
<p class="font-bold">Unlock with DocuSeal Pro</p>
|
||||
<p>
|
||||
Display your company name and logo when signing documents.
|
||||
<br>
|
||||
<a class="link font-medium" target="_blank" href="<%= "#{Docuseal::PRODUCT_URL}/pricing" %>">Learn More</a>
|
||||
<a class="link font-medium" target="_blank" href="<%= "#{Docuseal::CONSOLE_URL}/#{Docuseal.multitenant? ? 'plans' : 'on_premise'}" %>">Learn More</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -44,6 +44,7 @@ Rails.application.configure do
|
||||
# The :test delivery method accumulates sent emails in the
|
||||
# ActionMailer::Base.deliveries array.
|
||||
config.action_mailer.delivery_method = :test
|
||||
config.active_job.queue_adapter = :test
|
||||
|
||||
# Print deprecation notices to the stderr.
|
||||
config.active_support.deprecation = :stderr
|
||||
|
||||
+4
-2
@@ -17,8 +17,10 @@ Rails.application.routes.draw do
|
||||
devise_scope :user do
|
||||
if Docuseal.multitenant?
|
||||
resource :registration, only: %i[show], path: 'sign_up'
|
||||
resource :registration, only: %i[create], path: 'new' do
|
||||
get '' => :new, as: :new
|
||||
unauthenticated do
|
||||
resource :registration, only: %i[create], path: 'new' do
|
||||
get '' => :new, as: :new
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -15,6 +15,11 @@ module Docuseal
|
||||
else
|
||||
'https://console.docuseal.co'
|
||||
end
|
||||
CDN_URL = if Rails.env.development?
|
||||
'http://localhost:3000'
|
||||
else
|
||||
'https://cdn.docuseal.co'
|
||||
end
|
||||
|
||||
CERTS = JSON.parse(ENV.fetch('CERTS', '{}'))
|
||||
|
||||
|
||||
@@ -3,7 +3,12 @@
|
||||
module Submissions
|
||||
module GenerateResultAttachments
|
||||
FONT_SIZE = 11
|
||||
FONT_NAME = 'Helvetica'
|
||||
FONT_PATH = '/LiberationSans-Regular.ttf'
|
||||
FONT_NAME = if File.exist?(FONT_PATH)
|
||||
FONT_PATH
|
||||
else
|
||||
'Helvetica'
|
||||
end
|
||||
|
||||
INFO_CREATOR = "#{Docuseal::PRODUCT_NAME} (#{Docuseal::PRODUCT_URL})".freeze
|
||||
SIGN_REASON = 'Signed by %<email>s with DocuSeal.co'
|
||||
@@ -32,6 +37,7 @@ module Submissions
|
||||
|
||||
field.fetch('areas', []).each do |area|
|
||||
pdf = pdfs_index[area['attachment_uuid']]
|
||||
pdf.fonts.add(FONT_NAME)
|
||||
|
||||
page = pdf.pages[area['page']]
|
||||
|
||||
@@ -47,6 +53,7 @@ module Submissions
|
||||
next if Array.wrap(value).compact_blank.blank?
|
||||
|
||||
canvas = page.canvas(type: :overlay)
|
||||
canvas.font(FONT_NAME, size: font_size)
|
||||
|
||||
case field['type']
|
||||
when 'image', 'signature'
|
||||
|
||||
@@ -47,6 +47,7 @@ RSpec.configure do |config|
|
||||
|
||||
config.include FactoryBot::Syntax::Methods
|
||||
config.include Devise::Test::IntegrationHelpers
|
||||
config.include ActiveJob::TestHelper
|
||||
|
||||
config.before(:each, type: :system) do
|
||||
if ENV['HEADLESS'] == 'false'
|
||||
|
||||
@@ -17,7 +17,7 @@ RSpec.describe 'Personalization' do
|
||||
expect(page).to have_content('Form Completed Email')
|
||||
expect(page).to have_content('Documents Copy Email')
|
||||
expect(page).to have_content('Company Logo')
|
||||
expect(page).to have_content('Unlock with DocuSeal Enterprise')
|
||||
expect(page).to have_content('Unlock with DocuSeal Pro')
|
||||
expect(page).to have_content('Display your company name and logo when signing documents')
|
||||
end
|
||||
end
|
||||
@@ -81,15 +81,7 @@ RSpec.describe 'Submit Form' do
|
||||
|
||||
expect do
|
||||
click_on 'Submit'
|
||||
end.to change { ActionMailer::Base.deliveries.size }.by(1)
|
||||
|
||||
email = ActionMailer::Base.deliveries.last
|
||||
|
||||
expect(email.subject).to eq("#{submitter.email} has completed the \"#{template.name}\" form")
|
||||
|
||||
expect(email.body.encoded).to include "Hi #{user.first_name},"
|
||||
expect(email.body.encoded).to include "#{submitter.email} has completed the \"#{template.name}\" form."
|
||||
expect(email.body.encoded).to have_link('View Submission')
|
||||
end.to change(enqueued_jobs, :size).by(3)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in new issue
Block a user