mirror of https://github.com/docusealco/docuseal
				
				
				
			
							parent
							
								
									63e1246a11
								
							
						
					
					
						commit
						7912c9a1ee
					
				| @ -0,0 +1,38 @@ | ||||
| # frozen_string_literal: true | ||||
| 
 | ||||
| module Api | ||||
|   class SubmissionsController < ApiBaseController | ||||
|     def create | ||||
|       template = current_account.templates.find(params[:template_id]) | ||||
| 
 | ||||
|       submissions = | ||||
|         if params[:emails].present? | ||||
|           Submissions.create_from_emails(template:, | ||||
|                                          user: current_user, | ||||
|                                          send_email: params[:send_email] != 'false', | ||||
|                                          emails: params[:emails]) | ||||
|         else | ||||
|           Submissions.create_from_submitters(template:, | ||||
|                                              user: current_user, | ||||
|                                              send_email: params[:send_email] != 'false', | ||||
|                                              submissions_attrs: submissions_params[:submission]) | ||||
|         end | ||||
| 
 | ||||
|       submitters = submissions.flat_map(&:submitters) | ||||
| 
 | ||||
|       if params[:send_email] != 'false' | ||||
|         submitters.each do |submitter| | ||||
|           SubmitterMailer.invitation_email(submitter, message: params[:message]).deliver_later! | ||||
|         end | ||||
|       end | ||||
| 
 | ||||
|       render json: submitters | ||||
|     end | ||||
| 
 | ||||
|     private | ||||
| 
 | ||||
|     def submissions_params | ||||
|       params.permit(submission: [{ submitters: [%i[uuid name email]] }]) | ||||
|     end | ||||
|   end | ||||
| end | ||||
| @ -0,0 +1,22 @@ | ||||
| # frozen_string_literal: true | ||||
| 
 | ||||
| class AddUuidToUsers < ActiveRecord::Migration[7.0] | ||||
|   class MigrationUser < ApplicationRecord | ||||
|     self.table_name = 'users' | ||||
|   end | ||||
| 
 | ||||
|   def up | ||||
|     add_column :users, :uuid, :text | ||||
|     add_index :users, :uuid, unique: true | ||||
| 
 | ||||
|     MigrationUser.all.each do |user| | ||||
|       user.update_columns(uuid: SecureRandom.uuid) | ||||
|     end | ||||
| 
 | ||||
|     change_column_null :users, :uuid, false | ||||
|   end | ||||
| 
 | ||||
|   def down | ||||
|     drop_column :users, :uuid | ||||
|   end | ||||
| end | ||||
| @ -0,0 +1,17 @@ | ||||
| # frozen_string_literal: true | ||||
| 
 | ||||
| class ApiPathConsiderJsonMiddleware | ||||
|   def initialize(app) | ||||
|     @app = app | ||||
|   end | ||||
| 
 | ||||
|   def call(env) | ||||
|     if env['PATH_INFO'].starts_with?('/api') && | ||||
|        !env['PATH_INFO'].ends_with?('/documents') && | ||||
|        !env['PATH_INFO'].ends_with?('/attachments') | ||||
|       env['CONTENT_TYPE'] = 'application/json' | ||||
|     end | ||||
| 
 | ||||
|     @app.call(env) | ||||
|   end | ||||
| end | ||||
| @ -0,0 +1,21 @@ | ||||
| # frozen_string_literal: true | ||||
| 
 | ||||
| class AuthWithTokenStrategy < Devise::Strategies::Base | ||||
|   def valid? | ||||
|     request.headers['X-Auth-Token'].present? | ||||
|   end | ||||
| 
 | ||||
|   def authenticate! | ||||
|     payload = JsonWebToken.decode(request.headers['X-Auth-Token']) | ||||
| 
 | ||||
|     user = User.find_by(uuid: payload['uuid']) | ||||
| 
 | ||||
|     if user | ||||
|       success!(user) | ||||
|     else | ||||
|       fail!('Invalid token') | ||||
|     end | ||||
|   rescue JWT::VerificationError | ||||
|     fail!('Invalid token') | ||||
|   end | ||||
| end | ||||
| @ -0,0 +1,13 @@ | ||||
| # frozen_string_literal: true | ||||
| 
 | ||||
| module JsonWebToken | ||||
|   module_function | ||||
| 
 | ||||
|   def encode(payload) | ||||
|     JWT.encode(payload, Rails.application.secrets.secret_key_base) | ||||
|   end | ||||
| 
 | ||||
|   def decode(token) | ||||
|     JWT.decode(token, Rails.application.secrets.secret_key_base)[0] | ||||
|   end | ||||
| end | ||||
					Loading…
					
					
				
		Reference in new issue