From b058077cf0e4954f6f40504ca765dee6c0a3ef65 Mon Sep 17 00:00:00 2001 From: Earlopain <14981592+Earlopain@users.noreply.github.com> Date: Fri, 26 Apr 2024 15:57:56 +0200 Subject: [PATCH] [Misc] Add a method that returns the base url for network requests This makes it easier to stub in tests. Also add a method to the iqdb proxy to say if it is enabled or not and use it everywhere. --- app/controllers/iqdb_queries_controller.rb | 2 +- app/logical/cloudflare_service.rb | 6 +++++- app/logical/iqdb_proxy.rb | 10 +++++++++- app/models/post.rb | 8 ++------ app/views/posts/partials/show/_options.html.erb | 2 +- app/views/posts/show.html.erb | 2 +- test/functional/iqdb_queries_controller_test.rb | 2 +- test/unit/cloudflare_service_test.rb | 2 +- 8 files changed, 21 insertions(+), 13 deletions(-) diff --git a/app/controllers/iqdb_queries_controller.rb b/app/controllers/iqdb_queries_controller.rb index cd738eb29..c6dc0c763 100644 --- a/app/controllers/iqdb_queries_controller.rb +++ b/app/controllers/iqdb_queries_controller.rb @@ -50,6 +50,6 @@ class IqdbQueriesController < ApplicationController end def validate_enabled - raise FeatureUnavailable if Danbooru.config.iqdb_server.blank? + raise FeatureUnavailable unless IqdbProxy.enabled? end end diff --git a/app/logical/cloudflare_service.rb b/app/logical/cloudflare_service.rb index d00bfbc5e..a76ecf5e6 100644 --- a/app/logical/cloudflare_service.rb +++ b/app/logical/cloudflare_service.rb @@ -1,9 +1,13 @@ # frozen_string_literal: true module CloudflareService + def self.endpoint + "https://api.cloudflare.com/client/v4/ips" + end + def self.ips text, code = Cache.fetch("cloudflare_ips", expires_in: 24.hours) do - resp = HTTParty.get("https://api.cloudflare.com/client/v4/ips", Danbooru.config.httparty_options) + resp = HTTParty.get(endpoint, Danbooru.config.httparty_options) [resp.body, resp.code] end return [] if code != 200 diff --git a/app/logical/iqdb_proxy.rb b/app/logical/iqdb_proxy.rb index 85c07b3d9..5ca895d71 100644 --- a/app/logical/iqdb_proxy.rb +++ b/app/logical/iqdb_proxy.rb @@ -7,8 +7,16 @@ module IqdbProxy module_function + def endpoint + Danbooru.config.iqdb_server + end + + def enabled? + endpoint.present? + end + def make_request(path, request_type, params = {}) - url = URI.parse(Danbooru.config.iqdb_server) + url = URI.parse(endpoint) url.path = path HTTParty.send(request_type, url, { body: params.to_json, headers: { "Content-Type" => "application/json" } }) rescue Errno::ECONNREFUSED, Errno::EADDRNOTAVAIL, Errno::EHOSTUNREACH diff --git a/app/models/post.rb b/app/models/post.rb index 47c0c1e5c..3d7ea2249 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -1491,19 +1491,15 @@ class Post < ApplicationRecord extend ActiveSupport::Concern module ClassMethods - def iqdb_enabled? - Danbooru.config.iqdb_server.present? - end - def remove_iqdb(post_id) - if iqdb_enabled? + if IqdbProxy.enabled? IqdbRemoveJob.perform_later(post_id) end end end def update_iqdb_async - if Post.iqdb_enabled? && has_preview? + if IqdbProxy.enabled? && has_preview? IqdbUpdateJob.perform_later(id) end end diff --git a/app/views/posts/partials/show/_options.html.erb b/app/views/posts/partials/show/_options.html.erb index 0bf266f21..82f08ab61 100644 --- a/app/views/posts/partials/show/_options.html.erb +++ b/app/views/posts/partials/show/_options.html.erb @@ -48,7 +48,7 @@ <% end %> <% if CurrentUser.is_admin? %> - <% if Danbooru.config.iqdb_server.present? %> + <% if IqdbProxy.enabled? %>