mirror of https://github.com/docusealco/docuseal
				
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							54 lines
						
					
					
						
							1.7 KiB
						
					
					
				
			
		
		
	
	
							54 lines
						
					
					
						
							1.7 KiB
						
					
					
				| # frozen_string_literal: true
 | |
| 
 | |
| class TimestampServerController < ApplicationController
 | |
|   before_action :build_encrypted_config
 | |
|   authorize_resource :encrypted_config
 | |
| 
 | |
|   def create
 | |
|     return head :not_found if Docuseal.multitenant?
 | |
| 
 | |
|     test_timeserver_url(@encrypted_config.value) if @encrypted_config.value.present?
 | |
| 
 | |
|     if @encrypted_config.value.present? ? @encrypted_config.save : @encrypted_config.delete
 | |
|       redirect_back fallback_location: settings_notifications_path, notice: 'Changes have been saved'
 | |
|     else
 | |
|       redirect_back fallback_location: settings_notifications_path, alert: 'Unable to save'
 | |
|     end
 | |
|   rescue HexaPDF::Error, SocketError, Submissions::TimestampHandler::TimestampError, OpenSSL::Timestamp::TimestampError
 | |
|     redirect_back fallback_location: settings_notifications_path, alert: 'Invalid Timeserver'
 | |
|   end
 | |
| 
 | |
|   private
 | |
| 
 | |
|   def test_timeserver_url(url)
 | |
|     pdf = HexaPDF::Document.new
 | |
|     pdf.pages.add
 | |
| 
 | |
|     pkcs = Accounts.load_signing_pkcs(current_account)
 | |
| 
 | |
|     pdf.sign(StringIO.new,
 | |
|              reason: 'Test',
 | |
|              certificate: pkcs.certificate,
 | |
|              key: pkcs.key,
 | |
|              signature_size: 10_000,
 | |
|              certificate_chain: pkcs.ca_certs || [],
 | |
|              timestamp_handler: Submissions::TimestampHandler.new(tsa_url: url))
 | |
|   end
 | |
| 
 | |
|   def load_encrypted_config
 | |
|     @encrypted_config
 | |
|   end
 | |
| 
 | |
|   def build_encrypted_config
 | |
|     @encrypted_config =
 | |
|       EncryptedConfig.find_or_initialize_by(account: current_account,
 | |
|                                             key: EncryptedConfig::TIMESTAMP_SERVER_URL_KEY)
 | |
| 
 | |
|     @encrypted_config.assign_attributes(encrypted_config_params)
 | |
|   end
 | |
| 
 | |
|   def encrypted_config_params
 | |
|     params.require(:encrypted_config).permit(:value)
 | |
|   end
 | |
| end
 |