From 4ffa77a7c5e8c964dddc88776b8e196f38673e83 Mon Sep 17 00:00:00 2001
From: noellabo <noel.yoshiba@gmail.com>
Date: Thu, 9 Jan 2020 19:59:31 +0900
Subject: [PATCH] Impersonate request to mstdn.jp

---
 app/lib/request.rb                       | 8 +++++++-
 config/initializers/http_client_proxy.rb | 2 +-
 lib/mastodon/version.rb                  | 4 ++++
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/app/lib/request.rb b/app/lib/request.rb
index c476e7785b..43c59c962c 100644
--- a/app/lib/request.rb
+++ b/app/lib/request.rb
@@ -104,10 +104,16 @@ class Request
 
   def set_common_headers!
     @headers[REQUEST_TARGET]    = "#{@verb} #{@url.path}"
-    @headers['User-Agent']      = Mastodon::Version.user_agent
+    @headers['User-Agent']      = smuggling? ? Mastodon::Version.pseudo_user_agent : Mastodon::Version.user_agent
     @headers['Host']            = @url.host
     @headers['Date']            = Time.now.utc.httpdate
     @headers['Accept-Encoding'] = 'gzip' if @verb != :head
+    @headers['Referer']         = "https://#{@url.host}" if smuggling?
+  end
+
+  def smuggling?
+    should = @url.host.end_with?('mstdn.jp')
+    return !!should
   end
 
   def set_digest!
diff --git a/config/initializers/http_client_proxy.rb b/config/initializers/http_client_proxy.rb
index 9d7b16e69c..8b5ba05062 100644
--- a/config/initializers/http_client_proxy.rb
+++ b/config/initializers/http_client_proxy.rb
@@ -18,7 +18,7 @@ module Goldfinger
     to_hidden = /\.(onion|i2p)(:\d+)?$/.match(uri)
     raise Mastodon::HostValidationError, 'Instance does not support hidden service connections' if !Rails.configuration.x.access_to_hidden_service && to_hidden
     opts = { ssl: !to_hidden, headers: {} }.merge(Rails.configuration.x.http_client_proxy).merge(opts)
-    opts[:headers]['User-Agent'] ||= Mastodon::Version.user_agent
+    opts[:headers]['User-Agent'] ||= uri.match?(/mstdn\.jp/) ? Mastodon::Version.pseudo_user_agent : Mastodon::Version.user_agent
     Goldfinger::Client.new(uri, opts).finger
   end
 end
diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb
index f3ead6d8d9..eba1db6e59 100644
--- a/lib/mastodon/version.rb
+++ b/lib/mastodon/version.rb
@@ -56,5 +56,9 @@ module Mastodon
     def user_agent
       @user_agent ||= "#{HTTP::Request::USER_AGENT} (Mastodon/#{Version}; +http#{Rails.configuration.x.use_https ? 's' : ''}://#{Rails.configuration.x.web_domain}/)"
     end
+
+    def pseudo_user_agent
+      @pseudo_user_agent ||= 'Misskey/11.37.1 (https://misskey.noellabo.jp)'
+    end
   end
 end
-- 
GitLab