Commit c5f8d13ba068f49ada1ff9e96e1895b2aeb2beb3

Authored by Alessandro Beltrão
1 parent 6e7384c3

External user now using webfinger endpoint

Showing 1 changed file with 10 additions and 10 deletions   Show diff stats
app/models/concerns/external_user.rb
1 1 require 'ostruct'
  2 +require 'rails/commands/server'
2 3  
3 4 module ExternalUser
4 5 extend ActiveSupport::Concern
... ... @@ -18,11 +19,11 @@ module ExternalUser
18 19 module ClassMethods
19 20 def webfinger_lookup(login, domain, environment)
20 21 if login && domain && environment.has_federated_network?(domain)
21   - # Ask if network at <domain> has user with login <login>
22   - # FIXME: Make an actual request to the federated network, which should return nil if not found
23   - {
24   - login: login
25   - }
  22 + rails = Rails::Server.new
  23 + url = URI.parse('https://'+rails.options[:Host]+':'+rails.options[:Port].to_s+'/.well-known/webfinger?resource=acct:'+login+'@'+domain)
  24 + req = Net::HTTP::Get.new(url.to_s)
  25 + res = Net::HTTP.start(url.host, url.port) { |http| http.request(req) }
  26 + JSON.parse(res.body)
26 27 else
27 28 nil
28 29 end
... ... @@ -75,11 +76,10 @@ module ExternalUser
75 76 u = User.new
76 77 u.email = user['user']['email']
77 78 u.login = login
78   - # FIXME: Instead of the struct below, we should use the "webfinger" object returned by the webfinger_lookup method
79   - webfinger = OpenStruct.new(
80   - identifier: user['user']['person']['identifier'],
81   - name: user['user']['person']['name'],
82   - created_at: user['user']['person']['created_at'],
  79 + webfinger = OpenStruct.new(
  80 + identifier: webfinger['properties']['identifier'],
  81 + name: webfinger['titles']['name'],
  82 + created_at: webfinger['properties']['created_at'],
83 83 domain: domain,
84 84 email: user['user']['email']
85 85 )
... ...