Requests are no longer tracked by id across servers, DELETED USELESS PUTS IN EM-WEBFINGER SPEC
This commit is contained in:
parent
2eef9f7ad1
commit
03b272db60
10 changed files with 74 additions and 82 deletions
|
|
@ -9,7 +9,6 @@ class Request
|
||||||
include Diaspora::Webhooks
|
include Diaspora::Webhooks
|
||||||
include ROXML
|
include ROXML
|
||||||
|
|
||||||
xml_reader :_id
|
|
||||||
xml_reader :diaspora_handle
|
xml_reader :diaspora_handle
|
||||||
xml_reader :destination_url
|
xml_reader :destination_url
|
||||||
xml_reader :callback_url
|
xml_reader :callback_url
|
||||||
|
|
@ -35,9 +34,11 @@ class Request
|
||||||
end
|
end
|
||||||
|
|
||||||
def reverse_for accepting_user
|
def reverse_for accepting_user
|
||||||
self.diaspora_handle = accepting_user.diaspora_handle
|
Request.new(
|
||||||
self.destination_url = self.callback_url
|
:diaspora_handle => accepting_user.diaspora_handle,
|
||||||
self.save
|
:destination_url => self.callback_url,
|
||||||
|
:callback_url => self.destination_url
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
|
||||||
|
|
@ -332,7 +332,7 @@ class User
|
||||||
else
|
else
|
||||||
u = User.find_by_email(opts[:email])
|
u = User.find_by_email(opts[:email])
|
||||||
if u.nil?
|
if u.nil?
|
||||||
elsif friends.include?(u.person)
|
elsif contact_for(u.person)
|
||||||
raise "You are already friends with this person"
|
raise "You are already friends with this person"
|
||||||
elsif not u.invited?
|
elsif not u.invited?
|
||||||
self.send_friend_request_to(u.person, aspect_object)
|
self.send_friend_request_to(u.person, aspect_object)
|
||||||
|
|
@ -368,7 +368,11 @@ class User
|
||||||
if invitable.inviters.include?(inviter)
|
if invitable.inviters.include?(inviter)
|
||||||
raise "You already invited this person"
|
raise "You already invited this person"
|
||||||
else
|
else
|
||||||
invitable.pending_requests << request
|
invitable.pending_requests << Request.create(
|
||||||
|
:diaspora_handle => request.diaspora_handle,
|
||||||
|
:callback_url => request.callback_url,
|
||||||
|
:destination_url => request.destination_url)
|
||||||
|
|
||||||
invitable.inviters << inviter
|
invitable.inviters << inviter
|
||||||
message = attributes.delete(:invite_message)
|
message = attributes.delete(:invite_message)
|
||||||
if message
|
if message
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,6 @@ module Diaspora
|
||||||
activate_friend(request.person, aspect_by_id(aspect_id))
|
activate_friend(request.person, aspect_by_id(aspect_id))
|
||||||
|
|
||||||
request.reverse_for(self)
|
request.reverse_for(self)
|
||||||
request
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def dispatch_friend_acceptance(request, requester)
|
def dispatch_friend_acceptance(request, requester)
|
||||||
|
|
@ -63,27 +62,26 @@ module Diaspora
|
||||||
def receive_friend_request(friend_request)
|
def receive_friend_request(friend_request)
|
||||||
Rails.logger.info("receiving friend request #{friend_request.to_json}")
|
Rails.logger.info("receiving friend request #{friend_request.to_json}")
|
||||||
|
|
||||||
from_me = request_from_me?(friend_request)
|
|
||||||
know_about_request = know_about_request?(friend_request)
|
|
||||||
destination_aspect = self.aspect_by_id(friend_request.aspect_id) if friend_request.aspect_id
|
|
||||||
|
|
||||||
#response from a friend request you sent
|
#response from a friend request you sent
|
||||||
if from_me && know_about_request && destination_aspect
|
if original_request = original_request(friend_request)
|
||||||
|
destination_aspect = self.aspect_by_id(original_request.aspect_id)
|
||||||
activate_friend(friend_request.person, destination_aspect)
|
activate_friend(friend_request.person, destination_aspect)
|
||||||
Rails.logger.info("#{self.real_name}'s friend request has been accepted")
|
Rails.logger.info("#{self.real_name}'s friend request has been accepted")
|
||||||
friend_request.destroy
|
friend_request.destroy
|
||||||
|
original_request.destroy
|
||||||
Notifier.request_accepted(self, friend_request.person, destination_aspect)
|
Notifier.request_accepted(self, friend_request.person, destination_aspect)
|
||||||
|
|
||||||
#this is a new friend request
|
#this is a new friend request
|
||||||
elsif !from_me
|
elsif !request_from_me?(friend_request)
|
||||||
self.pending_requests << friend_request
|
self.pending_requests << friend_request
|
||||||
self.save
|
self.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
|
||||||
Notifier.new_request(self, friend_request.person).deliver
|
Notifier.new_request(self, friend_request.person).deliver
|
||||||
else
|
else
|
||||||
Rails.logger.info("unsolicited friend request: #{friend_request.to_json}")
|
Rails.logger.info("#{self.real_name} is trying to receive a friend request from himself.")
|
||||||
end
|
end
|
||||||
|
friend_request
|
||||||
end
|
end
|
||||||
|
|
||||||
def unfriend(bad_friend)
|
def unfriend(bad_friend)
|
||||||
|
|
@ -128,11 +126,11 @@ module Diaspora
|
||||||
end
|
end
|
||||||
|
|
||||||
def request_from_me?(request)
|
def request_from_me?(request)
|
||||||
request.callback_url == person.receive_url
|
request.diaspora_handle == self.diaspora_handle
|
||||||
end
|
end
|
||||||
|
|
||||||
def know_about_request?(request)
|
def original_request(response)
|
||||||
pending_request_ids.include?(request.id.to_id) unless request.nil? || request.id.nil?
|
pending_requests.find_by_destination_url(response.callback_url) unless response.nil? || response.id.nil?
|
||||||
end
|
end
|
||||||
|
|
||||||
def requests_for_me
|
def requests_for_me
|
||||||
|
|
|
||||||
|
|
@ -84,8 +84,8 @@ module Diaspora
|
||||||
def receive_request request, person
|
def receive_request request, person
|
||||||
request.person = person
|
request.person = person
|
||||||
request.person.save!
|
request.person.save!
|
||||||
old_request = Request.find(request.id)
|
old_request = Request.find_by_diaspora_handle(request.diaspora_handle)
|
||||||
Rails.logger.info("I got a reqest_id #{request.id} with old request #{old_request.inspect}")
|
Rails.logger.info("I got a request from #{request.diaspora_handle} with old request #{old_request.inspect}")
|
||||||
request.aspect_id = old_request.aspect_id if old_request
|
request.aspect_id = old_request.aspect_id if old_request
|
||||||
request.save
|
request.save
|
||||||
receive_friend_request(request)
|
receive_friend_request(request)
|
||||||
|
|
|
||||||
|
|
@ -29,9 +29,9 @@ module HelperMethods
|
||||||
def friend_users(user1, aspect1, user2, aspect2)
|
def friend_users(user1, aspect1, user2, aspect2)
|
||||||
request = user1.send_friend_request_to(user2.person, aspect1)
|
request = user1.send_friend_request_to(user2.person, aspect1)
|
||||||
|
|
||||||
user2.receive request.to_diaspora_xml, user1.person
|
new_request = user2.receive request.to_diaspora_xml, user1.person
|
||||||
|
|
||||||
reversed_request = user2.accept_friend_request( request.id, aspect2.id)
|
reversed_request = user2.accept_friend_request( new_request.id, aspect2.id)
|
||||||
user1.reload
|
user1.reload
|
||||||
|
|
||||||
user1.receive reversed_request.to_diaspora_xml, user2.person
|
user1.receive reversed_request.to_diaspora_xml, user2.person
|
||||||
|
|
|
||||||
|
|
@ -60,9 +60,9 @@ describe Diaspora::Parser do
|
||||||
it "should activate the Person if I initiated a request to that url" do
|
it "should activate the Person if I initiated a request to that url" do
|
||||||
request = user.send_friend_request_to(user3.person, aspect)
|
request = user.send_friend_request_to(user3.person, aspect)
|
||||||
user.reload
|
user.reload
|
||||||
request.reverse_for user3
|
reversed = request.reverse_for user3
|
||||||
|
|
||||||
xml = user3.salmon(request).xml_for(user.person)
|
xml = user3.salmon(reversed).xml_for(user.person)
|
||||||
|
|
||||||
user3.delete
|
user3.delete
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ describe EMWebfinger do
|
||||||
let(:non_diaspora_hcard) {File.open(File.join(Rails.root, 'spec/fixtures/evan_hcard')).read}
|
let(:non_diaspora_hcard) {File.open(File.join(Rails.root, 'spec/fixtures/evan_hcard')).read}
|
||||||
|
|
||||||
context 'setup' do
|
context 'setup' do
|
||||||
let(:action){ Proc.new{|person| puts person.inspect }}
|
let(:action){ Proc.new{|person| person.inspect }}
|
||||||
|
|
||||||
describe '#intialize' do
|
describe '#intialize' do
|
||||||
it 'sets account ' do
|
it 'sets account ' do
|
||||||
|
|
@ -60,7 +60,7 @@ describe EMWebfinger do
|
||||||
n = EMWebfinger.new("mbs@gmail.com")
|
n = EMWebfinger.new("mbs@gmail.com")
|
||||||
n.stub(:fetch).and_return(true)
|
n.stub(:fetch).and_return(true)
|
||||||
|
|
||||||
n.on_person{|person| puts "foo"}
|
n.on_person{|person| 1+1}
|
||||||
n.instance_variable_get(:@callbacks).count.should be 1
|
n.instance_variable_get(:@callbacks).count.should be 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,10 +35,6 @@ describe Request do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'recognized when a request is not from me' do
|
it 'recognized when a request is not from me' do
|
||||||
deliverable = Object.new
|
|
||||||
deliverable.stub!(:deliver)
|
|
||||||
Notifier.stub!(:new_request).and_return(deliverable)
|
|
||||||
|
|
||||||
user2.receive_salmon(user.salmon(request).xml_for(user2.person))
|
user2.receive_salmon(user.salmon(request).xml_for(user2.person))
|
||||||
user2.reload
|
user2.reload
|
||||||
user2.request_from_me?(request).should == false
|
user2.request_from_me?(request).should == false
|
||||||
|
|
@ -47,36 +43,31 @@ describe Request do
|
||||||
|
|
||||||
context 'quering request through user' do
|
context 'quering request through user' do
|
||||||
it 'finds requests for that user' do
|
it 'finds requests for that user' do
|
||||||
deliverable = Object.new
|
len = user2.requests_for_me.size
|
||||||
deliverable.stub!(:deliver)
|
|
||||||
Notifier.stub!(:new_request).and_return(deliverable)
|
|
||||||
|
|
||||||
user2.receive_salmon(user.salmon(request).xml_for(user2.person))
|
user2.receive_salmon(user.salmon(request).xml_for(user2.person))
|
||||||
user2.reload
|
user2.reload.requests_for_me.size.should == len + 1
|
||||||
user2.requests_for_me.include?(request).should == true
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'serialization' do
|
describe 'serialization' do
|
||||||
|
before do
|
||||||
|
@request = user.send_friend_request_to person, aspect
|
||||||
|
@xml = @request.to_xml.to_s
|
||||||
|
end
|
||||||
it 'should not generate xml for the User as a Person' do
|
it 'should not generate xml for the User as a Person' do
|
||||||
request = user.send_friend_request_to person, aspect
|
@xml.should_not include user.person.profile.first_name
|
||||||
xml = request.to_xml.to_s
|
|
||||||
|
|
||||||
xml.should_not include user.person.profile.first_name
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should serialize the handle and not the sender' do
|
it 'should serialize the handle and not the sender' do
|
||||||
request = user.send_friend_request_to person, aspect
|
@xml.should include user.person.diaspora_handle
|
||||||
xml = request.to_xml.to_s
|
|
||||||
|
|
||||||
xml.should include user.person.diaspora_handle
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should not serialize the exported key' do
|
it 'should not serialize the exported key' do
|
||||||
request = user.send_friend_request_to person, aspect
|
@xml.should_not include user.person.exported_key
|
||||||
xml = request.to_xml.to_s
|
end
|
||||||
|
|
||||||
xml.should_not include user.person.exported_key
|
it 'does not serialize the id' do
|
||||||
|
@xml.should_not include @request.id.to_s
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ describe User do
|
||||||
it 'adds a pending request to the invited user' do
|
it 'adds a pending request to the invited user' do
|
||||||
invited_user = inviter.invite_user(:email => "marcy@example.com", :aspect_id => aspect.id)
|
invited_user = inviter.invite_user(:email => "marcy@example.com", :aspect_id => aspect.id)
|
||||||
invited_user.reload
|
invited_user.reload
|
||||||
invited_user.pending_requests.find_by_callback_url(inviter.receive_url).nil?.should == false
|
invited_user.pending_requests.find_by_callback_url(inviter.receive_url).should_not be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'adds a pending request to the inviter' do
|
it 'adds a pending request to the inviter' do
|
||||||
|
|
@ -72,7 +72,7 @@ describe User do
|
||||||
it 'throws if you try to add someone you"re friends with' do
|
it 'throws if you try to add someone you"re friends with' do
|
||||||
friend_users(inviter, aspect, another_user, wrong_aspect)
|
friend_users(inviter, aspect, another_user, wrong_aspect)
|
||||||
inviter.reload
|
inviter.reload
|
||||||
proc{inviter.invite_user(:email => another_user.email, :aspect_id => aspect.id)}.should raise_error /You are already friends with that person/
|
proc{inviter.invite_user(:email => another_user.email, :aspect_id => aspect.id)}.should raise_error /already friends/
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sends a friend request to a user with that email into the aspect' do
|
it 'sends a friend request to a user with that email into the aspect' do
|
||||||
|
|
@ -123,14 +123,18 @@ describe User do
|
||||||
:password_confirmation => "secret",
|
:password_confirmation => "secret",
|
||||||
:person => {:profile => {:first_name => "Bob",
|
:person => {:profile => {:first_name => "Bob",
|
||||||
:last_name => "Smith"}} )
|
:last_name => "Smith"}} )
|
||||||
u.pending_requests
|
|
||||||
u.pending_requests.count.should == 1
|
u.pending_requests.count.should == 1
|
||||||
request = u.pending_requests.first
|
|
||||||
|
received_request = u.pending_requests.first
|
||||||
|
|
||||||
aspect2 = u.aspects.create(:name => "dudes")
|
aspect2 = u.aspects.create(:name => "dudes")
|
||||||
|
|
||||||
|
reversed_request = u.accept_friend_request(received_request.id, aspect2.id)
|
||||||
u.reload
|
u.reload
|
||||||
inviter
|
|
||||||
inviter.receive_salmon(u.salmon(u.accept_friend_request(request.id, aspect2.id)).xml_for(inviter.person))
|
inviter.receive_salmon(u.salmon(reversed_request).xml_for(inviter.person))
|
||||||
inviter.contact_for(u.person).should_not be_nil
|
inviter.reload.contact_for(u.person).should_not be_nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -48,8 +48,9 @@ describe Diaspora::UserModules::Friending do
|
||||||
|
|
||||||
it 'should autoaccept a request the user sent' do
|
it 'should autoaccept a request the user sent' do
|
||||||
request = user.send_friend_request_to(user2.person, aspect)
|
request = user.send_friend_request_to(user2.person, aspect)
|
||||||
request.reverse_for(user2)
|
proc{
|
||||||
proc{user.receive_friend_request(request)}.should change(user.reload.friends, :count).by(1)
|
user.receive_friend_request(request.reverse_for(user2))
|
||||||
|
}.should change(user.reload.friends, :count).by(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -76,25 +77,19 @@ describe Diaspora::UserModules::Friending do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should ignore a friend request from yourself' do
|
it 'should ignore a friend request from yourself' do
|
||||||
|
reversed_request = request_from_myself.reverse_for(user)
|
||||||
|
|
||||||
user.pending_requests.delete_all
|
user.pending_requests.delete_all
|
||||||
user.save
|
user.save
|
||||||
request = user.send_friend_request_to(user.person, aspect)
|
|
||||||
request.reverse_for(user)
|
|
||||||
request.aspect_id = nil
|
|
||||||
user.pending_requests.delete_all
|
|
||||||
user.save
|
|
||||||
|
|
||||||
proc { user.receive_friend_request(request) }.should change(
|
proc { user.receive_friend_request(reversed_request)
|
||||||
|
}.should change(user.reload.pending_requests, :count).by(0)
|
||||||
user.reload.pending_requests, :count ).by(0)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
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_users(user, aspect, user2, aspect2)
|
friend_users(user, aspect, user2, aspect2)
|
||||||
|
proc { user.send_friend_request_to(user2.person, aspect1) }.should raise_error /already friends/
|
||||||
proc { user.send_friend_request_to(user2.person, aspect1) }.should raise_error
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should not be able to friend request yourself' do
|
it 'should not be able to friend request yourself' do
|
||||||
|
|
@ -104,8 +99,7 @@ describe Diaspora::UserModules::Friending do
|
||||||
it 'should send an email on acceptance if a friend request' do
|
it 'should send an email on acceptance if a friend request' do
|
||||||
Notifier.should_receive(:request_accepted)
|
Notifier.should_receive(:request_accepted)
|
||||||
request = user.send_friend_request_to(user2.person, aspect)
|
request = user.send_friend_request_to(user2.person, aspect)
|
||||||
request.reverse_for(user2)
|
user.receive_friend_request(request.reverse_for(user2))
|
||||||
user.receive_friend_request(request)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -132,18 +126,18 @@ describe Diaspora::UserModules::Friending do
|
||||||
|
|
||||||
context 'request from one remote person to one local user' do
|
context 'request from one remote person to one local user' do
|
||||||
before do
|
before do
|
||||||
user2.receive @req_three_xml, user.person
|
@received_request = user2.receive @req_three_xml, user.person
|
||||||
end
|
end
|
||||||
it 'should befriend the user other user on the same pod' do
|
it 'should befriend the user other user on the same pod' do
|
||||||
proc {
|
proc {
|
||||||
user2.accept_friend_request @request_three.id, aspect2.id
|
user2.accept_friend_request @received_request.id, aspect2.id
|
||||||
}.should_not change(Person, :count)
|
}.should_not change(Person, :count)
|
||||||
user2.contact_for(user.person).should_not be_nil
|
user2.contact_for(user.person).should_not be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should not delete the ignored user on the same pod' do
|
it 'should not delete the ignored user on the same pod' do
|
||||||
proc {
|
proc {
|
||||||
user2.ignore_friend_request @request_three.id
|
user2.ignore_friend_request @received_request.id
|
||||||
}.should_not change(Person, :count)
|
}.should_not change(Person, :count)
|
||||||
user2.contact_for(user.person).should be_nil
|
user2.contact_for(user.person).should be_nil
|
||||||
end
|
end
|
||||||
|
|
@ -158,24 +152,24 @@ describe Diaspora::UserModules::Friending do
|
||||||
|
|
||||||
context 'Two users receiving requests from one person' do
|
context 'Two users receiving requests from one person' do
|
||||||
before do
|
before do
|
||||||
user.receive @req_xml, person_one
|
@req_to_user = user.receive @req_xml, person_one
|
||||||
user2.receive @req_two_xml, person_one
|
@req_to_user2 = user2.receive @req_two_xml, person_one
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#accept_friend_request' do
|
describe '#accept_friend_request' do
|
||||||
it 'should both users should befriend the same person' do
|
it 'should both users should befriend the same person' do
|
||||||
user.accept_friend_request @request.id, aspect.id
|
user.accept_friend_request @req_to_user.id, aspect.id
|
||||||
user.contact_for(person_one).should_not be_nil
|
user.contact_for(person_one).should_not be_nil
|
||||||
|
|
||||||
user2.accept_friend_request @request_two.id, aspect2.id
|
user2.accept_friend_request @req_to_user2.id, aspect2.id
|
||||||
user2.contact_for(person_one).should_not be_nil
|
user2.contact_for(person_one).should_not be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should keep the person around if one of the users rejects him' do
|
it 'should keep the person around if one of the users rejects him' do
|
||||||
user.accept_friend_request @request.id, aspect.id
|
user.accept_friend_request @req_to_user.id, aspect.id
|
||||||
user.contact_for(person_one).should_not be_nil
|
user.contact_for(person_one).should_not be_nil
|
||||||
|
|
||||||
user2.ignore_friend_request @request_two.id
|
user2.ignore_friend_request @req_to_user2.id
|
||||||
user2.contact_for(person_one).should be_nil
|
user2.contact_for(person_one).should be_nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -203,21 +197,21 @@ describe Diaspora::UserModules::Friending do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "keeps the right counts of friends" do
|
it "keeps the right counts of friends" do
|
||||||
user.receive @request.to_diaspora_xml, person_one
|
received_req = user.receive @request.to_diaspora_xml, person_one
|
||||||
|
|
||||||
user.reload.pending_requests.size.should == 1
|
user.reload.pending_requests.size.should == 1
|
||||||
user.friends.size.should be 0
|
user.friends.size.should be 0
|
||||||
|
|
||||||
user.receive @request_two.to_diaspora_xml, person_two
|
received_req2 = user.receive @request_two.to_diaspora_xml, person_two
|
||||||
user.reload.pending_requests.size.should == 2
|
user.reload.pending_requests.size.should == 2
|
||||||
user.friends.size.should be 0
|
user.friends.size.should be 0
|
||||||
|
|
||||||
user.accept_friend_request @request.id, aspect.id
|
user.accept_friend_request received_req.id, aspect.id
|
||||||
user.reload.pending_requests.size.should == 1
|
user.reload.pending_requests.size.should == 1
|
||||||
user.friends.size.should be 1
|
user.friends.size.should be 1
|
||||||
user.contact_for(person_one).should_not be_nil
|
user.contact_for(person_one).should_not be_nil
|
||||||
|
|
||||||
user.ignore_friend_request @request_two.id
|
user.ignore_friend_request received_req2.id
|
||||||
user.reload.pending_requests.size.should == 0
|
user.reload.pending_requests.size.should == 0
|
||||||
user.friends.size.should be 1
|
user.friends.size.should be 1
|
||||||
user.contact_for(person_two).should be_nil
|
user.contact_for(person_two).should be_nil
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue