From e84b25b3f51d0dccc40c07b1a64a971b6c19943d Mon Sep 17 00:00:00 2001 From: Raphael Date: Mon, 16 Aug 2010 10:31:39 -0700 Subject: [PATCH 01/12] Log the xml again --- app/models/user.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/models/user.rb b/app/models/user.rb index 7bb292491..9277e1e30 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -139,6 +139,7 @@ class User ###### Receiving ####### def receive xml + Rails.logger.info("Received xml is #{xml}") object = Diaspora::Parser.from_xml(xml) Rails.logger.debug("Receiving object:\n#{object.inspect}") From ad2d8f8b461e8c918f8917de32cee9196c47eda1 Mon Sep 17 00:00:00 2001 From: Raphael Date: Mon, 16 Aug 2010 10:37:07 -0700 Subject: [PATCH 02/12] Specify id field in the query whose result is passed to unfriended_by --- app/models/user.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/user.rb b/app/models/user.rb index 9277e1e30..b2122efa4 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -147,7 +147,7 @@ class User if object.type == 'Person' && object.signature_valid? Rails.logger.info( "the person id is #{object.post_id} the friend found is #{friends.first(object.post_id)}") - unfriended_by friends.first(object.post_id) + unfriended_by friends.first(:id => object.post_id) else object.perform self.id From 0e67ef8d7e3ab243595ebcdc7f62be7d5f02e2fe Mon Sep 17 00:00:00 2001 From: Raphael Date: Mon, 16 Aug 2010 10:38:36 -0700 Subject: [PATCH 03/12] Inspect the friend before calling unfriended by --- app/models/user.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index b2122efa4..306458485 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -139,14 +139,13 @@ class User ###### Receiving ####### def receive xml - Rails.logger.info("Received xml is #{xml}") object = Diaspora::Parser.from_xml(xml) Rails.logger.debug("Receiving object:\n#{object.inspect}") if object.is_a? Retraction if object.type == 'Person' && object.signature_valid? - Rails.logger.info( "the person id is #{object.post_id} the friend found is #{friends.first(object.post_id)}") + Rails.logger.info( "the person id is #{object.post_id} the friend found is #{friends.first(:id => object.post_id).inspect}") unfriended_by friends.first(:id => object.post_id) else From 26abc68236503e48c7edd63dd85f9a58ea5b4ebd Mon Sep 17 00:00:00 2001 From: Raphael Date: Mon, 16 Aug 2010 10:50:38 -0700 Subject: [PATCH 04/12] Use group_by_id or friend_by_id, no querying on friends or groups --- app/models/user.rb | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 306458485..1a3504120 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -45,7 +45,7 @@ class User self.pending_requests << request self.save - group = self.groups.first(:id => group_id) + group = self.group_by_id(group_id) group.requests << request group.save @@ -60,7 +60,7 @@ class User request = Request.where(:id => friend_request_id).first n = pending_requests.delete(request) - activate_friend(request.person, groups.first(:id => group_id)) + activate_friend(request.person, group_by_id(group_id)) request.reverse self @@ -82,7 +82,7 @@ class User def receive_friend_request(friend_request) Rails.logger.info("receiving friend request #{friend_request.to_json}") if request_from_me?(friend_request) - group = self.groups.first(:id => friend_request.group_id) + group = self.group_by_id(friend_request.group_id) activate_friend(friend_request.person, group) Rails.logger.info("#{self.real_name}'s friend request has been accepted") @@ -145,8 +145,8 @@ class User if object.is_a? Retraction if object.type == 'Person' && object.signature_valid? - Rails.logger.info( "the person id is #{object.post_id} the friend found is #{friends.first(:id => object.post_id).inspect}") - unfriended_by friends.first(:id => object.post_id) + Rails.logger.info( "the person id is #{object.post_id} the friend found is #{friend_by_id(object.post_id).inspect}") + unfriended_by friend_by_id(object.post_id) else object.perform self.id @@ -189,10 +189,13 @@ class User self.password_confirmation = self.password end - def self.owner - User.first + def friend_by_id( id ) + friends.detect{|x| x.id == id } + end + + def group_by_id( id ) + groups.detect{|x| x.id == id } end - protected def assign_key From 3efa36587aebb8089bb320afffcafc17f5d05b13 Mon Sep 17 00:00:00 2001 From: Raphael Date: Mon, 16 Aug 2010 11:01:58 -0700 Subject: [PATCH 05/12] Took out a bunch of user.owner references --- app/controllers/publics_controller.rb | 1 - app/helpers/application_helper.rb | 10 +++++----- app/models/blog.rb | 4 ++-- app/models/bookmark.rb | 4 ++-- app/models/status_message.rb | 4 ++-- spec/models/post_spec.rb | 11 ----------- 6 files changed, 11 insertions(+), 23 deletions(-) diff --git a/app/controllers/publics_controller.rb b/app/controllers/publics_controller.rb index e6506c55e..2b942541f 100644 --- a/app/controllers/publics_controller.rb +++ b/app/controllers/publics_controller.rb @@ -11,7 +11,6 @@ class PublicsController < ApplicationController end def host_meta - @user = User.owner render 'host_meta', :layout => false, :content_type => 'application/xrd+xml' end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index d6913a9e5..7f6a7bae2 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -32,7 +32,11 @@ module ApplicationHelper end def owner_image_tag - person_image_tag(User.owner) + person_image_tag(current_user) + end + + def owner_image_link + person_image_link(current_user) end def person_image_tag(person) @@ -46,10 +50,6 @@ module ApplicationHelper link_to person_image_tag(person), object_path(person) end - def owner_image_link - person_image_link(User.owner) - end - def new_request(request_count) "new_requests" if request_count > 0 end diff --git a/app/models/blog.rb b/app/models/blog.rb index 0df0dd558..3859cfa1e 100644 --- a/app/models/blog.rb +++ b/app/models/blog.rb @@ -15,8 +15,8 @@ class Blog < Post http://activitystrea.ms/schema/1.0/post #{self.title} #{self.body} - - #{User.owner.url}blogs/#{self.id} + + #{person.url}blogs/#{self.id} #{self.created_at.xmlschema} #{self.updated_at.xmlschema} diff --git a/app/models/bookmark.rb b/app/models/bookmark.rb index de1eb9258..677bfa126 100644 --- a/app/models/bookmark.rb +++ b/app/models/bookmark.rb @@ -17,9 +17,9 @@ class Bookmark < Post http://activitystrea.ms/schema/1.0/post #{self.title} - + - #{User.owner.url}bookmarks/#{self.id} + #{person.url}bookmarks/#{self.id} #{self.created_at.xmlschema} #{self.updated_at.xmlschema} diff --git a/app/models/status_message.rb b/app/models/status_message.rb index bf56410be..3fb9aa39d 100644 --- a/app/models/status_message.rb +++ b/app/models/status_message.rb @@ -13,8 +13,8 @@ class StatusMessage < Post http://activitystrea.ms/schema/1.0/post #{self.message} - - #{User.owner.url}status_messages/#{self.id} + + #{person.url}status_messages/#{self.id} #{self.created_at.xmlschema} #{self.updated_at.xmlschema} diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb index f013e1583..a20ffb504 100644 --- a/spec/models/post_spec.rb +++ b/spec/models/post_spec.rb @@ -6,17 +6,6 @@ describe Post do @user.person.save end - describe 'defaults' do - before do - WebSocket.stub!(:update_clients) - @post = Factory.create(:post, :person => nil) - end - - it "should associate the owner if none is present" do - @post.person.should == User.owner - end - end - describe "newest" do before do @person_one = Factory.create(:person, :email => "some@dudes.com") From eb793ea129003f1984b23733888f3b7f722b76c3 Mon Sep 17 00:00:00 2001 From: Raphael Date: Mon, 16 Aug 2010 11:07:18 -0700 Subject: [PATCH 06/12] Took out a couple more references to User.owner --- app/models/photo.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/models/photo.rb b/app/models/photo.rb index c06ceb62c..d93a1189a 100644 --- a/app/models/photo.rb +++ b/app/models/photo.rb @@ -37,7 +37,7 @@ class Photo < Post end def remote_photo - @remote_photo ||= User.owner.url.chop + image.url + @remote_photo ||= self.person.url.chop + image.url end def remote_photo= remote_path @@ -47,10 +47,10 @@ class Photo < Post end def ensure_user_picture - user = User.owner - if user.profile.image_url == image.url(:thumb_medium) + users = Person.all('profile.image_url' => image.url(:thumb_medium) ) + users.each{ |user| user.profile.update_attributes!(:image_url => nil) - end + } end def thumb_hash From 99fb383dc06ed78f39a77eb16ecc875ff1573acf Mon Sep 17 00:00:00 2001 From: Raphael Date: Mon, 16 Aug 2010 11:13:00 -0700 Subject: [PATCH 07/12] BSONify ids in by_id methods --- app/models/user.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 1a3504120..f22290e18 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -190,11 +190,11 @@ class User end def friend_by_id( id ) - friends.detect{|x| x.id == id } + friends.detect{|x| x.id == id || x.id == BSON::ObjectID(id) } end def group_by_id( id ) - groups.detect{|x| x.id == id } + groups.detect{|x| x.id == id || x.id == BSON::ObjectID(id) } end protected From 6ae4c31e050c2e67767b11ff4c668862a6e0d1f1 Mon Sep 17 00:00:00 2001 From: Raphael Date: Mon, 16 Aug 2010 11:18:52 -0700 Subject: [PATCH 08/12] Person show should be scoped through user --- app/controllers/people_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/people_controller.rb b/app/controllers/people_controller.rb index 5d0fc35fe..686a81b88 100644 --- a/app/controllers/people_controller.rb +++ b/app/controllers/people_controller.rb @@ -6,7 +6,7 @@ class PeopleController < ApplicationController end def show - @person= Person.where(:id => params[:id]).first + @person= current_user.friend_by_id(params[:id]) @person_profile = @person.profile @person_posts = Post.where(:person_id => @person.id).paginate :page => params[:page], :order => 'created_at DESC' From 4c731bf81871b778f2b7ba666f22013fc9eddbd6 Mon Sep 17 00:00:00 2001 From: Raphael Date: Mon, 16 Aug 2010 11:29:14 -0700 Subject: [PATCH 09/12] special-casing local webfinger --- app/controllers/publics_controller.rb | 2 +- app/helpers/requests_helper.rb | 13 ++++++++++--- app/models/person.rb | 6 +++++- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/app/controllers/publics_controller.rb b/app/controllers/publics_controller.rb index 2b942541f..91edf995d 100644 --- a/app/controllers/publics_controller.rb +++ b/app/controllers/publics_controller.rb @@ -15,7 +15,7 @@ class PublicsController < ApplicationController end def webfinger - @person = Person.first(:email => params[:q].gsub('acct:', '')) + @person = Person.by_webfinger(params[:q]) unless @person.nil? || @person.owner.nil? render 'webfinger', :layout => false, :content_type => 'application/xrd+xml' end diff --git a/app/helpers/requests_helper.rb b/app/helpers/requests_helper.rb index 99f73be66..478d9853b 100644 --- a/app/helpers/requests_helper.rb +++ b/app/helpers/requests_helper.rb @@ -26,9 +26,16 @@ module RequestsHelper end def relationship_flow(identifier) - f = Redfinger.finger(identifier) - action = subscription_mode(f) - url = subscription_url(action, f) + puts request.host + if identifier.include?(request.host) + person = Person.by_webfinger identifier + action = :friend + url = person.owner.receive_url + else + f = Redfinger.finger(identifier) + action = subscription_mode(f) + url = subscription_url(action, f) + end { action => url } end diff --git a/app/models/person.rb b/app/models/person.rb index cf4899a1e..50a3cc410 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -75,7 +75,7 @@ class Person false end - def send_comment c + def send_comment( c ) if self.owner.nil? if c.post.person.owner.nil? #puts "The commenter is not here, and neither is the poster" @@ -112,6 +112,10 @@ class Person "#{self.url}receive/users/#{self.id}/" end + def self.by_webfinger( identifier ) + Person.first(:email => identifier.gsub('acct:', '')) + end + protected def clean_url self.url ||= "http://localhost:3000/" if self.class == User From f4d6a04f4f40661f3b5da793ceb58d24dc56c998 Mon Sep 17 00:00:00 2001 From: Raphael Date: Mon, 16 Aug 2010 11:46:36 -0700 Subject: [PATCH 11/12] Get objects by bson id --- app/models/user.rb | 12 ++++++++++-- db/seeds/tom.rb | 8 -------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index f22290e18..647fe3172 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -190,12 +190,13 @@ class User end def friend_by_id( id ) - friends.detect{|x| x.id == id || x.id == BSON::ObjectID(id) } + friends.detect{|x| x.id == ensure_bson id } end def group_by_id( id ) - groups.detect{|x| x.id == id || x.id == BSON::ObjectID(id) } + groups.detect{|x| x.id == ensure_bson id } end + protected def assign_key @@ -210,4 +211,11 @@ class User OpenSSL::PKey::RSA::generate 1024 end + def ensure_bson id + if id.class == String + BSON::ObjectID(id) + else + id + end + end end diff --git a/db/seeds/tom.rb b/db/seeds/tom.rb index f171eb0f9..6f3e84582 100644 --- a/db/seeds/tom.rb +++ b/db/seeds/tom.rb @@ -1,11 +1,3 @@ -#This file should contain all the record creation needed to seed the database with its default values. -# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). -# -# Examples: -# -# cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }]) -# Mayor.create(:name => 'Daley', :city => citie - require 'config/environment' # Create seed user From a8b402636a29d3584dc4ff92de5daecd3a768a23 Mon Sep 17 00:00:00 2001 From: Raphael Date: Mon, 16 Aug 2010 11:47:23 -0700 Subject: [PATCH 12/12] Shorten ensure_bson --- app/models/user.rb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 647fe3172..28e750789 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -212,10 +212,6 @@ class User end def ensure_bson id - if id.class == String - BSON::ObjectID(id) - else - id - end + id.class == String ? BSON::ObjectID(id) : id end end