diff --git a/app/models/comment.rb b/app/models/comment.rb index 67918dd96b2903be046a4565d8a07ab122d4a190..8fbd9dd0c24bcc23ed7ccc53c218e65d395cbebe 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -29,7 +29,8 @@ class Comment #ENCRYPTION before_validation :sign_if_mine, :sign_if_my_post - validates_true_for :creator_signature, :logic => lambda {self.verify_creator_signature} + #validates_true_for :creator_signature, :logic => lambda {self.verify_creator_signature} + validates_true_for :post_creator_signature, :logic => lambda {self.verify_post_creator_signature} xml_accessor :creator_signature key :creator_signature, String @@ -49,8 +50,12 @@ class Comment (self.send accessor.to_sym).to_s}.join ';' end - def verify_post_creator_signature - verify_signature(post_creator_signature, post.person) + def verify_post_creator_signature + unless person == User.owner + verify_signature(post_creator_signature, post.person) + else + true + end end diff --git a/app/models/person.rb b/app/models/person.rb index 62729c9aaa10891cbead2d32fda1cbbcccc12040..968ba5dd75f69de1c5276f8aded57bdbeb71bae3 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -26,7 +26,7 @@ class Person validates_true_for :url, :logic => lambda { self.url_unique?} - after_destroy :remove_all_traces#, :remove_key + after_destroy :remove_all_traces, :remove_key scope :friends, where(:_type => "Person", :active => true) diff --git a/gpg/diaspora-test/pubring.gpg b/gpg/diaspora-test/pubring.gpg index 6949770abe15219a8dcf14b912cd2644bb33bfae..413a37f87c212997fa5d9f104ba7c7e9c90756ac 100644 Binary files a/gpg/diaspora-test/pubring.gpg and b/gpg/diaspora-test/pubring.gpg differ diff --git a/lib/encryptable.rb b/lib/encryptable.rb index 10a9ac39c0301c102819a58c1963aa3b948e127d..c35ba70c342ffeaa70895ebbe639e94c067b7148 100644 --- a/lib/encryptable.rb +++ b/lib/encryptable.rb @@ -11,7 +11,6 @@ validity = nil GPGME::verify(creator_signature, signable_string, {:armor => true, :always_trust => true}){ |signature| - puts signature validity = signature.status == GPGME::GPG_ERR_NO_ERROR && signature.fpr == person.key_fingerprint } diff --git a/spec/models/person_spec.rb b/spec/models/person_spec.rb index 72cad89ace18a6975253a2de9705bfe5b42255a1..8d6e75f51da084ac25bf8af6a5d387b628df0ea1 100644 --- a/spec/models/person_spec.rb +++ b/spec/models/person_spec.rb @@ -34,7 +34,7 @@ describe Person do end - it 'should delete all of user upon user deletion' do + it 'should delete all of user except comments upon user deletion' do Factory.create(:user) f = Factory.create(:person) @@ -53,8 +53,8 @@ describe Person do f.destroy Post.count.should == 1 - Comment.all.count.should == 1 - s.comments.count.should == 1 + Comment.all.count.should == 4 + s.comments.count.should == 4 end it 'should let a user unfriend another user' do diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 79412d92d40b8ef861cdaa1dcdd0439b7aa0f2ec..f0156464dca6b7b3bc9de28712631afa9910f03e 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -47,6 +47,9 @@ end Blog.any_instance.stubs(:verify_creator_signature).returns(true) Bookmark.any_instance.stubs(:verify_creator_signature).returns(true) Comment.any_instance.stubs(:verify_creator_signature).returns(true) + Comment.any_instance.stubs(:verify_post_creator_signature).returns(true) + Person.any_instance.stubs(:remove_key).returns(true) + User.any_instance.stubs(:remove_key).returns(true) end def unstub_mocha_stubs diff --git a/spec/user_encryption_spec.rb b/spec/user_encryption_spec.rb index 63f4785c9c085937c5c06f008dbc42091981ef8c..b0083f0ec175f8e36c463ae3329833fa885f688b 100644 --- a/spec/user_encryption_spec.rb +++ b/spec/user_encryption_spec.rb @@ -36,7 +36,6 @@ describe 'user encryption' do end it 'should remove the key from the keyring on person destroy' do - pending "We can implement deleting from the keyring later, its annoying to test b/c no stub any instance of" person = Factory.create :person keyid = person.key_fingerprint original_key = person.export_key @@ -167,7 +166,7 @@ describe 'user encryption' do it 'should verify a comment made on a remote post by a different friend' do comment = Comment.new(:person => @person2, :text => "balls", :post => @remote_message) - comment.creator_signature = GPGME.sign(@remote_message.signable_string, nil, + comment.creator_signature = GPGME.sign(comment.signable_string, nil, {:mode => GPGME::SIG_MODE_DETACH, :armor => true, :signers => [@person2.key]}) comment.verify_creator_signature.should be true @@ -175,7 +174,7 @@ describe 'user encryption' do it 'should reject comments on a remote post with only a creator sig' do comment = Comment.new(:person => @person2, :text => "balls", :post => @remote_message) - comment.creator_signature = GPGME.sign(@remote_message.signable_string, nil, + comment.creator_signature = GPGME.sign(comment.signable_string, nil, {:mode => GPGME::SIG_MODE_DETACH, :armor => true, :signers => [@person2.key]}) comment.verify_creator_signature.should be true comment.verify_post_creator_signature.should be false