From db0106f13c9a99cff29b2f71628a7e8151b2a21c Mon Sep 17 00:00:00 2001 From: Raphael Date: Wed, 1 Dec 2010 16:17:33 -0800 Subject: [PATCH] Rename EMWebfinger to Webfinger, clean up some related things --- app/controllers/people_controller.rb | 15 +++++----- app/controllers/requests_controller.rb | 2 +- app/models/comment.rb | 2 +- app/models/person.rb | 2 +- app/models/post.rb | 2 +- config/locales/diaspora/en.yml | 3 +- lib/diaspora/user/receiving.rb | 16 +++++------ lib/diaspora/{websocket.rb => web_socket.rb} | 0 lib/{em-webfinger.rb => webfinger.rb} | 30 +++++++++++--------- script/websocket_server.rb | 2 +- spec/controllers/people_controller_spec.rb | 7 +++++ spec/lib/em-webfinger_spec.rb | 14 ++++----- 12 files changed, 51 insertions(+), 44 deletions(-) rename lib/diaspora/{websocket.rb => web_socket.rb} (100%) rename lib/{em-webfinger.rb => webfinger.rb} (72%) diff --git a/app/controllers/people_controller.rb b/app/controllers/people_controller.rb index 0e28c3fb8..8bf68f9fa 100644 --- a/app/controllers/people_controller.rb +++ b/app/controllers/people_controller.rb @@ -116,14 +116,13 @@ class PeopleController < ApplicationController end end def webfinger(account, opts = {}) - finger = EMWebfinger.new(account) - finger.on_person do |response| - if response.class == Person - response.socket_to_uid(current_user.id, opts) - else - require File.join(Rails.root,'lib/diaspora/websocket') - Diaspora::WebSocket.queue_to_user(current_user.id, {:class => 'people', :status => 'fail', :query => account, :response => response}.to_json) - end + finger = Webfinger.new(account) + begin + result = finger.fetch + response.socket_to_uid(current_user.id, opts) + rescue + require File.join(Rails.root,'lib/diaspora/web_socket') + Diaspora::WebSocket.queue_to_user(current_user.id, {:class => 'people', :status => 'fail', :query => account, :response => I18n.t('people.webfinger.fail')}.to_json) end end end diff --git a/app/controllers/requests_controller.rb b/app/controllers/requests_controller.rb index c60fdb35b..3e1f2df51 100644 --- a/app/controllers/requests_controller.rb +++ b/app/controllers/requests_controller.rb @@ -2,7 +2,7 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. -require File.join(Rails.root, 'lib/em-webfinger') +require File.join(Rails.root, 'lib/webfinger') class RequestsController < ApplicationController before_filter :authenticate_user! diff --git a/app/models/comment.rb b/app/models/comment.rb index 524fcbf05..8d2dba86a 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -11,7 +11,7 @@ class HandleValidator < ActiveModel::Validator end class Comment - require File.join(Rails.root, 'lib/diaspora/websocket') + require File.join(Rails.root, 'lib/diaspora/web_socket') require File.join(Rails.root, 'lib/youtube_titles') include YoutubeTitles include MongoMapper::Document diff --git a/app/models/person.rb b/app/models/person.rb index ed0aa2ac3..8cbe00d7c 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -8,7 +8,7 @@ class Person include MongoMapper::Document include ROXML include Encryptor::Public - require File.join(Rails.root, 'lib/diaspora/websocket') + require File.join(Rails.root, 'lib/diaspora/web_socket') include Diaspora::Socketable xml_accessor :_id diff --git a/app/models/post.rb b/app/models/post.rb index d6c251540..dc3cc201a 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -4,7 +4,7 @@ class Post require File.join(Rails.root, 'lib/encryptable') - require File.join(Rails.root, 'lib/diaspora/websocket') + require File.join(Rails.root, 'lib/diaspora/web_socket') include MongoMapper::Document include ApplicationHelper include ROXML diff --git a/config/locales/diaspora/en.yml b/config/locales/diaspora/en.yml index 7f9876245..6c2215bfe 100644 --- a/config/locales/diaspora/en.yml +++ b/config/locales/diaspora/en.yml @@ -6,7 +6,6 @@ # See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. en: - settings: "Settings" profile: "Profile" account: "Account" @@ -302,6 +301,8 @@ en: add_contact: "add contact" index: results_for: "search results for" + webfinger: + fail: "Sorry, we couldn't find %{handle}." show: no_posts: "no posts to display!" incoming_request: "You have an incoming request from this person." diff --git a/lib/diaspora/user/receiving.rb b/lib/diaspora/user/receiving.rb index 48081d7a3..84def0f0a 100644 --- a/lib/diaspora/user/receiving.rb +++ b/lib/diaspora/user/receiving.rb @@ -1,23 +1,21 @@ -require File.join(Rails.root, 'lib/em-webfinger') +require File.join(Rails.root, 'lib/webfinger') module Diaspora module UserModules module Receiving def receive_salmon salmon_xml salmon = Salmon::SalmonSlap.parse salmon_xml, self - webfinger = EMWebfinger.new(salmon.author_email) + webfinger = Webfinger.new(salmon.author_email) begin salmon_author = webfinger.fetch rescue Exception => e Rails.logger.info("event=receive status=abort recipient=#{self.diaspora_handle} sender=#{salmon.author_email} reason='#{e.message}'") end - if salmon_author - if salmon.verified_for_key?(salmon_author.public_key) - self.receive(salmon.parsed_data, salmon_author) - else - Rails.logger.info("event=receive status=abort recipient=#{self.diaspora_handle} sender=#{salmon.author_email} reason='not_verified for key'") - end + if salmon.verified_for_key?(salmon_author.public_key) + self.receive(salmon.parsed_data, salmon_author) + else + Rails.logger.info("event=receive status=abort recipient=#{self.diaspora_handle} sender=#{salmon.author_email} reason='not_verified for key'") end end @@ -41,7 +39,7 @@ module Diaspora return end - e = EMWebfinger.new(object.diaspora_handle) + e = Webfinger.new(object.diaspora_handle) begin person = e.fetch diff --git a/lib/diaspora/websocket.rb b/lib/diaspora/web_socket.rb similarity index 100% rename from lib/diaspora/websocket.rb rename to lib/diaspora/web_socket.rb diff --git a/lib/em-webfinger.rb b/lib/webfinger.rb similarity index 72% rename from lib/em-webfinger.rb rename to lib/webfinger.rb index 14304a276..1fe7a6af5 100644 --- a/lib/em-webfinger.rb +++ b/lib/webfinger.rb @@ -1,33 +1,35 @@ require File.join(Rails.root, 'lib/hcard') require File.join(Rails.root, 'lib/webfinger_profile') -class EMWebfinger +class Webfinger + class WebfingerFailedError < RuntimeError; end TIMEOUT = 5 REDIRECTS = 3 OPTS = {:timeout => TIMEOUT, :redirects => REDIRECTS} def initialize(account) @account = account.strip.gsub('acct:','').to_s @ssl = true - Rails.logger.info("event=EMWebfinger status=initialized target=#{account}") - # Raise an error if identifier has a port number - #raise "Identifier is invalid" if(@account.strip.match(/\:\d+$/)) - # Raise an error if identifier is not a valid email (generous regexp) - #raise "Identifier is invalid" if !(@account=~ /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/) + Rails.logger.info("event=webfinger status=initialized target=#{account}") end def fetch person = Person.by_account_identifier(@account) if person - Rails.logger.info("event=EMWebfinger status=local target=#{@account}") + Rails.logger.info("event=webfinger status=success route=local target=#{@account}") return person - else - Rails.logger.info("event=EMWebfinger status=remote target=#{@account}") - - profile_url = get_xrd - webfinger_profile = get_webfinger_profile(profile_url) - fingered_person = make_person_from_webfinger(webfinger_profile) - fingered_person end + + profile_url = get_xrd + webfinger_profile = get_webfinger_profile(profile_url) + fingered_person = make_person_from_webfinger(webfinger_profile) + if fingered_person + Rails.logger.info("event=webfinger status=success route=remote target=#{@account}") + fingered_person + else + Rails.logger.info("event=webfinger status=failure route=remote target=#{@account}") + raise WebfingerFailedError.new(@account) + end + end private diff --git a/script/websocket_server.rb b/script/websocket_server.rb index 65b60dd69..f338916ad 100644 --- a/script/websocket_server.rb +++ b/script/websocket_server.rb @@ -3,7 +3,7 @@ # the COPYRIGHT file. require File.dirname(__FILE__) + '/../config/environment' -require File.dirname(__FILE__) + '/../lib/diaspora/websocket' +require File.dirname(__FILE__) + '/../lib/diaspora/web_socket' at_exit do begin diff --git a/spec/controllers/people_controller_spec.rb b/spec/controllers/people_controller_spec.rb index 0824652dc..cb1029be0 100644 --- a/spec/controllers/people_controller_spec.rb +++ b/spec/controllers/people_controller_spec.rb @@ -94,6 +94,13 @@ describe PeopleController do end end + describe '#retrieve_remote' do + it 'sockets a local user' do + Diaspora::WebSocket.should_receive(:queue_to_user).with(user.id, anything) + get :retrieve_remote, :diaspora_handle => user.diaspora_handle + end + end + describe '#update' do context 'with a profile photo set' do before do diff --git a/spec/lib/em-webfinger_spec.rb b/spec/lib/em-webfinger_spec.rb index c8c8c4710..3b44d2ed3 100644 --- a/spec/lib/em-webfinger_spec.rb +++ b/spec/lib/em-webfinger_spec.rb @@ -4,15 +4,15 @@ require 'spec_helper' -require File.join(Rails.root, 'lib/em-webfinger') +require File.join(Rails.root, 'lib/webfinger') -describe EMWebfinger do +describe Webfinger do let(:user1) { make_user } let(:user2) { make_user } let(:account) {"foo@tom.joindiaspora.com"} let(:person){ Factory(:person, :diaspora_handle => account)} - let(:finger){EMWebfinger.new(account)} + let(:finger){Webfinger.new(account)} let(:good_request) { FakeHttpRequest.new(:success)} @@ -32,12 +32,12 @@ describe EMWebfinger do describe '#intialize' do it 'sets account ' do - n = EMWebfinger.new("mbs348@gmail.com") + n = Webfinger.new("mbs348@gmail.com") n.instance_variable_get(:@account).should_not be nil end it 'should set ssl as the default' do - foo = EMWebfinger.new(account) + foo = Webfinger.new(account) foo.instance_variable_get(:@ssl).should be true end end @@ -83,13 +83,13 @@ describe EMWebfinger do RestClient.stub!(:get).and_return(diaspora_xrd, diaspora_finger, hcard_xml) #new_person = Factory.build(:person, :diaspora_handle => "tom@tom.joindiaspora.com") # http://tom.joindiaspora.com/.well-known/host-meta - f = EMWebfinger.new("tom@tom.joindiaspora.com").fetch + f = Webfinger.new("tom@tom.joindiaspora.com").fetch f.should be_valid end it 'should retry with http if https fails' do - f = EMWebfinger.new("tom@tom.joindiaspora.com") + f = Webfinger.new("tom@tom.joindiaspora.com") diaspora_xrd.stub!(:body).and_return(diaspora_xrd) RestClient.should_receive(:get).twice.and_return(nil, diaspora_xrd)