end
def session_params
- { acct: session[:remote_follow] }
+ { acct: session[:remote_follow] || current_account&.username }
end
def set_body_classes
end
def session_params
- { acct: session[:remote_follow] }
+ { acct: session[:remote_follow] || current_account&.username }
end
def set_status
attr_accessor :acct, :addressable_template
- validates :acct, presence: true
+ validates :acct, presence: true, domain: { acct: true }
def initialize(attrs = {})
@acct = normalize_acct(attrs[:acct])
end
def subscribe_address_for(account)
- addressable_template.expand(uri: account.local_username_and_domain).to_s
+ addressable_template.expand(uri: ActivityPub::TagManager.instance.uri_for(account)).to_s
end
def interact_address_for(status)
end
[username, domain].compact.join('@')
+ rescue Addressable::URI::InvalidURIError
+ value
end
def fetch_template!
def validate_each(record, attribute, value)
return if value.blank?
- record.errors.add(attribute, I18n.t('domain_validator.invalid_domain')) unless compliant?(value)
+ domain = begin
+ if options[:acct]
+ value.split('@').last
+ else
+ value
+ end
+ end
+
+ record.errors.add(attribute, I18n.t('domain_validator.invalid_domain')) unless compliant?(domain)
end
private
def compliant?(value)
Addressable::URI.new.tap { |uri| uri.host = value }
- rescue Addressable::URI::InvalidURIError
+ rescue Addressable::URI::InvalidURIError, IDN::Idna::IdnaError
false
end
end
end
it 'redirects to the remote location' do
- address = "http://example.com/follow_me?acct=test_user%40#{Rails.configuration.x.local_domain}"
-
- expect(response).to redirect_to(address)
+ expect(response).to redirect_to("http://example.com/follow_me?acct=https%3A%2F%2F#{Rails.configuration.x.local_domain}%2Fusers%2Ftest_user")
end
end
end
subject { remote_follow.subscribe_address_for(account) }
it 'returns subscribe address' do
- is_expected.to eq 'https://quitter.no/main/ostatussub?profile=alice%40cb6e6126.ngrok.io'
+ is_expected.to eq 'https://quitter.no/main/ostatussub?profile=https%3A%2F%2Fcb6e6126.ngrok.io%2Fusers%2Falice'
end
end
end