forked from cybrespace/mastodon
		
	Clean up generation of account webfinger string (#1477)
* Consolidate webfinger string creation under Account#to_webfinger_s * Introduce Account#local_username_and_domain for consolidation
This commit is contained in:
		
							parent
							
								
									64dbde0dbf
								
							
						
					
					
						commit
						0687ab8ae3
					
				
					 9 changed files with 39 additions and 7 deletions
				
			
		| 
						 | 
					@ -53,7 +53,7 @@ class AccountsController < ApplicationController
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def webfinger_account_url
 | 
					  def webfinger_account_url
 | 
				
			||||||
    webfinger_url(resource: "acct:#{@account.acct}@#{Rails.configuration.x.local_domain}")
 | 
					    webfinger_url(resource: @account.to_webfinger_s)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def check_account_suspension
 | 
					  def check_account_suspension
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,7 @@ class RemoteFollowController < ApplicationController
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      session[:remote_follow] = @remote_follow.acct
 | 
					      session[:remote_follow] = @remote_follow.acct
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      redirect_to Addressable::Template.new(redirect_url_link.template).expand(uri: "#{@account.username}@#{Rails.configuration.x.local_domain}").to_s
 | 
					      redirect_to Addressable::Template.new(redirect_url_link.template).expand(uri: @account.to_webfinger_s).to_s
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
      render :new
 | 
					      render :new
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -39,7 +39,7 @@ class Settings::ExportsController < ApplicationController
 | 
				
			||||||
  def accounts_list_to_csv(list)
 | 
					  def accounts_list_to_csv(list)
 | 
				
			||||||
    CSV.generate do |csv|
 | 
					    CSV.generate do |csv|
 | 
				
			||||||
      list.each do |account|
 | 
					      list.each do |account|
 | 
				
			||||||
        csv << [(account.local? ? "#{account.username}@#{Rails.configuration.x.local_domain}" : account.acct)]
 | 
					        csv << [(account.local? ? account.local_username_and_domain : account.acct)]
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,7 +14,7 @@ class XrdController < ApplicationController
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def webfinger
 | 
					  def webfinger
 | 
				
			||||||
    @account = Account.find_local!(username_from_resource)
 | 
					    @account = Account.find_local!(username_from_resource)
 | 
				
			||||||
    @canonical_account_uri = "acct:#{@account.username}@#{Rails.configuration.x.local_domain}"
 | 
					    @canonical_account_uri = @account.to_webfinger_s
 | 
				
			||||||
    @magic_key = pem_to_magic_key(@account.keypair.public_key)
 | 
					    @magic_key = pem_to_magic_key(@account.keypair.public_key)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    respond_to do |format|
 | 
					    respond_to do |format|
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -160,7 +160,7 @@ module AtomBuilderHelper
 | 
				
			||||||
    object_type      xml, :person
 | 
					    object_type      xml, :person
 | 
				
			||||||
    uri              xml, TagManager.instance.uri_for(account)
 | 
					    uri              xml, TagManager.instance.uri_for(account)
 | 
				
			||||||
    name             xml, account.username
 | 
					    name             xml, account.username
 | 
				
			||||||
    email            xml, account.local? ? "#{account.acct}@#{Rails.configuration.x.local_domain}" : account.acct
 | 
					    email            xml, account.local? ? account.local_username_and_domain : account.acct
 | 
				
			||||||
    summary          xml, account.note
 | 
					    summary          xml, account.note
 | 
				
			||||||
    link_alternate   xml, TagManager.instance.url_for(account)
 | 
					    link_alternate   xml, TagManager.instance.url_for(account)
 | 
				
			||||||
    link_avatar      xml, account
 | 
					    link_avatar      xml, account
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,7 +20,7 @@ class AtomSerializer
 | 
				
			||||||
    append_element(author, 'activity:object-type', TagManager::TYPES[:person])
 | 
					    append_element(author, 'activity:object-type', TagManager::TYPES[:person])
 | 
				
			||||||
    append_element(author, 'uri', uri)
 | 
					    append_element(author, 'uri', uri)
 | 
				
			||||||
    append_element(author, 'name', account.username)
 | 
					    append_element(author, 'name', account.username)
 | 
				
			||||||
    append_element(author, 'email', account.local? ? "#{account.acct}@#{Rails.configuration.x.local_domain}" : account.acct)
 | 
					    append_element(author, 'email', account.local? ? account.local_username_and_domain : account.acct)
 | 
				
			||||||
    append_element(author, 'summary', account.note)
 | 
					    append_element(author, 'summary', account.note)
 | 
				
			||||||
    append_element(author, 'link', nil, rel: :alternate, type: 'text/html', href: TagManager.instance.url_for(account))
 | 
					    append_element(author, 'link', nil, rel: :alternate, type: 'text/html', href: TagManager.instance.url_for(account))
 | 
				
			||||||
    append_element(author, 'link', nil, rel: :avatar, type: account.avatar_content_type, 'media:width': 120, 'media:height': 120, href: full_asset_url(account.avatar.url(:original)))
 | 
					    append_element(author, 'link', nil, rel: :avatar, type: account.avatar_content_type, 'media:width': 120, 'media:height': 120, href: full_asset_url(account.avatar.url(:original)))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -120,6 +120,14 @@ class Account < ApplicationRecord
 | 
				
			||||||
    local? ? username : "#{username}@#{domain}"
 | 
					    local? ? username : "#{username}@#{domain}"
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def local_username_and_domain
 | 
				
			||||||
 | 
					    "#{username}@#{Rails.configuration.x.local_domain}"
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def to_webfinger_s
 | 
				
			||||||
 | 
					    "acct:#{local_username_and_domain}"
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def subscribed?
 | 
					  def subscribed?
 | 
				
			||||||
    !subscription_expires_at.blank?
 | 
					    !subscription_expires_at.blank?
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,7 +14,7 @@ RSpec.describe XrdController, type: :controller do
 | 
				
			||||||
    let(:alice) { Fabricate(:account, username: 'alice') }
 | 
					    let(:alice) { Fabricate(:account, username: 'alice') }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it 'returns http success when account can be found' do
 | 
					    it 'returns http success when account can be found' do
 | 
				
			||||||
      get :webfinger, params: { resource: "acct:#{alice.username}@#{Rails.configuration.x.local_domain}" }
 | 
					      get :webfinger, params: { resource: alice.to_webfinger_s }
 | 
				
			||||||
      expect(response).to have_http_status(:success)
 | 
					      expect(response).to have_http_status(:success)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -54,6 +54,30 @@ RSpec.describe Account, type: :model do
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe 'Local domain user methods' do
 | 
				
			||||||
 | 
					    around do |example|
 | 
				
			||||||
 | 
					      before = Rails.configuration.x.local_domain
 | 
				
			||||||
 | 
					      example.run
 | 
				
			||||||
 | 
					      Rails.configuration.x.local_domain = before
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    describe '#to_webfinger_s' do
 | 
				
			||||||
 | 
					      it 'returns a webfinger string for the account' do
 | 
				
			||||||
 | 
					        Rails.configuration.x.local_domain = 'example.com'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        expect(subject.to_webfinger_s).to eq 'acct:alice@example.com'
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    describe '#local_username_and_domain' do
 | 
				
			||||||
 | 
					      it 'returns the username and local domain for the account' do
 | 
				
			||||||
 | 
					        Rails.configuration.x.local_domain = 'example.com'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        expect(subject.local_username_and_domain).to eq 'alice@example.com'
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe '#acct' do
 | 
					  describe '#acct' do
 | 
				
			||||||
    it 'returns username for local users' do
 | 
					    it 'returns username for local users' do
 | 
				
			||||||
      expect(subject.acct).to eql 'alice'
 | 
					      expect(subject.acct).to eql 'alice'
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue