Commit c5f8d13ba068f49ada1ff9e96e1895b2aeb2beb3
1 parent
6e7384c3
Exists in
federation-webfinger
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 | ) | ... | ... |