add service for purging files from cloudflare cache

This commit is contained in:
r888888888
2017-11-22 13:19:30 -08:00
parent 3e6cb67c57
commit 060762defa
3 changed files with 68 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
class CloudflareService
def key
Danbooru.config.cloudflare_key
end
def email
Danbooru.config.cloudflare_email
end
def zone
Danbooru.config.cloudflare_zone
end
def options
Danbooru.config.httparty_options.deep_merge(headers: {
"X-Auth-Email" => email,
"X-Auth-Key" => key,
"Content-Type" => "application/json",
"User-Agent" => "#{Danbooru.config.app_name}/#{Danbooru.config.version}"
})
end
def delete(md5, ext)
url = "https://api.cloudflare.com/client/v4/zones/#{zone}/purge_cache"
files = ["#{md5}.#{ext}", "preview/#{md5}.jpg", "sample/sample-#{md5}.jpg"].map do |name|
["danbooru", "safebooru"].map do |subdomain|
"http://#{subdomain}.donmai.us/data/#{name}"
end
end.flatten
body = {
"files" => files
}.to_json
HTTParty.delete(url, options.merge(body: body)) #, body: body)
end
end

View File

@@ -89,6 +89,11 @@ class Post < ApplicationRecord
RemoteFileManager.new(file_path).delete
RemoteFileManager.new(large_file_path).delete
RemoteFileManager.new(preview_file_path).delete
if Danbooru.config.cloudflare_key
md5, ext = File.basename(file_path).split(".")
CloudflareService.new.delete(md5, ext)
end
end
end

View File

@@ -0,0 +1,27 @@
require 'test_helper'
require 'webmock/minitest'
class CloudflareServiceTest < ActiveSupport::TestCase
def setup
super
Danbooru.config.stubs(:cloudflare_key).returns("xyz")
Danbooru.config.stubs(:cloudflare_email).returns("abc")
Danbooru.config.stubs(:cloudflare_zone).returns("123")
end
subject { CloudflareService.new }
context "#delete" do
setup do
stub_request(:any, "api.cloudflare.com")
end
should "make calls to cloudflare's api" do
subject.delete("md5", "png")
assert_requested(:delete, "https://api.cloudflare.com/client/v4/zones/123/purge_cache", times: 1) do |req|
req.body =~ /danbooru\.donmai\.us/ && req.body =~ /safebooru\.donmai\.us/ && req.body =~ /sample/ && req.body =~ /preview/
end
end
end
end