diaspora_federation 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Changelog.md +11 -0
- data/lib/diaspora_federation.rb +2 -2
- data/lib/diaspora_federation/discovery/discovery.rb +5 -5
- data/lib/diaspora_federation/entities/relayable.rb +12 -14
- data/lib/diaspora_federation/federation/receiver/abstract_receiver.rb +1 -1
- data/lib/diaspora_federation/federation/sender/hydra_wrapper.rb +21 -17
- data/lib/diaspora_federation/validators/rules/boolean.rb +2 -2
- data/lib/diaspora_federation/validators/rules/diaspora_id_count.rb +2 -2
- data/lib/diaspora_federation/validators/rules/tag_count.rb +2 -2
- data/lib/diaspora_federation/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ada8efaa115784225786ce35f925e13179f7d5e2
|
4
|
+
data.tar.gz: 9ecfc78d096a8f5173ddbcd3665fd22445c9374c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ad31c9c21a5e42e0197ccb51ec14d8e5262b6fc527f9b3b7ba95ff9162d69c8be8783275d576a7051bca3ddfbe0913dd3d1b5d46ad9d32a90c2288b510c6f42
|
7
|
+
data.tar.gz: 1b32aa2ff5b1c4d0763f8b97eb1473cc03d143ae3f7bd028a24557e11780d8a2b6d2f14c89ecd67977eae708b33aba868de867e3c92031c583468577f4fd2c4a
|
data/Changelog.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
# 0.1.5
|
2
|
+
|
3
|
+
## Refactor
|
4
|
+
|
5
|
+
* Use `head` method instead of `:nothing` option [44f6527](https://github.com/diaspora/diaspora_federation/commit/44f6527d64489c212c0f6b050ad343ea0e53e964)
|
6
|
+
* Add `sender` parameter to `:receive_entity` callback [fb60f83](https://github.com/diaspora/diaspora_federation/commit/fb60f8392698f49b9291f3461e7a68ec84def9e2)
|
7
|
+
|
8
|
+
## Bug fixes
|
9
|
+
|
10
|
+
* HydraWrapper: Validate hostname after redirect [d18e623](https://github.com/diaspora/diaspora_federation/commit/d18e623082ac620a89e0542ceb97a9f2501c16bf)
|
11
|
+
|
1
12
|
# 0.1.4
|
2
13
|
|
3
14
|
## Refactor
|
data/lib/diaspora_federation.rb
CHANGED
@@ -232,8 +232,8 @@ module DiasporaFederation
|
|
232
232
|
private
|
233
233
|
|
234
234
|
def validate_http_config
|
235
|
-
configuration_error "http_concurrency: please configure a number" unless @http_concurrency.is_a?(
|
236
|
-
configuration_error "http_timeout: please configure a number" unless @http_timeout.is_a?(
|
235
|
+
configuration_error "http_concurrency: please configure a number" unless @http_concurrency.is_a?(Integer)
|
236
|
+
configuration_error "http_timeout: please configure a number" unless @http_timeout.is_a?(Integer)
|
237
237
|
|
238
238
|
return unless !@http_verbose.is_a?(TrueClass) && !@http_verbose.is_a?(FalseClass)
|
239
239
|
configuration_error "http_verbose: please configure a boolean"
|
@@ -44,13 +44,13 @@ module DiasporaFederation
|
|
44
44
|
raise "Failed to fetch #{url}: #{response.status}" unless response.success?
|
45
45
|
response.body
|
46
46
|
rescue => e
|
47
|
-
|
48
|
-
logger.warn "Retry with http: #{url} for #{diaspora_id}: #{e.class}: #{e.message}"
|
49
|
-
url.sub!("https://", "http://")
|
50
|
-
retry
|
51
|
-
else
|
47
|
+
unless http_fallback && url.start_with?("https://")
|
52
48
|
raise DiscoveryError, "Failed to fetch #{url} for #{diaspora_id}: #{e.class}: #{e.message}"
|
53
49
|
end
|
50
|
+
|
51
|
+
logger.warn "Retry with http: #{url} for #{diaspora_id}: #{e.class}: #{e.message}"
|
52
|
+
url.sub!("https://", "http://")
|
53
|
+
retry
|
54
54
|
end
|
55
55
|
|
56
56
|
def host_meta_url
|
@@ -131,10 +131,10 @@ module DiasporaFederation
|
|
131
131
|
# @return [String] A Base64 encoded signature of #signature_data with key
|
132
132
|
def sign_with_parent_author_if_available
|
133
133
|
privkey = DiasporaFederation.callbacks.trigger(:fetch_private_key, parent.author)
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
134
|
+
return unless privkey
|
135
|
+
|
136
|
+
sign_with_key(privkey).tap do
|
137
|
+
logger.info "event=sign status=complete signature=parent_author_signature obj=#{self}"
|
138
138
|
end
|
139
139
|
end
|
140
140
|
|
@@ -209,11 +209,9 @@ module DiasporaFederation
|
|
209
209
|
|
210
210
|
def fetch_parent(data)
|
211
211
|
type = data.fetch(:parent_type) {
|
212
|
-
if const_defined?(:PARENT_TYPE)
|
213
|
-
|
214
|
-
|
215
|
-
raise DiasporaFederation::Entity::ValidationError, "invalid #{self}! missing 'parent_type'."
|
216
|
-
end
|
212
|
+
break self::PARENT_TYPE if const_defined?(:PARENT_TYPE)
|
213
|
+
|
214
|
+
raise DiasporaFederation::Entity::ValidationError, "invalid #{self}! missing 'parent_type'."
|
217
215
|
}
|
218
216
|
guid = data.fetch(:parent_guid) {
|
219
217
|
raise DiasporaFederation::Entity::ValidationError, "invalid #{self}! missing 'parent_guid'."
|
@@ -221,11 +219,11 @@ module DiasporaFederation
|
|
221
219
|
|
222
220
|
data[:parent] = DiasporaFederation.callbacks.trigger(:fetch_related_entity, type, guid)
|
223
221
|
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
222
|
+
return if data[:parent]
|
223
|
+
|
224
|
+
# Fetch and receive parent from remote, if not available locally
|
225
|
+
Federation::Fetcher.fetch_public(data[:author], type, guid)
|
226
|
+
data[:parent] = DiasporaFederation.callbacks.trigger(:fetch_related_entity, type, guid)
|
229
227
|
end
|
230
228
|
end
|
231
229
|
|
@@ -28,7 +28,7 @@ module DiasporaFederation
|
|
28
28
|
|
29
29
|
def validate_and_receive
|
30
30
|
validate
|
31
|
-
DiasporaFederation.callbacks.trigger(:receive_entity, entity, recipient_id)
|
31
|
+
DiasporaFederation.callbacks.trigger(:receive_entity, entity, sender, recipient_id)
|
32
32
|
logger.info "successfully received #{entity} from person #{sender}#{" for #{recipient_id}" if recipient_id}"
|
33
33
|
end
|
34
34
|
|
@@ -11,13 +11,14 @@ module DiasporaFederation
|
|
11
11
|
# @return [Hash] hydra opts
|
12
12
|
def self.hydra_opts
|
13
13
|
@hydra_opts ||= {
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
14
|
+
followlocation: true,
|
15
|
+
maxredirs: DiasporaFederation.http_redirect_limit,
|
16
|
+
timeout: DiasporaFederation.http_timeout,
|
17
|
+
method: :post,
|
18
|
+
verbose: DiasporaFederation.http_verbose,
|
19
|
+
cainfo: DiasporaFederation.certificate_authorities,
|
20
|
+
forbid_reuse: true,
|
21
|
+
headers: {
|
21
22
|
"Expect" => "",
|
22
23
|
"Transfer-Encoding" => "",
|
23
24
|
"User-Agent" => DiasporaFederation.http_user_agent
|
@@ -62,9 +63,7 @@ module DiasporaFederation
|
|
62
63
|
# @param [Typhoeus::Request] request
|
63
64
|
def prepare_request(request)
|
64
65
|
request.on_complete do |response|
|
65
|
-
|
66
|
-
|
67
|
-
success = response.success?
|
66
|
+
success = validate_response_and_update_pod(request, response)
|
68
67
|
log_line = "success=#{success} sender=#{@sender_id} obj=#{@obj_str} url=#{response.effective_url} " \
|
69
68
|
"message=#{response.return_code} code=#{response.response_code} time=#{response.total_time}"
|
70
69
|
if success
|
@@ -77,15 +76,20 @@ module DiasporaFederation
|
|
77
76
|
end
|
78
77
|
end
|
79
78
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
79
|
+
def validate_response_and_update_pod(request, response)
|
80
|
+
url = URI.parse(request.url)
|
81
|
+
effective_url = URI.parse(response.effective_url)
|
82
|
+
same_host = url.host == effective_url.host
|
83
|
+
|
84
|
+
(response.success? && same_host).tap do |success|
|
85
|
+
pod_url = (success ? effective_url : url).tap {|uri| uri.path = "/" }.to_s
|
86
|
+
status = same_host ? status_from_response(response) : :redirected_to_other_hostname
|
87
|
+
DiasporaFederation.callbacks.trigger(:update_pod, pod_url, status)
|
88
|
+
end
|
85
89
|
end
|
86
90
|
|
87
|
-
def
|
88
|
-
|
91
|
+
def status_from_response(response)
|
92
|
+
response.return_code == :ok ? response.response_code : response.return_code
|
89
93
|
end
|
90
94
|
end
|
91
95
|
end
|
@@ -4,7 +4,7 @@ module Validation
|
|
4
4
|
#
|
5
5
|
# Valid is:
|
6
6
|
# * a +String+: "true", "false", "t", "f", "yes", "no", "y", "n", "1", "0"
|
7
|
-
# * a +
|
7
|
+
# * a +Integer+: 1 or 0
|
8
8
|
# * a +Boolean+: true or false
|
9
9
|
class Boolean
|
10
10
|
# The error key for this rule
|
@@ -19,7 +19,7 @@ module Validation
|
|
19
19
|
|
20
20
|
if value.is_a?(String)
|
21
21
|
true if value =~ /\A(true|false|t|f|yes|no|y|n|1|0)\z/i
|
22
|
-
elsif value.is_a?(
|
22
|
+
elsif value.is_a?(Integer)
|
23
23
|
true if value == 1 || value == 0
|
24
24
|
elsif [true, false].include? value
|
25
25
|
true
|
@@ -9,9 +9,9 @@ module Validation
|
|
9
9
|
|
10
10
|
# Creates a new rule for a maximum diaspora* ID count validation
|
11
11
|
# @param [Hash] params
|
12
|
-
# @option params [
|
12
|
+
# @option params [Integer] :maximum maximum allowed id count
|
13
13
|
def initialize(params)
|
14
|
-
unless params.include?(:maximum) && params[:maximum].is_a?(
|
14
|
+
unless params.include?(:maximum) && params[:maximum].is_a?(Integer)
|
15
15
|
raise ArgumentError, "A number has to be specified for :maximum"
|
16
16
|
end
|
17
17
|
|
@@ -10,9 +10,9 @@ module Validation
|
|
10
10
|
|
11
11
|
# Creates a new rule for a maximum tag count validation
|
12
12
|
# @param [Hash] params
|
13
|
-
# @option params [
|
13
|
+
# @option params [Integer] :maximum maximum allowed tag count
|
14
14
|
def initialize(params)
|
15
|
-
unless params.include?(:maximum) && params[:maximum].is_a?(
|
15
|
+
unless params.include?(:maximum) && params[:maximum].is_a?(Integer)
|
16
16
|
raise ArgumentError, "A number has to be specified for :maximum"
|
17
17
|
end
|
18
18
|
|
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.1.
|
4
|
+
version: 0.1.5
|
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-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|