diff --git a/apps/api/Gemfile.lock b/apps/api/Gemfile.lock index 9e71115..b6ba1d1 100644 --- a/apps/api/Gemfile.lock +++ b/apps/api/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: ../libs/ruby/warp_engine specs: - warp_engine (0.8.0) + warp_engine (0.9.0) apipie-rails blueprinter rails (>= 8.0) diff --git a/apps/api/config/initializers/warp_engine.rb b/apps/api/config/initializers/warp_engine.rb index 17d45a8..64e81ef 100644 --- a/apps/api/config/initializers/warp_engine.rb +++ b/apps/api/config/initializers/warp_engine.rb @@ -8,6 +8,8 @@ Rails.application.config.to_prepare do c.site_url = Rails.configuration.x.site_url + c.ignored_user_agents = %w[warpstore/*] + c.ci_adapter = WarpEngine::CI::Woodpecker::Adapter.new( url: ENV["WOODPECKER_URL"], api_token: ENV["WOODPECKER_API_TOKEN"], diff --git a/libs/ruby/warp_engine/app/services/warp_engine/download_service.rb b/libs/ruby/warp_engine/app/services/warp_engine/download_service.rb index 194a7c7..9870797 100644 --- a/libs/ruby/warp_engine/app/services/warp_engine/download_service.rb +++ b/libs/ruby/warp_engine/app/services/warp_engine/download_service.rb @@ -40,6 +40,8 @@ module WarpEngine end def log_download(relative, asset:, ip:, user_agent:, referer:, subject:) + return if WarpEngine.config.ignored_user_agent?(user_agent) + download = WarpEngine::Download.create!( file_path: relative, release: asset&.release, diff --git a/libs/ruby/warp_engine/lib/warp_engine/configuration.rb b/libs/ruby/warp_engine/lib/warp_engine/configuration.rb index 63c2bae..f213c14 100644 --- a/libs/ruby/warp_engine/lib/warp_engine/configuration.rb +++ b/libs/ruby/warp_engine/lib/warp_engine/configuration.rb @@ -17,7 +17,8 @@ module WarpEngine :subject_resolver, :identity_verification_url, :device_code_ttl, - :device_code_interval + :device_code_interval, + :ignored_user_agents def initialize @site_url = nil @@ -37,6 +38,22 @@ module WarpEngine @identity_verification_url = nil @device_code_ttl = 600 @device_code_interval = 5 + @ignored_user_agents = [] + end + + def ignored_user_agent?(ua) + return false if ua.blank? + + @_ignored_ua_patterns ||= Array(@ignored_user_agents).map do |pattern| + pattern.is_a?(Regexp) ? pattern : Regexp.new("\\A#{Regexp.escape(pattern).gsub("\\*", ".*")}\\z", Regexp::IGNORECASE) + end + + @_ignored_ua_patterns.any? { |re| re.match?(ua) } + end + + def ignored_user_agents=(value) + @ignored_user_agents = value + @_ignored_ua_patterns = nil end end end diff --git a/libs/ruby/warp_engine/lib/warp_engine/version.rb b/libs/ruby/warp_engine/lib/warp_engine/version.rb index 75b0188..2829db1 100644 --- a/libs/ruby/warp_engine/lib/warp_engine/version.rb +++ b/libs/ruby/warp_engine/lib/warp_engine/version.rb @@ -1,5 +1,5 @@ module WarpEngine - VERSION = "0.8.0" + VERSION = "0.9.0" VERSION_HEADER = "WarpEngine-Version".freeze end