From c5f8d13ba068f49ada1ff9e96e1895b2aeb2beb3 Mon Sep 17 00:00:00 2001 From: Alessandro Caetano Date: Tue, 7 Jun 2016 11:15:41 -0400 Subject: [PATCH] External user now using webfinger endpoint --- app/models/concerns/external_user.rb | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/app/models/concerns/external_user.rb b/app/models/concerns/external_user.rb index 0989232..cdbc929 100644 --- a/app/models/concerns/external_user.rb +++ b/app/models/concerns/external_user.rb @@ -1,4 +1,5 @@ require 'ostruct' +require 'rails/commands/server' module ExternalUser extend ActiveSupport::Concern @@ -18,11 +19,11 @@ module ExternalUser module ClassMethods def webfinger_lookup(login, domain, environment) if login && domain && environment.has_federated_network?(domain) - # Ask if network at has user with login - # FIXME: Make an actual request to the federated network, which should return nil if not found - { - login: login - } + rails = Rails::Server.new + url = URI.parse('https://'+rails.options[:Host]+':'+rails.options[:Port].to_s+'/.well-known/webfinger?resource=acct:'+login+'@'+domain) + req = Net::HTTP::Get.new(url.to_s) + res = Net::HTTP.start(url.host, url.port) { |http| http.request(req) } + JSON.parse(res.body) else nil end @@ -75,11 +76,10 @@ module ExternalUser u = User.new u.email = user['user']['email'] u.login = login - # FIXME: Instead of the struct below, we should use the "webfinger" object returned by the webfinger_lookup method - webfinger = OpenStruct.new( - identifier: user['user']['person']['identifier'], - name: user['user']['person']['name'], - created_at: user['user']['person']['created_at'], + webfinger = OpenStruct.new( + identifier: webfinger['properties']['identifier'], + name: webfinger['titles']['name'], + created_at: webfinger['properties']['created_at'], domain: domain, email: user['user']['email'] ) -- libgit2 0.21.2