Going toward pending requests

This commit is contained in:
maxwell 2010-08-09 17:21:41 -07:00
parent 82578ad80c
commit 56d7c67bbb
9 changed files with 56 additions and 25 deletions

View file

@ -18,8 +18,9 @@ class PublicsController < ApplicationController
end end
def receive def receive
user = User.first(:id => params[:id])
Rails.logger.info "PublicsController has received: #{params[:xml]}" Rails.logger.info "PublicsController has received: #{params[:xml]}"
store_objects_from_xml params[:xml] store_objects_from_xml params[:xml], user
render :nothing => true render :nothing => true
end end

View file

@ -29,7 +29,6 @@ module RequestsHelper
f = Redfinger.finger(identifier) f = Redfinger.finger(identifier)
action = subscription_mode(f) action = subscription_mode(f)
url = subscription_url(action, f) url = subscription_url(action, f)
{ action => url } { action => url }
end end

View file

@ -5,7 +5,6 @@ class Person
xml_accessor :_id xml_accessor :_id
xml_accessor :email xml_accessor :email
xml_accessor :url xml_accessor :url
xml_accessor :serialized_key
xml_accessor :profile, :as => Profile xml_accessor :profile, :as => Profile
@ -107,7 +106,6 @@ class Person
end end
def owns?(post) def owns?(post)
puts self.class
self.id == post.person.id self.id == post.person.id
end end

View file

@ -44,8 +44,8 @@ class Request
end end
#ENCRYPTION #ENCRYPTION
before_validation :sign_if_mine #before_validation :sign_if_mine
validates_true_for :creator_signature, :logic => lambda {self.verify_creator_signature} #validates_true_for :creator_signature, :logic => lambda {self.verify_creator_signature}
xml_accessor :creator_signature xml_accessor :creator_signature
key :creator_signature, String key :creator_signature, String

View file

@ -5,12 +5,12 @@ class User
:recoverable, :rememberable, :trackable, :validatable :recoverable, :rememberable, :trackable, :validatable
key :friend_ids, Array key :friend_ids, Array
key :pending_friend_ids, Array key :pending_request_ids, Array
one :person, :class_name => 'Person', :foreign_key => :owner_id one :person, :class_name => 'Person', :foreign_key => :owner_id
many :friends, :in => :friend_ids, :class_name => 'Person' many :friends, :in => :friend_ids, :class_name => 'Person'
many :pending_friends, :in => :pending_friend_ids, :class_name => 'Person' many :pending_requests, :in => :pending_request_ids, :class_name => 'Request'
before_validation_on_create :assign_key before_validation_on_create :assign_key
before_validation :do_bad_things before_validation :do_bad_things
@ -31,9 +31,12 @@ class User
######### Friend Requesting ######### Friend Requesting
def send_friend_request_to(friend_url) def send_friend_request_to(friend_url)
unless self.friends.find{ |x| x.url == friend_url}
unless self.friends.detect{ |x| x.url == friend_url}
p = Request.instantiate(:to => friend_url, :from => self.person) p = Request.instantiate(:to => friend_url, :from => self.person)
if p.save if p.save
self.pending_requests << p
self.save
p.push_to_url friend_url p.push_to_url friend_url
end end
p p
@ -42,7 +45,7 @@ class User
def accept_friend_request(friend_request_id) def accept_friend_request(friend_request_id)
request = Request.where(:id => friend_request_id).first request = Request.where(:id => friend_request_id).first
n = pending_friends.delete(request.person) n = pending_requests.delete(request)
friends << request.person friends << request.person
save save
@ -57,12 +60,15 @@ class User
def ignore_friend_request(friend_request_id) def ignore_friend_request(friend_request_id)
request = Request.first(:id => friend_request_id) request = Request.first(:id => friend_request_id)
person = request.person person = request.person
pending_friends.delete(request.person) pending_requests.delete(request)
save
person.destroy unless person.user_refs > 0 person.destroy unless person.user_refs > 0
request.destroy request.destroy
end end
def receive_friend_request(friend_request) def receive_friend_request(friend_request)
puts friend_request.inspect
Rails.logger.info("receiving friend request #{friend_request.to_json}") Rails.logger.info("receiving friend request #{friend_request.to_json}")
friend_request.person.serialized_key = friend_request.exported_key friend_request.person.serialized_key = friend_request.exported_key
@ -72,7 +78,7 @@ class User
friend_request.destroy friend_request.destroy
else else
friend_request.person.save friend_request.person.save
pending_friends << friend_request.person pending_requests << friend_request
save save
Rails.logger.info("#{self.real_name} has received a friend request") Rails.logger.info("#{self.real_name} has received a friend request")
friend_request.save friend_request.save

View file

@ -25,7 +25,7 @@ Diaspora::Application.routes.draw do |map|
#public routes #public routes
match 'receive', :to => 'publics#receive' match 'receive/users/:id', :to => 'publics#receive'
match '.well-known/host-meta',:to => 'publics#host_meta' match '.well-known/host-meta',:to => 'publics#host_meta'
match 'webfinger', :to => 'publics#webfinger' match 'webfinger', :to => 'publics#webfinger'
match 'hcard', :to => 'publics#hcard' match 'hcard', :to => 'publics#hcard'

View file

@ -42,7 +42,7 @@ module Diaspora
objects objects
end end
def store_objects_from_xml(xml) def store_objects_from_xml(xml, user)
objects = parse_objects_from_xml(xml) objects = parse_objects_from_xml(xml)
objects.each do |p| objects.each do |p|
Rails.logger.info("Receiving object:\n#{p.inspect}") Rails.logger.info("Receiving object:\n#{p.inspect}")
@ -50,7 +50,7 @@ module Diaspora
Rails.logger.info "Got a retraction for #{p.post_id}" Rails.logger.info "Got a retraction for #{p.post_id}"
p.perform p.perform
elsif p.is_a? Request elsif p.is_a? Request
User.owner.receive_friend_request(p) user.receive_friend_request(p)
elsif p.is_a? Profile elsif p.is_a? Profile
p.save p.save
elsif p.respond_to?(:person) && !(p.person.nil?) && !(p.person.is_a? User) elsif p.respond_to?(:person) && !(p.person.nil?) && !(p.person.is_a? User)

View file

@ -10,15 +10,38 @@ describe PublicsController do
end end
describe 'receive endpoint' do describe 'receive endpoint' do
it 'should have a and endpoint and return a 200 on successful receipt of a request' do
post :receive, :id =>@user.id
response.code.should == '200'
end
it 'should accept a post from another node and save the information' do
it 'should accept a post from anohter node and save the information' do
person = Factory.create(:person) person = Factory.create(:person)
message = StatusMessage.new(:message => 'foo', :person => person) message = StatusMessage.new(:message => 'foo', :person => person)
StatusMessage.all.count.should == 0 StatusMessage.all.count.should be 0
post :receive, {:xml => Post.build_xml_for(message)} post :receive, :id => @user.id, :xml => Post.build_xml_for(message)
StatusMessage.all.count.should == 1 StatusMessage.all.count.should be 1
end end
end end
it 'should save requests for the specified user (LOCAL)' do
@user2 = Factory.create(:user)
@user2.person.save
req = Request.instantiate(:from => @user2.person, :to => @user.person.url)
xml = Request.build_xml_for [req]
puts xml
req.delete
post :receive, :id =>@user.id, :xml => xml
@user2.pending_requests.count.should be 1
@user.pending_requests.count.should be 1
end
end end

View file

@ -39,6 +39,10 @@ describe User do
it 'should not be able to friend request an existing friend' do it 'should not be able to friend request an existing friend' do
friend = Factory.create(:person) friend = Factory.create(:person)
@user.friends << friend
@user.save
@user.send_friend_request_to( friend.url ).should be nil @user.send_friend_request_to( friend.url ).should be nil
end end
@ -52,27 +56,27 @@ describe User do
it 'should get the pending friends' do it 'should get the pending friends' do
person_one = Factory.create :person person_one = Factory.create :person
person_two = Factory.create :person person_two = Factory.create :person
@user.pending_friends.empty?.should be true @user.pending_requests.empty?.should be true
@user.friends.empty?.should be true @user.friends.empty?.should be true
request = Request.instantiate(:to => @user.url, :from => person_one) request = Request.instantiate(:to => @user.url, :from => person_one)
person_one.destroy person_one.destroy
@user.receive_friend_request request @user.receive_friend_request request
@user.pending_friends.size.should be 1 @user.pending_requests.size.should be 1
@user.friends.size.should be 0 @user.friends.size.should be 0
request_two = Request.instantiate(:to => @user.url, :from => person_two) request_two = Request.instantiate(:to => @user.url, :from => person_two)
person_two.destroy person_two.destroy
@user.receive_friend_request request_two @user.receive_friend_request request_two
@user.pending_friends.size.should be 2 @user.pending_requests.size.should be 2
@user.friends.size.should be 0 @user.friends.size.should be 0
@user.accept_friend_request request.id @user.accept_friend_request request.id
@user.pending_friends.size.should be 1 @user.pending_requests.size.should be 1
@user.friends.size.should be 1 @user.friends.size.should be 1
@user.ignore_friend_request request_two.id @user.ignore_friend_request request_two.id
@user.pending_friends.size.should be 0 @user.pending_requests.size.should be 0
@user.friends.size.should be 1 @user.friends.size.should be 1
end end
end end