mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-11-03 20:48:07 +00:00 
			
		
		
		
	chore: Increase character limit for external url fields (#7230)
- Increase the external url field validation to 2048 characters fixes: https://github.com/chatwoot/chatwoot/issues/7098
This commit is contained in:
		@@ -28,6 +28,7 @@ class AgentBot < ApplicationRecord
 | 
			
		||||
  enum bot_type: { webhook: 0, csml: 1 }
 | 
			
		||||
 | 
			
		||||
  validate :validate_agent_bot_config
 | 
			
		||||
  validates :outgoing_url, length: { maximum: Limits::URL_LENGTH_LIMIT }
 | 
			
		||||
 | 
			
		||||
  def available_name
 | 
			
		||||
    name
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ class Attachment < ApplicationRecord
 | 
			
		||||
  belongs_to :message
 | 
			
		||||
  has_one_attached :file
 | 
			
		||||
  validate :acceptable_file
 | 
			
		||||
  validates :external_url, length: { maximum: 1000 }
 | 
			
		||||
  validates :external_url, length: { maximum: Limits::URL_LENGTH_LIMIT }
 | 
			
		||||
  enum file_type: [:image, :audio, :video, :file, :location, :fallback, :share, :story_mention, :contact]
 | 
			
		||||
 | 
			
		||||
  def push_event_data
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,7 @@ class Channel::Api < ApplicationRecord
 | 
			
		||||
  has_secure_token :identifier
 | 
			
		||||
  has_secure_token :hmac_token
 | 
			
		||||
  validate :ensure_valid_agent_reply_time_window
 | 
			
		||||
  validates :webhook_url, length: { maximum: Limits::URL_LENGTH_LIMIT }
 | 
			
		||||
 | 
			
		||||
  def name
 | 
			
		||||
    'API'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,5 @@
 | 
			
		||||
module Limits
 | 
			
		||||
  BULK_ACTIONS_LIMIT = 100
 | 
			
		||||
  BULK_EXTERNAL_HTTP_CALLS_LIMIT = 25
 | 
			
		||||
  URL_LENGTH_LIMIT = 2048 # https://stackoverflow.com/questions/417142
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -12,4 +12,19 @@ RSpec.describe AgentBot do
 | 
			
		||||
    it_behaves_like 'access_tokenable'
 | 
			
		||||
    it_behaves_like 'avatarable'
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  context 'when it validates outgoing_url length' do
 | 
			
		||||
    let(:agent_bot) { create(:agent_bot) }
 | 
			
		||||
 | 
			
		||||
    it 'valid when within limit' do
 | 
			
		||||
      agent_bot.outgoing_url = 'a' * Limits::URL_LENGTH_LIMIT
 | 
			
		||||
      expect(agent_bot.valid?).to be true
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'invalid when crossed the limit' do
 | 
			
		||||
      agent_bot.outgoing_url = 'a' * (Limits::URL_LENGTH_LIMIT + 1)
 | 
			
		||||
      agent_bot.valid?
 | 
			
		||||
      expect(agent_bot.errors[:outgoing_url]).to include("is too long (maximum is #{Limits::URL_LENGTH_LIMIT} characters)")
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -11,14 +11,14 @@ RSpec.describe Attachment do
 | 
			
		||||
 | 
			
		||||
    context 'when it validates external url length' do
 | 
			
		||||
      it 'valid when within limit' do
 | 
			
		||||
        attachment.external_url = 'a' * 1000
 | 
			
		||||
        attachment.external_url = 'a' * Limits::URL_LENGTH_LIMIT
 | 
			
		||||
        expect(attachment.valid?).to be true
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it 'invalid when crossed the limit' do
 | 
			
		||||
        attachment.external_url = 'a' * 1500
 | 
			
		||||
        attachment.external_url = 'a' * (Limits::URL_LENGTH_LIMIT + 5)
 | 
			
		||||
        attachment.valid?
 | 
			
		||||
        expect(attachment.errors[:external_url]).to include('is too long (maximum is 1000 characters)')
 | 
			
		||||
        expect(attachment.errors[:external_url]).to include("is too long (maximum is #{Limits::URL_LENGTH_LIMIT} characters)")
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										23
									
								
								spec/models/channel/api_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								spec/models/channel/api_spec.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require 'rails_helper'
 | 
			
		||||
 | 
			
		||||
RSpec.describe Channel::Api do
 | 
			
		||||
  # This validation happens in ApplicationRecord
 | 
			
		||||
  describe 'length validations' do
 | 
			
		||||
    let(:channel_api) { create(:channel_api) }
 | 
			
		||||
 | 
			
		||||
    context 'when it validates webhook_url length' do
 | 
			
		||||
      it 'valid when within limit' do
 | 
			
		||||
        channel_api.webhook_url = 'a' * Limits::URL_LENGTH_LIMIT
 | 
			
		||||
        expect(channel_api.valid?).to be true
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it 'invalid when crossed the limit' do
 | 
			
		||||
        channel_api.webhook_url = 'a' * (Limits::URL_LENGTH_LIMIT + 1)
 | 
			
		||||
        channel_api.valid?
 | 
			
		||||
        expect(channel_api.errors[:webhook_url]).to include("is too long (maximum is #{Limits::URL_LENGTH_LIMIT} characters)")
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
		Reference in New Issue
	
	Block a user