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' diff --git a/app/controllers/publics_controller.rb b/app/controllers/publics_controller.rb index e6506c55e..91edf995d 100644 --- a/app/controllers/publics_controller.rb +++ b/app/controllers/publics_controller.rb @@ -11,12 +11,11 @@ class PublicsController < ApplicationController end def host_meta - @user = User.owner render 'host_meta', :layout => false, :content_type => 'application/xrd+xml' 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/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/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/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/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 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 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/app/models/user.rb b/app/models/user.rb index 7bb292491..28e750789 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(object.post_id)}") - unfriended_by friends.first(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,14 @@ class User self.password_confirmation = self.password end - def self.owner - User.first + def friend_by_id( id ) + friends.detect{|x| x.id == ensure_bson id } end - + + def group_by_id( id ) + groups.detect{|x| x.id == ensure_bson id } + end + protected def assign_key @@ -207,4 +211,7 @@ class User OpenSSL::PKey::RSA::generate 1024 end + def ensure_bson id + id.class == String ? BSON::ObjectID(id) : id + 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 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")