Browse Source

Support UTF-8 Characters in Domains During CSV Import (#20592)

* Support UTF-8 Characters in Domains During Import

* Update Changelong
Hampton Lintorn-Catlin 1 year ago
parent
commit
147d8bd8fc

+ 1 - 0
CHANGELOG.md

@@ -185,6 +185,7 @@ Some of the features in this release have been funded through the [NGI0 Discover
 - Fix `CDN_HOST` not being used in some asset URLs ([tribela](https://github.com/mastodon/mastodon/pull/18662))
 - Fix `CAS_DISPLAY_NAME`, `SAML_DISPLAY_NAME` and `OIDC_DISPLAY_NAME` being ignored ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18568))
 - Fix various typos in comments throughout the codebase ([luzpaz](https://github.com/mastodon/mastodon/pull/18604))
+- Fix CSV upload no longer breaks if an server domain includes UTF-8 characters ([HamptonMakes]())
 
 ### Security
 

+ 1 - 1
app/services/import_service.rb

@@ -136,7 +136,7 @@ class ImportService < BaseService
   end
 
   def import_data
-    Paperclip.io_adapters.for(@import.data).read
+    Paperclip.io_adapters.for(@import.data).read.force_encoding(Encoding::UTF_8)
   end
 
   def relations_map_for_account(account, account_ids)

+ 1 - 0
spec/fixtures/files/utf8-followers.txt

@@ -0,0 +1 @@
+@nare@թութ.հայ

+ 23 - 0
spec/services/import_service_spec.rb

@@ -172,6 +172,29 @@ RSpec.describe ImportService, type: :service do
     end
   end
 
+  # Based on the bug report 20571 where UTF-8 encoded domains were rejecting import of their users
+  #
+  # https://github.com/mastodon/mastodon/issues/20571
+  context 'utf-8 encoded domains' do
+    subject { ImportService.new }
+
+    let!(:nare)     { Fabricate(:account, username: 'nare', domain: 'թութ.հայ', locked: false, protocol: :activitypub, inbox_url: 'https://թութ.հայ/inbox') }
+
+    # Make sure to not actually go to the remote server
+    before do
+      stub_request(:post, "https://թութ.հայ/inbox").to_return(status: 200)
+    end
+
+    let(:csv) { attachment_fixture('utf8-followers.txt') }
+    let(:import) { Import.create(account: account, type: 'following', data: csv) }
+
+    it 'follows the listed account' do
+    expect(account.follow_requests.count).to eq 0
+      subject.call(import)
+      expect(account.follow_requests.count).to eq 1
+    end
+  end
+
   context 'import bookmarks' do
     subject { ImportService.new }