about summary refs log tree commit diff
path: root/app/controllers/xrd_controller.rb
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2017-03-28 11:23:33 +0200
committerEugen Rochko <eugen@zeonfederated.com>2017-03-28 11:25:43 +0200
commit1c6b02f936b984a17343b85a5cfb07ed93dd1cfb (patch)
tree1c07e9fb58d65000cdabf1548ee606a490aea8de /app/controllers/xrd_controller.rb
parent448a07cc3f4e4f6905b6b1c519c29d28b72bda2b (diff)
Fix #690 - Webfinger should handle new shortform profile URLs now (nice)
Diffstat (limited to 'app/controllers/xrd_controller.rb')
-rw-r--r--app/controllers/xrd_controller.rb11
1 files changed, 7 insertions, 4 deletions
diff --git a/app/controllers/xrd_controller.rb b/app/controllers/xrd_controller.rb
index 9e0277860..6db87cefc 100644
--- a/app/controllers/xrd_controller.rb
+++ b/app/controllers/xrd_controller.rb
@@ -36,11 +36,14 @@ class XrdController < ApplicationController
   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