From 0907d7a9fdb7a4c6e23c1b9462e262671369541a Mon Sep 17 00:00:00 2001 From: Raphael <raphael@joindiaspora.com> Date: Wed, 11 Aug 2010 16:01:16 -0700 Subject: [PATCH] RS, DG; Cleaned up the switch in user.receive --- app/controllers/publics_controller.rb | 2 +- app/models/user.rb | 8 ++-- lib/diaspora/parser.rb | 14 +++---- spec/lib/diaspora_parser_spec.rb | 58 +++++++++++++-------------- spec/models/user_spec.rb | 2 - 5 files changed, 39 insertions(+), 45 deletions(-) diff --git a/app/controllers/publics_controller.rb b/app/controllers/publics_controller.rb index d6182a6eb0..e6506c55e6 100644 --- a/app/controllers/publics_controller.rb +++ b/app/controllers/publics_controller.rb @@ -25,7 +25,7 @@ class PublicsController < ApplicationController def receive @user = Person.first(:id => params[:id]).owner Rails.logger.debug "PublicsController has received: #{params[:xml]}" - @user.receive params[:xml] + @user.receive params[:xml] if params[:xml] render :nothing => true end diff --git a/app/models/user.rb b/app/models/user.rb index 35acbd2f05..d544224459 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -120,7 +120,7 @@ class User ###### Receiving ####### def receive xml - object = Diaspora::Parser.parse_from_xml(xml) + object = Diaspora::Parser.from_xml(xml) Rails.logger.debug("Receiving object:\n#{object.inspect}") if object.is_a? Retraction @@ -128,7 +128,7 @@ class User object.perform elsif object.is_a? Request - person = get_or_create_person_object_from_xml( xml ) + person = Diaspora::Parser.get_or_create_person_object_from_xml( xml ) person.serialized_key ||= object.exported_key object.person = person object.person.save @@ -136,10 +136,10 @@ class User receive_friend_request(object) elsif object.is_a? Profile - person = Diaspora::Parser.parse_owner_id_from_xml xml + person = Diaspora::Parser.owner_id_from_xml xml person.profile = object person.save - elsif object.respond_to?(:person) && !(object.person.nil?) && !(object.person.is_a? User) + else Rails.logger.debug("Saving object with success: #{object.save}") end end diff --git a/lib/diaspora/parser.rb b/lib/diaspora/parser.rb index a82fd722c9..8835bd83bc 100644 --- a/lib/diaspora/parser.rb +++ b/lib/diaspora/parser.rb @@ -1,17 +1,12 @@ module Diaspora module Parser - def parse_body_contents_from_xml(xml) - doc = Nokogiri::XML(xml) { |cfg| cfg.noblanks } - doc.xpath("/XML/post") - end - - def parse_owner_id_from_xml(xml) + def self.owner_id_from_xml(xml) doc = Nokogiri::XML(xml) { |cfg| cfg.noblanks } id = doc.xpath("//person_id").text.to_s Person.first(:id => id) end - def get_or_create_person_object_from_xml(xml) + def self.get_or_create_person_object_from_xml(xml) doc = Nokogiri::XML(xml) { |cfg| cfg.noblanks } person_xml = doc.xpath("//request/person").to_s person_id = doc.xpath("//request/person/_id").text.to_s @@ -19,9 +14,10 @@ module Diaspora person ? person : Person.from_xml( person_xml) end - def parse_from_xml(xml) + def self.from_xml(xml) - return unless body = parse_body_contents_from_xml(xml).children.first + doc = Nokogiri::XML(xml) { |cfg| cfg.noblanks } + return unless body = doc.xpath("/XML/post").children.first begin body.name.camelize.constantize.from_xml body.to_s diff --git a/spec/lib/diaspora_parser_spec.rb b/spec/lib/diaspora_parser_spec.rb index 1afd93ead6..da96e80d90 100644 --- a/spec/lib/diaspora_parser_spec.rb +++ b/spec/lib/diaspora_parser_spec.rb @@ -10,29 +10,35 @@ describe Diaspora::Parser do @user = Factory.create(:user, :email => "bob@aol.com") @person = Factory.create(:person_with_private_key, :email => "bill@gates.com") end + describe 'with encryption' do + before do + unstub_mocha_stubs + end + after do + stub_signature_verification + end + it "should not store posts from me" do + 10.times { + message = Factory.build(:status_message, :person => @user) + xml = message.to_diaspora_xml + @user.receive xml + } + StatusMessage.count.should == 0 + end + + it "should reject xml with no sender" do + xml = "<XML> + <head> + </head> + <post><status_message>\n <message>Here is another message</message>\n <owner>a@a.com</owner>\n <snippet>a@a.com</snippet>\n <source>a@a.com</source>\n</status_message></post> + <post><person></person></post> + <post><status_message>\n <message>HEY DUDE</message>\n <owner>a@a.com</owner>\n <snippet>a@a.com</snippet>\n <source>a@a.com</source>\n</status_message></post> + </XML>" + @user.receive xml + Post.count.should == 0 - it "should not store posts from me" do - 10.times { - message = Factory.build(:status_message, :person => @user) - xml = message.to_diaspora_xml - @user.receive xml - } - StatusMessage.count.should == 0 - end - - it "should reject xml with no sender" do - xml = "<XML> - <head> - </head> - <post><status_message>\n <message>Here is another message</message>\n <owner>a@a.com</owner>\n <snippet>a@a.com</snippet>\n <source>a@a.com</source>\n</status_message></post> - <post><person></person></post> - <post><status_message>\n <message>HEY DUDE</message>\n <owner>a@a.com</owner>\n <snippet>a@a.com</snippet>\n <source>a@a.com</source>\n</status_message></post> - </XML>" - @user.receive xml - Post.count.should == 0 - - end - + end + end it 'should discard types which are not of type post' do xml = "<XML> <post><person></person></post> @@ -47,12 +53,6 @@ describe Diaspora::Parser do before do @xml = Factory.build(:status_message).to_diaspora_xml end - - it 'should be able to parse the body\'s contents' do - body = parse_body_contents_from_xml(@xml).to_s - body.should include "<post>" - body.should include "</post>" - end it 'should be able to correctly handle comments' do person = Factory.create(:person, :email => "test@testing.com") @@ -60,7 +60,7 @@ describe Diaspora::Parser do comment = Factory.build(:comment, :post => post, :person => person, :text => "Freedom!") xml = comment.to_diaspora_xml - comment = parse_from_xml(xml) + comment = Diaspora::Parser.from_xml(xml) comment.text.should == "Freedom!" comment.person.should == person comment.post.should == post diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index bb54daeb67..62cb7dad14 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -1,7 +1,5 @@ require File.dirname(__FILE__) + '/../spec_helper' -include Diaspora::Parser - describe User do before do @user = Factory.create(:user) -- GitLab