diaspora_federation 0.0.12 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/diaspora_federation.rb +103 -18
- data/lib/diaspora_federation/discovery/discovery.rb +1 -1
- data/lib/diaspora_federation/discovery/h_card.rb +4 -5
- data/lib/diaspora_federation/discovery/host_meta.rb +1 -1
- data/lib/diaspora_federation/discovery/web_finger.rb +8 -8
- data/lib/diaspora_federation/discovery/xrd_document.rb +6 -7
- data/lib/diaspora_federation/entities.rb +21 -10
- data/lib/diaspora_federation/entities/account_deletion.rb +7 -3
- data/lib/diaspora_federation/entities/comment.rb +13 -10
- data/lib/diaspora_federation/entities/contact.rb +29 -0
- data/lib/diaspora_federation/entities/conversation.rb +5 -6
- data/lib/diaspora_federation/entities/like.rb +10 -18
- data/lib/diaspora_federation/entities/message.rb +6 -12
- data/lib/diaspora_federation/entities/participation.rb +8 -16
- data/lib/diaspora_federation/entities/person.rb +6 -2
- data/lib/diaspora_federation/entities/photo.rb +3 -3
- data/lib/diaspora_federation/entities/poll_participation.rb +6 -12
- data/lib/diaspora_federation/entities/post.rb +37 -0
- data/lib/diaspora_federation/entities/profile.rb +7 -3
- data/lib/diaspora_federation/entities/relayable.rb +169 -65
- data/lib/diaspora_federation/entities/relayable_retraction.rb +33 -32
- data/lib/diaspora_federation/entities/request.rb +20 -6
- data/lib/diaspora_federation/entities/reshare.rb +5 -27
- data/lib/diaspora_federation/entities/retraction.rb +6 -6
- data/lib/diaspora_federation/entities/signed_retraction.rb +32 -26
- data/lib/diaspora_federation/entities/status_message.rb +2 -22
- data/lib/diaspora_federation/entity.rb +137 -38
- data/lib/diaspora_federation/federation.rb +9 -0
- data/lib/diaspora_federation/federation/fetcher.rb +26 -0
- data/lib/diaspora_federation/federation/receiver.rb +41 -0
- data/lib/diaspora_federation/federation/receiver/abstract_receiver.rb +35 -0
- data/lib/diaspora_federation/federation/receiver/exceptions.rb +13 -0
- data/lib/diaspora_federation/federation/receiver/private.rb +15 -0
- data/lib/diaspora_federation/federation/receiver/public.rb +9 -0
- data/lib/diaspora_federation/federation/sender.rb +33 -0
- data/lib/diaspora_federation/federation/sender/hydra_wrapper.rb +92 -0
- data/lib/diaspora_federation/{fetcher.rb → http_client.rb} +6 -6
- data/lib/diaspora_federation/properties_dsl.rb +51 -14
- data/lib/diaspora_federation/salmon.rb +2 -1
- data/lib/diaspora_federation/salmon/aes.rb +1 -1
- data/lib/diaspora_federation/salmon/encrypted_magic_envelope.rb +61 -0
- data/lib/diaspora_federation/salmon/encrypted_slap.rb +69 -50
- data/lib/diaspora_federation/salmon/exceptions.rb +8 -14
- data/lib/diaspora_federation/salmon/magic_envelope.rb +80 -39
- data/lib/diaspora_federation/salmon/slap.rb +20 -51
- data/lib/diaspora_federation/salmon/xml_payload.rb +5 -104
- data/lib/diaspora_federation/validators.rb +22 -16
- data/lib/diaspora_federation/validators/account_deletion_validator.rb +1 -1
- data/lib/diaspora_federation/validators/comment_validator.rb +0 -4
- data/lib/diaspora_federation/validators/contact_validator.rb +13 -0
- data/lib/diaspora_federation/validators/conversation_validator.rb +2 -2
- data/lib/diaspora_federation/validators/like_validator.rb +1 -3
- data/lib/diaspora_federation/validators/message_validator.rb +0 -4
- data/lib/diaspora_federation/validators/participation_validator.rb +1 -5
- data/lib/diaspora_federation/validators/person_validator.rb +1 -1
- data/lib/diaspora_federation/validators/photo_validator.rb +2 -2
- data/lib/diaspora_federation/validators/poll_participation_validator.rb +0 -4
- data/lib/diaspora_federation/validators/profile_validator.rb +1 -1
- data/lib/diaspora_federation/validators/relayable_retraction_validator.rb +1 -1
- data/lib/diaspora_federation/validators/relayable_validator.rb +2 -0
- data/lib/diaspora_federation/validators/request_validator.rb +3 -2
- data/lib/diaspora_federation/validators/reshare_validator.rb +3 -3
- data/lib/diaspora_federation/validators/retraction_validator.rb +2 -2
- data/lib/diaspora_federation/validators/rules/guid.rb +16 -7
- data/lib/diaspora_federation/validators/signed_retraction_validator.rb +1 -1
- data/lib/diaspora_federation/validators/status_message_validator.rb +2 -2
- data/lib/diaspora_federation/version.rb +1 -1
- metadata +20 -11
- data/lib/diaspora_federation/receiver.rb +0 -28
- data/lib/diaspora_federation/receiver/private.rb +0 -19
- data/lib/diaspora_federation/receiver/public.rb +0 -13
- data/lib/diaspora_federation/signing.rb +0 -56
@@ -6,6 +6,8 @@ module DiasporaFederation
|
|
6
6
|
# @param [Validation::Validator] validator the validator in which it is included
|
7
7
|
def self.included(validator)
|
8
8
|
validator.class_eval do
|
9
|
+
rule :author, %i(not_empty diaspora_id)
|
10
|
+
rule :guid, :guid
|
9
11
|
rule :parent_guid, :guid
|
10
12
|
end
|
11
13
|
end
|
@@ -1,11 +1,12 @@
|
|
1
1
|
module DiasporaFederation
|
2
2
|
module Validators
|
3
3
|
# This validates a {Entities::Request}
|
4
|
+
# @deprecated the {Entities::Request} will be replaced with {Entities::Contact}
|
4
5
|
class RequestValidator < Validation::Validator
|
5
6
|
include Validation
|
6
7
|
|
7
|
-
rule :
|
8
|
-
rule :
|
8
|
+
rule :author, %i(not_empty diaspora_id)
|
9
|
+
rule :recipient, %i(not_empty diaspora_id)
|
9
10
|
end
|
10
11
|
end
|
11
12
|
end
|
@@ -4,13 +4,13 @@ module DiasporaFederation
|
|
4
4
|
class ReshareValidator < Validation::Validator
|
5
5
|
include Validation
|
6
6
|
|
7
|
-
rule :
|
7
|
+
rule :root_author, %i(not_empty diaspora_id)
|
8
8
|
|
9
9
|
rule :root_guid, :guid
|
10
10
|
|
11
|
-
rule :
|
11
|
+
rule :author, %i(not_empty diaspora_id)
|
12
12
|
|
13
|
-
rule :
|
13
|
+
rule :guid, :guid
|
14
14
|
|
15
15
|
rule :public, :boolean
|
16
16
|
end
|
@@ -4,9 +4,9 @@ module DiasporaFederation
|
|
4
4
|
class RetractionValidator < Validation::Validator
|
5
5
|
include Validation
|
6
6
|
|
7
|
-
rule :
|
7
|
+
rule :author, %i(not_empty diaspora_id)
|
8
8
|
|
9
|
-
rule :
|
9
|
+
rule :target_guid, :guid
|
10
10
|
|
11
11
|
rule :target_type, :not_empty
|
12
12
|
end
|
@@ -7,6 +7,21 @@ module Validation
|
|
7
7
|
# * Numbers: 0-9
|
8
8
|
# * Special chars: '-', '_', '@', '.' and ':'
|
9
9
|
class Guid
|
10
|
+
# This rule can have a +nilable+ param
|
11
|
+
# @return [Hash] params
|
12
|
+
attr_reader :params
|
13
|
+
|
14
|
+
# create a new rule for guid validation
|
15
|
+
# @param [Hash] params
|
16
|
+
# @option params [Boolean] :nilable guid allowed to be nil
|
17
|
+
def initialize(params={})
|
18
|
+
if params.include?(:nilable) && !params[:nilable].is_a?(TrueClass) && !params[:nilable].is_a?(FalseClass)
|
19
|
+
raise ArgumentError, ":nilable needs to be a boolean"
|
20
|
+
end
|
21
|
+
|
22
|
+
@params = params
|
23
|
+
end
|
24
|
+
|
10
25
|
# The error key for this rule
|
11
26
|
# @return [Symbol] error key
|
12
27
|
def error_key
|
@@ -15,13 +30,7 @@ module Validation
|
|
15
30
|
|
16
31
|
# Determines if value is a valid +GUID+
|
17
32
|
def valid_value?(value)
|
18
|
-
value.is_a?(String) && value.downcase =~ /\A[0-9a-z\-_@.:]{16,}\z/
|
19
|
-
end
|
20
|
-
|
21
|
-
# This rule has no params
|
22
|
-
# @return [Hash] params
|
23
|
-
def params
|
24
|
-
{}
|
33
|
+
params[:nilable] && value.nil? || value.is_a?(String) && value.downcase =~ /\A[0-9a-z\-_@.:]{16,}\z/
|
25
34
|
end
|
26
35
|
end
|
27
36
|
end
|
@@ -4,9 +4,9 @@ module DiasporaFederation
|
|
4
4
|
class StatusMessageValidator < Validation::Validator
|
5
5
|
include Validation
|
6
6
|
|
7
|
-
rule :
|
7
|
+
rule :author, %i(not_empty diaspora_id)
|
8
8
|
|
9
|
-
rule :
|
9
|
+
rule :guid, :guid
|
10
10
|
|
11
11
|
rule :public, :boolean
|
12
12
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: diaspora_federation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin Neff
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: '1.6'
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.6.7.
|
22
|
+
version: 1.6.7.2
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: '1.6'
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 1.6.7.
|
32
|
+
version: 1.6.7.2
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: faraday
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -64,14 +64,14 @@ dependencies:
|
|
64
64
|
requirements:
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version: '0
|
67
|
+
version: '1.0'
|
68
68
|
type: :runtime
|
69
69
|
prerelease: false
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
72
|
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: '0
|
74
|
+
version: '1.0'
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
76
|
name: valid
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -109,6 +109,7 @@ files:
|
|
109
109
|
- lib/diaspora_federation/entities.rb
|
110
110
|
- lib/diaspora_federation/entities/account_deletion.rb
|
111
111
|
- lib/diaspora_federation/entities/comment.rb
|
112
|
+
- lib/diaspora_federation/entities/contact.rb
|
112
113
|
- lib/diaspora_federation/entities/conversation.rb
|
113
114
|
- lib/diaspora_federation/entities/like.rb
|
114
115
|
- lib/diaspora_federation/entities/location.rb
|
@@ -119,6 +120,7 @@ files:
|
|
119
120
|
- lib/diaspora_federation/entities/poll.rb
|
120
121
|
- lib/diaspora_federation/entities/poll_answer.rb
|
121
122
|
- lib/diaspora_federation/entities/poll_participation.rb
|
123
|
+
- lib/diaspora_federation/entities/post.rb
|
122
124
|
- lib/diaspora_federation/entities/profile.rb
|
123
125
|
- lib/diaspora_federation/entities/relayable.rb
|
124
126
|
- lib/diaspora_federation/entities/relayable_retraction.rb
|
@@ -128,23 +130,30 @@ files:
|
|
128
130
|
- lib/diaspora_federation/entities/signed_retraction.rb
|
129
131
|
- lib/diaspora_federation/entities/status_message.rb
|
130
132
|
- lib/diaspora_federation/entity.rb
|
131
|
-
- lib/diaspora_federation/
|
133
|
+
- lib/diaspora_federation/federation.rb
|
134
|
+
- lib/diaspora_federation/federation/fetcher.rb
|
135
|
+
- lib/diaspora_federation/federation/receiver.rb
|
136
|
+
- lib/diaspora_federation/federation/receiver/abstract_receiver.rb
|
137
|
+
- lib/diaspora_federation/federation/receiver/exceptions.rb
|
138
|
+
- lib/diaspora_federation/federation/receiver/private.rb
|
139
|
+
- lib/diaspora_federation/federation/receiver/public.rb
|
140
|
+
- lib/diaspora_federation/federation/sender.rb
|
141
|
+
- lib/diaspora_federation/federation/sender/hydra_wrapper.rb
|
142
|
+
- lib/diaspora_federation/http_client.rb
|
132
143
|
- lib/diaspora_federation/logging.rb
|
133
144
|
- lib/diaspora_federation/properties_dsl.rb
|
134
|
-
- lib/diaspora_federation/receiver.rb
|
135
|
-
- lib/diaspora_federation/receiver/private.rb
|
136
|
-
- lib/diaspora_federation/receiver/public.rb
|
137
145
|
- lib/diaspora_federation/salmon.rb
|
138
146
|
- lib/diaspora_federation/salmon/aes.rb
|
147
|
+
- lib/diaspora_federation/salmon/encrypted_magic_envelope.rb
|
139
148
|
- lib/diaspora_federation/salmon/encrypted_slap.rb
|
140
149
|
- lib/diaspora_federation/salmon/exceptions.rb
|
141
150
|
- lib/diaspora_federation/salmon/magic_envelope.rb
|
142
151
|
- lib/diaspora_federation/salmon/slap.rb
|
143
152
|
- lib/diaspora_federation/salmon/xml_payload.rb
|
144
|
-
- lib/diaspora_federation/signing.rb
|
145
153
|
- lib/diaspora_federation/validators.rb
|
146
154
|
- lib/diaspora_federation/validators/account_deletion_validator.rb
|
147
155
|
- lib/diaspora_federation/validators/comment_validator.rb
|
156
|
+
- lib/diaspora_federation/validators/contact_validator.rb
|
148
157
|
- lib/diaspora_federation/validators/conversation_validator.rb
|
149
158
|
- lib/diaspora_federation/validators/h_card_validator.rb
|
150
159
|
- lib/diaspora_federation/validators/like_validator.rb
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module DiasporaFederation
|
2
|
-
# Raised if failed to fetch a public key of the sender of the received message
|
3
|
-
class SenderKeyNotFound < Exception
|
4
|
-
end
|
5
|
-
|
6
|
-
# Raised if recipient private key is missing for a private receive
|
7
|
-
class RecipientKeyNotFound < Exception
|
8
|
-
end
|
9
|
-
|
10
|
-
# Common base for Private and Public receivers
|
11
|
-
# @see Receiver::Public
|
12
|
-
# @see Receiver::Private
|
13
|
-
class Receiver
|
14
|
-
def initialize(salmon_xml)
|
15
|
-
@salmon_xml = salmon_xml
|
16
|
-
end
|
17
|
-
|
18
|
-
def receive!
|
19
|
-
sender_id = slap.author_id
|
20
|
-
public_key = DiasporaFederation.callbacks.trigger(:fetch_public_key_by_diaspora_id, sender_id)
|
21
|
-
raise SenderKeyNotFound if public_key.nil?
|
22
|
-
DiasporaFederation.callbacks.trigger(:save_entity_after_receive, slap.entity(public_key))
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
require "diaspora_federation/receiver/private"
|
28
|
-
require "diaspora_federation/receiver/public"
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module DiasporaFederation
|
2
|
-
class Receiver
|
3
|
-
# Receiver::Private is used to receive private messages, which are addressed to a specific user, encrypted with his
|
4
|
-
# public key and packed using Salmon::EncryptedSlap
|
5
|
-
class Private < Receiver
|
6
|
-
def initialize(salmon_xml, recipient_private_key)
|
7
|
-
super(salmon_xml)
|
8
|
-
raise RecipientKeyNotFound if recipient_private_key.nil?
|
9
|
-
@recipient_private_key = recipient_private_key
|
10
|
-
end
|
11
|
-
|
12
|
-
protected
|
13
|
-
|
14
|
-
def slap
|
15
|
-
@salmon ||= Salmon::EncryptedSlap.from_xml(@salmon_xml, @recipient_private_key)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
module DiasporaFederation
|
2
|
-
class Receiver
|
3
|
-
# Receiver::Public is used to receive public messages, which are not addressed to a specific user, unencrypted
|
4
|
-
# and packed using Salmon::Slap
|
5
|
-
class Public < Receiver
|
6
|
-
protected
|
7
|
-
|
8
|
-
def slap
|
9
|
-
@salmon ||= Salmon::Slap.from_xml(@salmon_xml)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
module DiasporaFederation
|
2
|
-
# this module defines operations of signing an arbitrary hash with an arbitrary key
|
3
|
-
module Signing
|
4
|
-
extend Logging
|
5
|
-
|
6
|
-
# Sign the data with the key
|
7
|
-
#
|
8
|
-
# @param [Hash] hash data to sign
|
9
|
-
# @param [OpenSSL::PKey::RSA] key An RSA key
|
10
|
-
# @return [String] A Base64 encoded signature of #signable_string with key
|
11
|
-
def self.sign_with_key(hash, key)
|
12
|
-
sig = Base64.strict_encode64(
|
13
|
-
key.sign(
|
14
|
-
OpenSSL::Digest::SHA256.new,
|
15
|
-
signable_string(hash)
|
16
|
-
)
|
17
|
-
)
|
18
|
-
logger.info "event=sign_with_key status=complete guid=#{hash[:guid]}"
|
19
|
-
sig
|
20
|
-
end
|
21
|
-
|
22
|
-
# Check that signature is a correct signature
|
23
|
-
#
|
24
|
-
# @param [Hash] hash data to verify
|
25
|
-
# @param [String] signature The signature to be verified.
|
26
|
-
# @param [OpenSSL::PKey::RSA] key An RSA key
|
27
|
-
# @return [Boolean]
|
28
|
-
def self.verify_signature(hash, signature, key)
|
29
|
-
if key.nil?
|
30
|
-
logger.warn "event=verify_signature status=abort reason=no_key guid=#{hash[:guid]}"
|
31
|
-
return false
|
32
|
-
elsif signature.nil?
|
33
|
-
logger.warn "event=verify_signature status=abort reason=no_signature guid=#{hash[:guid]}"
|
34
|
-
return false
|
35
|
-
end
|
36
|
-
|
37
|
-
validity = key.verify(
|
38
|
-
OpenSSL::Digest::SHA256.new,
|
39
|
-
Base64.decode64(signature),
|
40
|
-
signable_string(hash)
|
41
|
-
)
|
42
|
-
logger.info "event=verify_signature status=complete guid=#{hash[:guid]} validity=#{validity}"
|
43
|
-
validity
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
# @param [Hash] hash data to sign
|
49
|
-
# @return [String] signature data string
|
50
|
-
def self.signable_string(hash)
|
51
|
-
hash.map { |name, value|
|
52
|
-
value.to_s unless name.match(/signature/)
|
53
|
-
}.compact.join(";")
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|