end
def username_from_resource
- if resource_param.start_with?('acct:') || resource_param.include?('@')
- resource_param.split('@').first.gsub('acct:', '')
+ if resource_param =~ /\Ahttps?:\/\//
+ path_params = Rails.application.routes.recognize_path(resource_param)
+ raise ActiveRecord::RecordNotFound unless path_params[:controller] == 'users' && path_params[:action] == 'show'
+ path_params[:username]
else
- url = Addressable::URI.parse(resource_param)
- url.path.gsub('/users/', '')
+ username, domain = resource_param.gsub(/\Aacct:/, '').split('@')
+ raise ActiveRecord::RecordNotFound unless TagManager.instance.local_domain?(domain)
+ username
end
end
object @account
-attributes :id, :username, :acct, :display_name, :locked
+attributes :id, :username, :acct, :display_name, :locked, :created_at
node(:note) { |account| Formatter.instance.simplified_format(account) }
node(:url) { |account| TagManager.instance.url_for(account) }
let(:alice) { Fabricate(:account, username: 'alice') }
it 'returns http success when account can be found' do
- get :webfinger, params: { resource: "acct:#{alice.username}@anything.com" }
+ get :webfinger, params: { resource: "acct:#{alice.username}@#{Rails.configuration.x.local_domain}" }
expect(response).to have_http_status(:success)
end