diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 30fd9aee0..9cc440ded 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -25,7 +25,7 @@ class PostsController < ApplicationController render locals: {post: post} } format.mobile { render locals: {post: post} } - format.xml { render xml: Diaspora::Federation.xml(Diaspora::Federation::Entities.post(post)) } + format.xml { render xml: DiasporaFederation::Salmon::XmlPayload.pack(Diaspora::Federation::Entities.post(post)) } format.json { render json: PostPresenter.new(post, current_user) } end end diff --git a/app/models/comment.rb b/app/models/comment.rb index 51af38c34..112aa4fe5 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -18,9 +18,11 @@ class Comment < ActiveRecord::Base belongs_to :commentable, :touch => true, :polymorphic => true alias_attribute :post, :commentable - belongs_to :author, :class_name => 'Person' + alias_attribute :parent, :commentable + belongs_to :author, class_name: "Person" delegate :name, to: :author, prefix: true + delegate :diaspora_handle, to: :author delegate :comment_email_subject, to: :parent delegate :author_name, to: :parent, prefix: true @@ -36,10 +38,6 @@ class Comment < ActiveRecord::Base self.text.strip! unless self.text.nil? end - after_save do - self.post.touch - end - after_commit :on => :create do self.parent.update_comments_counter end @@ -50,26 +48,10 @@ class Comment < ActiveRecord::Base participation.unparticipate! if participation.present? end - def diaspora_handle - self.author.diaspora_handle - end - - def diaspora_handle= nh + def diaspora_handle=(nh) self.author = Person.find_or_fetch_by_identifier(nh) end - def parent_class - Post - end - - def parent - self.post - end - - def parent= parent - self.post = parent - end - def message @message ||= Diaspora::MessageRenderer.new text end @@ -85,7 +67,6 @@ class Comment < ActiveRecord::Base def initialize(person, target, text) @text = text - @dispatcher_opts = {additional_subscribers: target.comments_authors.where.not(id: person.id)} super(person, target) end diff --git a/app/models/conversation.rb b/app/models/conversation.rb index 21cce231a..edefec62b 100644 --- a/app/models/conversation.rb +++ b/app/models/conversation.rb @@ -6,7 +6,8 @@ class Conversation < ActiveRecord::Base has_many :participants, :class_name => 'Person', :through => :conversation_visibilities, :source => :person has_many :messages, -> { order('created_at ASC') } - belongs_to :author, :class_name => 'Person' + belongs_to :author, class_name: "Person" + delegate :diaspora_handle, to: :author validate :max_participants validate :local_recipients @@ -32,11 +33,7 @@ class Conversation < ActiveRecord::Base self.participants - [self.author] end - def diaspora_handle - self.author.diaspora_handle - end - - def diaspora_handle= nh + def diaspora_handle=(nh) self.author = Person.find_or_fetch_by_identifier(nh) end @@ -58,10 +55,11 @@ class Conversation < ActiveRecord::Base end def participant_handles - self.participants.map{|p| p.diaspora_handle}.join(";") + participants.map(&:diaspora_handle).join(";") end - def participant_handles= handles - handles.split(';').each do |handle| + + def participant_handles=(handles) + handles.split(";").each do |handle| participants << Person.find_or_fetch_by_identifier(handle) end end diff --git a/app/models/message.rb b/app/models/message.rb index 18860a6f5..eeb9b401c 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -1,55 +1,29 @@ -class NotVisibleError < RuntimeError; end class Message < ActiveRecord::Base include Diaspora::Federated::Base include Diaspora::Guid include Diaspora::Relayable - belongs_to :author, :class_name => 'Person' - belongs_to :conversation, :touch => true + belongs_to :author, class_name: "Person" + belongs_to :conversation, touch: true + delegate :diaspora_handle, to: :author delegate :name, to: :author, prefix: true + alias_attribute :parent, :conversation + validates :text, :presence => true validate :participant_of_parent_conversation - after_create do # don't use 'after_commit' here since there is a call to 'save!' - # inside, which would cause an infinite recursion - #sign comment as commenter - self.author_signature = self.sign_with_key(self.author.owner.encryption_key) if self.author.owner - self.save! - self - end - - def diaspora_handle - self.author.diaspora_handle - end - - def diaspora_handle= nh + def diaspora_handle=(nh) self.author = Person.find_or_fetch_by_identifier(nh) end - def conversation_guid - self.conversation.guid - end - - def conversation_guid= guid + def conversation_guid=(guid) if cnv = Conversation.find_by_guid(guid) self.conversation_id = cnv.id end end - def parent_class - Conversation - end - - def parent - self.conversation - end - - def parent= parent - self.conversation = parent - end - def increase_unread(user) if vis = ConversationVisibility.where(:conversation_id => self.conversation_id, :person_id => user.person.id).first vis.unread += 1 @@ -62,8 +36,9 @@ class Message < ActiveRecord::Base end private + def participant_of_parent_conversation - if self.parent && !self.parent.participants.include?(self.author) + if conversation && !conversation.participants.include?(author) errors[:base] << "Author is not participating in the conversation" else true diff --git a/app/models/person.rb b/app/models/person.rb index 6e7410483..2c51988fa 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -3,7 +3,6 @@ # the COPYRIGHT file. class Person < ActiveRecord::Base - include Encryptor::Public include Diaspora::Guid # NOTE API V1 to be extracted diff --git a/app/models/poll_participation.rb b/app/models/poll_participation.rb index 8723ccd15..a81daa5e9 100644 --- a/app/models/poll_participation.rb +++ b/app/models/poll_participation.rb @@ -6,35 +6,20 @@ class PollParticipation < ActiveRecord::Base belongs_to :poll belongs_to :poll_answer, counter_cache: :vote_count - belongs_to :author, :class_name => 'Person', :foreign_key => :author_id + belongs_to :author, class_name: "Person" + delegate :diaspora_handle, to: :author + + alias_attribute :parent, :poll + + validates :poll_answer, presence: true validate :not_already_participated - def parent_class - Poll + def poll_answer_guid=(new_poll_answer_guid) + self.poll_answer_id = PollAnswer.where(guid: new_poll_answer_guid).ids.first end - def parent - self.poll - end - - def poll_answer_guid - poll_answer.guid - end - - def poll_answer_guid= new_poll_answer_guid - self.poll_answer = PollAnswer.where(:guid => new_poll_answer_guid).first - end - - def parent= parent - self.poll = parent - end - - def diaspora_handle - self.author.diaspora_handle - end - - def diaspora_handle= nh + def diaspora_handle=(nh) self.author = Person.find_or_fetch_by_identifier(nh) end diff --git a/app/models/user.rb b/app/models/user.rb index 6915c4388..f608ee848 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -3,7 +3,6 @@ # the COPYRIGHT file. class User < ActiveRecord::Base - include Encryptor::Private include Connecting include Querying include SocialActions diff --git a/app/models/user/social_actions.rb b/app/models/user/social_actions.rb index a7b752a68..3c1b88dc9 100644 --- a/app/models/user/social_actions.rb +++ b/app/models/user/social_actions.rb @@ -29,10 +29,6 @@ module User::SocialActions end end - def build_comment(options={}) - Comment::Generator.new(self, options.delete(:post), options.delete(:text)).build(options) - end - def build_conversation(opts={}) Conversation.new do |c| c.author = self.person diff --git a/app/workers/base.rb b/app/workers/base.rb index b8a26d31e..874261e23 100644 --- a/app/workers/base.rb +++ b/app/workers/base.rb @@ -6,28 +6,8 @@ module Workers class Base include Sidekiq::Worker sidekiq_options backtrace: (bt = AppConfig.environment.sidekiq.backtrace.get) && bt.to_i, - retry: (rt = AppConfig.environment.sidekiq.retry.get) && rt.to_i + retry: (rt = AppConfig.environment.sidekiq.retry.get) && rt.to_i include Diaspora::Logging - - # In the long term we need to eliminate the cause of these - def suppress_annoying_errors(&block) - yield - rescue Diaspora::ContactRequiredUnlessRequest, - Diaspora::RelayableObjectWithoutParent, - # Friendica seems to provoke these - Diaspora::AuthorXMLAuthorMismatch, - # We received a private object to our public endpoint, again something - # Friendica seems to provoke - Diaspora::NonPublic, - Diaspora::XMLNotParseable => e - logger.warn "error on receive: #{e.class}" - rescue ActiveRecord::RecordInvalid => e - logger.warn "failed to save received object: #{e.record.errors.full_messages}" - raise e unless [ - "already been taken", - "is ignored by the post author" - ].any? {|reason| e.message.include? reason } - end end end diff --git a/app/workers/deferred_dispatch.rb b/app/workers/deferred_dispatch.rb index 50a70d4de..47e2ce7db 100644 --- a/app/workers/deferred_dispatch.rb +++ b/app/workers/deferred_dispatch.rb @@ -14,32 +14,5 @@ module Workers Diaspora::Federation::Dispatcher.build(user, object, opts).dispatch rescue ActiveRecord::RecordNotFound # The target got deleted before the job was run end - - def add_additional_subscribers(object, object_class_name, opts) - if AppConfig.relay.outbound.send? && - object_class_name == "StatusMessage" && - object.respond_to?(:public?) && object.public? - handle_relay(opts) - end - - if opts[:additional_subscribers].present? - opts[:additional_subscribers] = Person.where(id: opts[:additional_subscribers]) - end - end - - def handle_relay(opts) - relay_person = Person.find_by diaspora_handle: AppConfig.relay.outbound.handle.to_s - if relay_person - add_person_to_subscribers(opts, relay_person) - else - # Skip this message for relay and just queue a webfinger fetch for the relay handle - Workers::FetchWebfinger.perform_async(AppConfig.relay.outbound.handle) - end - end - - def add_person_to_subscribers(opts, person) - opts[:additional_subscribers] ||= [] - opts[:additional_subscribers] << person.id - end end end diff --git a/lib/diaspora/encryptable.rb b/lib/diaspora/encryptable.rb deleted file mode 100644 index b01c27550..000000000 --- a/lib/diaspora/encryptable.rb +++ /dev/null @@ -1,46 +0,0 @@ -module Diaspora - module Encryptable - include Diaspora::Logging - - # Check that signature is a correct signature of #signable_string by person - # - # @param [String] signature The signature to be verified. - # @param [Person] person The signer. - # @return [Boolean] - def verify_signature(signature, person) - if person.nil? - logger.warn "event=verify_signature status=abort reason=no_person guid=#{guid}" - return false - elsif person.public_key.nil? - logger.warn "event=verify_signature status=abort reason=no_key guid=#{guid}" - return false - elsif signature.nil? - logger.warn "event=verify_signature status=abort reason=no_signature guid=#{guid}" - return false - end - validity = person.public_key.verify OpenSSL::Digest::SHA256.new, Base64.decode64(signature), signable_string - logger.info "event=verify_signature status=complete guid=#{guid} validity=#{validity}" - validity - end - - # @param [OpenSSL::PKey::RSA] key An RSA key - # @return [String] A Base64 encoded signature of #signable_string with key - def sign_with_key(key) - sig = Base64.strict_encode64(key.sign( OpenSSL::Digest::SHA256.new, signable_string )) - logger.info "event=sign_with_key status=complete guid=#{guid}" - sig - end - - # @return [Array] The ROXML attrs other than author_signature and parent_author_signature. - def signable_accessors - [] - end - - # @return [String] Defaults to the ROXML attrs which are not signatures. - def signable_string - signable_accessors.collect{ |accessor| - (self.send accessor.to_sym).to_s - }.join(';') - end - end -end diff --git a/lib/diaspora/exceptions.rb b/lib/diaspora/exceptions.rb index 5e537594e..f17689e31 100644 --- a/lib/diaspora/exceptions.rb +++ b/lib/diaspora/exceptions.rb @@ -16,26 +16,4 @@ module Diaspora # that prevents further execution class NotMine < StandardError end - - # Received a message without having a contact - class ContactRequiredUnlessRequest < StandardError - end - - # Got a relayable (comment, like etc.) without having the parent - class RelayableObjectWithoutParent < StandardError - end - - # After building an object the author doesn't match the one in the - # original XML message - class AuthorXMLAuthorMismatch < StandardError - end - - # Tried to fetch a post but it was deleted, not valid - # or the remote end doesn't support post fetching - class PostNotFetchable < StandardError - end - - # Error while parsing an received message and got nil - class XMLNotParseable < StandardError - end end diff --git a/lib/diaspora/federation.rb b/lib/diaspora/federation.rb index b575f39f8..1b5232e2b 100644 --- a/lib/diaspora/federation.rb +++ b/lib/diaspora/federation.rb @@ -1,10 +1,5 @@ module Diaspora module Federation - # @deprecated - def self.xml(entity) - DiasporaFederation::Salmon::XmlPayload.pack(entity) - end - # Raised, if author is ignored by the relayable parent author class AuthorIgnored < RuntimeError end diff --git a/lib/diaspora/federation/entities.rb b/lib/diaspora/federation/entities.rb index 7694a5b85..1776185fb 100644 --- a/lib/diaspora/federation/entities.rb +++ b/lib/diaspora/federation/entities.rb @@ -53,9 +53,9 @@ module Diaspora DiasporaFederation::Entities::Comment.new( author: comment.diaspora_handle, guid: comment.guid, - parent_guid: comment.parent_guid, + parent_guid: comment.post.guid, text: comment.text, - parent: related_entity(comment.parent) + parent: related_entity(comment.post) ) end @@ -82,10 +82,10 @@ module Diaspora DiasporaFederation::Entities::Like.new( author: like.diaspora_handle, guid: like.guid, - parent_guid: like.parent_guid, + parent_guid: like.target.guid, positive: like.positive, - parent_type: like.parent.class.base_class.to_s, - parent: related_entity(like.parent) + parent_type: like.target.class.base_class.to_s, + parent: related_entity(like.target) ) end @@ -103,9 +103,9 @@ module Diaspora guid: message.guid, text: message.text, created_at: message.created_at, - parent_guid: message.parent_guid, - conversation_guid: message.parent_guid, - parent: related_entity(message.parent) + parent_guid: message.conversation.guid, + conversation_guid: message.conversation.guid, + parent: related_entity(message.conversation) ) end @@ -113,9 +113,9 @@ module Diaspora DiasporaFederation::Entities::Participation.new( author: participation.diaspora_handle, guid: participation.guid, - parent_guid: participation.parent_guid, - parent_type: participation.parent.class.base_class.to_s, - parent: related_entity(participation.parent) + parent_guid: participation.target.guid, + parent_type: participation.target.class.base_class.to_s, + parent: related_entity(participation.target) ) end @@ -153,9 +153,9 @@ module Diaspora DiasporaFederation::Entities::PollParticipation.new( author: poll_participation.diaspora_handle, guid: poll_participation.guid, - parent_guid: poll_participation.parent_guid, + parent_guid: poll_participation.poll.guid, poll_answer_guid: poll_participation.poll_answer.guid, - parent: related_entity(poll_participation.parent) + parent: related_entity(poll_participation.poll) ) end diff --git a/lib/diaspora/relayable.rb b/lib/diaspora/relayable.rb index 3ff3809c2..6d2a934f3 100644 --- a/lib/diaspora/relayable.rb +++ b/lib/diaspora/relayable.rb @@ -4,12 +4,8 @@ module Diaspora module Relayable - include Encryptable - def self.included(model) model.class_eval do - attr_writer :parent_author_signature - validates_associated :parent validates :author, :presence => true validate :author_is_not_ignored @@ -20,7 +16,6 @@ module Diaspora after_commit :on => :create do parent.touch(:interacted_at) if parent.respond_to?(:interacted_at) end - end end @@ -33,22 +28,6 @@ module Diaspora errors.add(:author_id, "This relayable author is ignored by the post author") end - # @return [Boolean] true - def relayable? - true - end - - # @return [String] - def parent_guid - return nil unless parent.present? - self.parent.guid - end - - def parent_guid= new_parent_guid - @parent_guid = new_parent_guid - self.parent = parent_class.where(guid: new_parent_guid).first - end - # @return [Array] def subscribers if parent.author.local? @@ -58,44 +37,9 @@ module Diaspora end end - def initialize_signatures - #sign relayable as model creator - self.author_signature = self.sign_with_key(author.owner.encryption_key) - end - - def parent_author_signature - unless parent.blank? || parent.author.owner.nil? - @parent_author_signature = sign_with_key(parent.author.owner.encryption_key) - end - @parent_author_signature - end - - # @return [Boolean] - def verify_parent_author_signature - verify_signature(self.parent_author_signature, self.parent.author) - end - - # @return [Boolean] - def signature_valid? - verify_signature(self.author_signature, self.author) - end - # @abstract - # @return [Class] - def parent_class - raise NotImplementedError.new('you must override parent_class in order to enable relayable on this model') - end - - # @abstract - # @return An instance of Relayable#parent_class def parent raise NotImplementedError.new('you must override parent in order to enable relayable on this model') end - - # @abstract - # @param parent An instance of Relayable#parent_class - def parent= parent - raise NotImplementedError.new('you must override parent= in order to enable relayable on this model') - end end end diff --git a/lib/encryptor.rb b/lib/encryptor.rb deleted file mode 100644 index a81302b85..000000000 --- a/lib/encryptor.rb +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright (c) 2010-2011, Diaspora Inc. This file is -# licensed under the Affero General Public License version 3 or later. See -# the COPYRIGHT file. - -module Encryptor - module Public - def encrypt cleartext - aes_key = gen_aes_key - ciphertext = aes_encrypt(cleartext, aes_key) - encrypted_key = encrypt_aes_key aes_key - cipher_hash = {:aes_key => encrypted_key, :ciphertext => ciphertext} - Base64.strict_encode64( cipher_hash.to_json ) - end - - def gen_aes_key - cipher = OpenSSL::Cipher.new('AES-256-CBC') - key = cipher.random_key - iv = cipher.random_iv - {'key' => Base64.strict_encode64(key), 'iv' => Base64.strict_encode64(iv)} - end - - def aes_encrypt(txt, key) - cipher = OpenSSL::Cipher.new('AES-256-CBC') - cipher.encrypt - cipher.key = Base64.decode64 key['key'] - cipher.iv = Base64.decode64 key['iv'] - ciphertext = '' - ciphertext << cipher.update(txt) - ciphertext << cipher.final - Base64.strict_encode64(ciphertext) - end - - def encrypt_aes_key key - Base64.strict_encode64(public_key.public_encrypt( key.to_json )) - end - end - - module Private - def decrypt cipher_json - json = JSON.parse(Base64.decode64 cipher_json) - aes_key = get_aes_key json['aes_key'] - aes_decrypt(json['ciphertext'], aes_key) - end - - def get_aes_key encrypted_key - clear_key = encryption_key.private_decrypt( Base64.decode64 encrypted_key ) - JSON::parse(clear_key) - end - - def aes_decrypt(ciphertext, key) - cipher = OpenSSL::Cipher.new('AES-256-CBC') - cipher.decrypt - cipher.key = Base64.decode64 key['key'] - cipher.iv = Base64.decode64 key['iv'] - txt = '' - txt << cipher.update(Base64.decode64 ciphertext) - txt << cipher.final - txt - end - - end -end diff --git a/lib/federated/generator.rb b/lib/federated/generator.rb index 558fda088..ce39df90f 100644 --- a/lib/federated/generator.rb +++ b/lib/federated/generator.rb @@ -27,11 +27,7 @@ module Federated end def build(options={}) - options.merge!(relayable_options) - relayable = self.class.federated_class.new(options.merge(:author_id => @user.person.id)) - relayable.set_guid - relayable.initialize_signatures - relayable + self.class.federated_class.new(options.merge(relayable_options).merge(author_id: @user.person.id)) end protected diff --git a/lib/federated/relayable.rb b/lib/federated/relayable.rb index a60810dfd..72c82043f 100644 --- a/lib/federated/relayable.rb +++ b/lib/federated/relayable.rb @@ -7,31 +7,18 @@ module Federated include Diaspora::Relayable - belongs_to :target, :polymorphic => true - belongs_to :author, :class_name => 'Person' - #end crazy ordering issues + belongs_to :target, polymorphic: true + belongs_to :author, class_name: "Person" - validates_uniqueness_of :target_id, :scope => [:target_type, :author_id] - validates :parent, :presence => true #should be in relayable (pending on fixing Message) + delegate :diaspora_handle, to: :author - def diaspora_handle - self.author.diaspora_handle - end + alias_attribute :parent, :target + + validates :target_id, uniqueness: {scope: %i(target_type author_id)} + validates :target, presence: true # should be in relayable (pending on fixing Message) def diaspora_handle=(nh) self.author = Person.find_or_fetch_by_identifier(nh) end - - def parent_class - self.target_type.constantize - end - - def parent - self.target - end - - def parent= parent - self.target = parent - end end end diff --git a/spec/controllers/posts_controller_spec.rb b/spec/controllers/posts_controller_spec.rb index f251961c2..1c188ff13 100644 --- a/spec/controllers/posts_controller_spec.rb +++ b/spec/controllers/posts_controller_spec.rb @@ -78,7 +78,8 @@ describe PostsController, type: :controller do it "responds with diaspora xml if format is xml" do get :show, id: public.guid, format: :xml - expect(response.body).to eq(Diaspora::Federation.xml(Diaspora::Federation::Entities.post(public)).to_xml) + expected_xml = DiasporaFederation::Salmon::XmlPayload.pack(Diaspora::Federation::Entities.post(public)).to_xml + expect(response.body).to eq(expected_xml) end end diff --git a/spec/factories.rb b/spec/factories.rb index 2cf04aff4..d90b01842 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -285,7 +285,7 @@ FactoryGirl.define do factory(:conversation) do association(:author, factory: :person) - sequence(:subject) { |n| "conversation ##{n}" } + sequence(:subject) {|n| "conversation ##{n}" } after(:build) do |c| c.participants << c.author @@ -308,14 +308,6 @@ FactoryGirl.define do after(:build) {|m| m.conversation.participants << m.author } end - factory(:message_with_conversation, parent: :message) do - after(:build) do |msg| - c = FactoryGirl.build(:conversation) - c.participants << msg.author - msg.conversation_id = c.id - end - end - #templates factory(:status_with_photo_backdrop, :parent => :status_message_with_photo) diff --git a/spec/helpers/invitation_codes_helper_spec.rb b/spec/helpers/invitation_codes_helper_spec.rb deleted file mode 100644 index 5ebd8b1ef..000000000 --- a/spec/helpers/invitation_codes_helper_spec.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'spec_helper' - -# Specs in this file have access to a helper object that includes -# the InvitationCodesHelper. For example: -# -# describe InvitationCodesHelper do -# describe "string concat" do -# it "concats two strings with spaces" do -# helper.concat_strings("this","that").should == "this that" -# end -# end -# end -describe InvitationCodesHelper, :type => :helper do - skip "add some examples to (or delete) #{__FILE__}" -end diff --git a/spec/lib/diaspora/encryptable_spec.rb b/spec/lib/diaspora/encryptable_spec.rb deleted file mode 100644 index 7419b7f61..000000000 --- a/spec/lib/diaspora/encryptable_spec.rb +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2010, Diaspora Inc. This file is -# licensed under the Affero General Public License version 3 or later. See -# the COPYRIGHT file. - -require 'spec_helper' - -describe Diaspora::Encryptable do - before do - @comment = FactoryGirl.create(:comment, :author => bob.person) - end - describe '#sign_with_key' do - it 'signs the object with RSA256 signature' do - sig = @comment.sign_with_key bob.encryption_key - expect(bob.public_key.verify(OpenSSL::Digest::SHA256.new, Base64.decode64(sig), @comment.signable_string)).to be true - end - end - - describe '#verify_signature' do - it 'verifies SHA256 signatures' do - sig = @comment.sign_with_key bob.encryption_key - expect(@comment.verify_signature(sig, bob.person)).to be true - end - - it 'does not verify the fallback after rollout window' do - sig = Base64.strict_encode64(bob.encryption_key.sign( "SHA", @comment.signable_string )) - expect(@comment.verify_signature(sig, bob.person)).to be false - end - end -end diff --git a/spec/lib/diaspora/federated_base_spec.rb b/spec/lib/diaspora/federated/base_spec.rb similarity index 75% rename from spec/lib/diaspora/federated_base_spec.rb rename to spec/lib/diaspora/federated/base_spec.rb index 114fc1ac6..cba9b51af 100644 --- a/spec/lib/diaspora/federated_base_spec.rb +++ b/spec/lib/diaspora/federated/base_spec.rb @@ -2,11 +2,11 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. -require 'spec_helper' +require "spec_helper" describe Diaspora::Federated::Base do - describe '#subscribers' do - it 'throws an error if the including module does not redefine it' do + describe "#subscribers" do + it "throws an error if the including module does not redefine it" do class Foo include Diaspora::Federated::Base end diff --git a/spec/lib/encryptor_spec.rb b/spec/lib/encryptor_spec.rb deleted file mode 100644 index a4d8a709a..000000000 --- a/spec/lib/encryptor_spec.rb +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2010-2011, Diaspora Inc. This file is -# licensed under the Affero General Public License version 3 or later. See -# the COPYRIGHT file. - -require 'spec_helper' - -describe 'user encryption' do - before do - @user = alice - @aspect = @user.aspects.first - end - - describe 'encryption' do - it 'should encrypt a string' do - string = "Secretsauce" - ciphertext = @user.person.encrypt string - expect(ciphertext.include?(string)).to be false - expect(@user.decrypt(ciphertext)).to eq(string) - end - end -end diff --git a/spec/models/message_spec.rb b/spec/models/message_spec.rb index d1bb5505a..4fb3172af 100644 --- a/spec/models/message_spec.rb +++ b/spec/models/message_spec.rb @@ -23,16 +23,6 @@ describe Message, :type => :model do expect(message).not_to be_valid end - describe '#before_create' do - it 'signs the message' do - expect(@message.author_signature).not_to be_blank - end - - it 'signs the message author if author of conversation' do - expect(@message.parent_author_signature).not_to be_blank - end - end - describe 'it is relayable' do before do @local_luke, @local_leia, @remote_raphael = set_up_friends diff --git a/spec/models/poll_participation_spec.rb b/spec/models/poll_participation_spec.rb index 69ffcf79d..959c831aa 100644 --- a/spec/models/poll_participation_spec.rb +++ b/spec/models/poll_participation_spec.rb @@ -17,7 +17,7 @@ describe PollParticipation, :type => :model do 2.times do |run| bob.participate_in_poll!(@status, @poll.poll_answers.first) end - }.to raise_error + }.to raise_error ActiveRecord::RecordInvalid end it 'allows a one time participation in a poll' do diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb index c47881055..809ddff46 100644 --- a/spec/models/post_spec.rb +++ b/spec/models/post_spec.rb @@ -241,14 +241,15 @@ describe Post, :type => :model do end end - describe 'Likeable#update_likes_counter' do + describe "Likeable#update_likes_counter" do before do - @post = bob.post :status_message, :text => "hello", :to => 'all' + @post = bob.post(:status_message, text: "hello", public: true) bob.like!(@post) end - it 'does not update updated_at' do - old_time = Time.zone.now - 10000 - Post.where(:id => @post.id).update_all(:updated_at => old_time) + + it "does not update updated_at" do + old_time = Time.zone.now - 100 + Post.where(id: @post.id).update_all(updated_at: old_time) expect(@post.reload.updated_at.to_i).to eq(old_time.to_i) @post.update_likes_counter expect(@post.reload.updated_at.to_i).to eq(old_time.to_i) diff --git a/spec/models/user/social_actions_spec.rb b/spec/models/user/social_actions_spec.rb index 9990387a5..5731dd69b 100644 --- a/spec/models/user/social_actions_spec.rb +++ b/spec/models/user/social_actions_spec.rb @@ -79,7 +79,7 @@ describe User::SocialActions, :type => :model do it "does not allow multiple likes" do alice.like!(@status) likes = @status.likes - expect { alice.like!(@status) }.to raise_error + expect { alice.like!(@status) }.to raise_error ActiveRecord::RecordInvalid expect(@status.reload.likes).to eq(likes) end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 00ff69dcb..dcd5ff477 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -482,12 +482,6 @@ describe User, :type => :model do it "does not preserve case" do expect(User.find_for_database_authentication(:username => alice.username.upcase)).to eq(alice) end - - it 'errors out when passed a non-hash' do - expect { - User.find_for_database_authentication(alice.username) - }.to raise_error - end end describe '#update_profile' do diff --git a/spec/shared_behaviors/relayable.rb b/spec/shared_behaviors/relayable.rb index f28fbbbd2..5a6400477 100644 --- a/spec/shared_behaviors/relayable.rb +++ b/spec/shared_behaviors/relayable.rb @@ -54,28 +54,6 @@ shared_examples_for "it is relayable" do end end - context 'encryption' do - describe '#parent_author_signature' do - it 'should sign the object if the user is the post author' do - expect(@object_by_parent_author.verify_parent_author_signature).to be true - end - - it 'should verify a object made on a remote post by a different contact' do - @object_by_recipient.author_signature = @object_by_recipient.send(:sign_with_key, @local_leia.encryption_key) - @object_by_recipient.parent_author_signature = @object_by_recipient.send(:sign_with_key, @local_luke.encryption_key) - expect(@object_by_recipient.verify_parent_author_signature).to be true - end - end - - describe '#author_signature' do - it 'should sign as the object author' do - expect(@object_on_remote_parent.signature_valid?).to be true - expect(@object_by_parent_author.signature_valid?).to be true - expect(@object_by_recipient.signature_valid?).to be true - end - end - end - context 'propagation' do describe '#receive' do it 'dispatches when the person receiving is the parent author' do diff --git a/spec/support/user_methods.rb b/spec/support/user_methods.rb index dc8869d33..acbfd15cc 100644 --- a/spec/support/user_methods.rb +++ b/spec/support/user_methods.rb @@ -37,4 +37,8 @@ class User p end end + + def build_comment(options={}) + Comment::Generator.new(self, options.delete(:post), options.delete(:text)).build(options) + end end diff --git a/spec/workers/deferred_dispatch_spec.rb b/spec/workers/deferred_dispatch_spec.rb index ae97e18e9..214106d8d 100644 --- a/spec/workers/deferred_dispatch_spec.rb +++ b/spec/workers/deferred_dispatch_spec.rb @@ -1,4 +1,4 @@ -require 'spec_helper' +require "spec_helper" describe Workers::DeferredDispatch do it "handles non existing records gracefully" do @@ -6,34 +6,4 @@ describe Workers::DeferredDispatch do described_class.new.perform(alice.id, "Comment", 0, {}) }.to_not raise_error end - - describe "#social relay functionality" do - let(:message) { FactoryGirl.create(:status_message, author: alice.person, public: true) } - before do - skip # TODO - AppConfig.relay.outbound.send = true - end - - it "triggers fetch of relay handle" do - allow(Person).to receive(:find_by).and_return(nil) - - expect(Workers::FetchWebfinger).to receive(:perform_async) - - described_class.new.perform(alice.id, "StatusMessage", message.id, {}) - end - - it "triggers post to relay" do - relay_person = FactoryGirl.create(:person, diaspora_handle: AppConfig.relay.outbound.handle) - opts = {"additional_subscribers" => [relay_person], "services" => []} - allow(Person).to receive(:find_by).and_return(relay_person) - postzord = double - allow(Postzord::Dispatcher).to receive(:build).with(any_args).and_return(postzord) - allow(postzord).to receive(:post) - allow(Person).to receive(:where).and_return([relay_person]) - - expect(Postzord::Dispatcher).to receive(:build).with(alice, message, opts) - - described_class.new.perform(alice.id, "StatusMessage", message.id, {}) - end - end end