diaspora_federation-rails 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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b03b6fa1888ffee4dd8ca177375f2e945bb1fae
|
4
|
+
data.tar.gz: 4e11d2005c587ac8ba7eb1c5d47ea60260df22b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf5779d3f78cd35095be2d5186397868f6677181403244ef40023557f1d8fef065f49a967675f83d02226f97c12db0c76317c8296969316fa48af2ed90260c5d
|
7
|
+
data.tar.gz: 88b210bf518481fd5c79540d797c1b980a7fdd45b7541aed16db825c357499306e7d57b4514e6e5bf4d8311b748cd7dd2ca590c2d19865fd64d11c7c28c1982a
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require_dependency "diaspora_federation/application_controller"
|
2
|
+
|
3
|
+
module DiasporaFederation
|
4
|
+
# this controller processes fetch requests
|
5
|
+
class FetchController < ApplicationController
|
6
|
+
# returns the fetched entity or a redirect
|
7
|
+
#
|
8
|
+
# GET /fetch/:type/:guid
|
9
|
+
def fetch
|
10
|
+
entity = fetch_public_entity
|
11
|
+
if entity
|
12
|
+
magic_env = create_magic_envelope(entity)
|
13
|
+
if magic_env
|
14
|
+
render xml: magic_env, content_type: "application/magic-envelope+xml"
|
15
|
+
else
|
16
|
+
redirect_to DiasporaFederation.callbacks.trigger(:fetch_person_url_to,
|
17
|
+
entity.author, "/fetch/#{params[:type]}/#{params[:guid]}")
|
18
|
+
end
|
19
|
+
else
|
20
|
+
render nothing: true, status: 404
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def fetch_public_entity
|
27
|
+
type = DiasporaFederation::Entity.entity_class(params[:type]).to_s.rpartition("::").last
|
28
|
+
DiasporaFederation.callbacks.trigger(:fetch_public_entity, type, params[:guid])
|
29
|
+
end
|
30
|
+
|
31
|
+
def create_magic_envelope(entity)
|
32
|
+
privkey = DiasporaFederation.callbacks.trigger(:fetch_private_key_by_diaspora_id, entity.author)
|
33
|
+
Salmon::MagicEnvelope.new(entity, entity.author).envelop(privkey) if privkey
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require_dependency "diaspora_federation/application_controller"
|
2
|
-
require "diaspora_federation/receiver"
|
3
2
|
|
4
3
|
module DiasporaFederation
|
5
4
|
# this controller processes receiving messages
|
@@ -10,11 +9,12 @@ module DiasporaFederation
|
|
10
9
|
#
|
11
10
|
# POST /receive/public
|
12
11
|
def public
|
13
|
-
|
14
|
-
xml = CGI.unescape(params[:xml])
|
15
|
-
logger.debug xml
|
12
|
+
legacy = request.content_type != "application/magic-envelope+xml"
|
16
13
|
|
17
|
-
|
14
|
+
data = data_for_public_message(legacy)
|
15
|
+
logger.debug data
|
16
|
+
|
17
|
+
DiasporaFederation.callbacks.trigger(:queue_public_receive, data, legacy)
|
18
18
|
|
19
19
|
render nothing: true, status: 202
|
20
20
|
end
|
@@ -23,19 +23,43 @@ module DiasporaFederation
|
|
23
23
|
#
|
24
24
|
# POST /receive/users/:guid
|
25
25
|
def private
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
legacy = request.content_type != "application/json"
|
27
|
+
|
28
|
+
data = data_for_private_message(legacy)
|
29
|
+
logger.debug data
|
29
30
|
|
30
|
-
success = DiasporaFederation.callbacks.trigger(:queue_private_receive, params[:guid],
|
31
|
+
success = DiasporaFederation.callbacks.trigger(:queue_private_receive, params[:guid], data, legacy)
|
31
32
|
|
32
33
|
render nothing: true, status: success ? 202 : 404
|
33
34
|
end
|
34
35
|
|
35
36
|
private
|
36
37
|
|
38
|
+
# checks the xml parameter for legacy salmon slaps
|
39
|
+
# @deprecated
|
37
40
|
def check_for_xml
|
38
|
-
|
41
|
+
legacy_request = request.content_type.nil? || request.content_type == "application/x-www-form-urlencoded"
|
42
|
+
render nothing: true, status: 422 if params[:xml].nil? && legacy_request
|
43
|
+
end
|
44
|
+
|
45
|
+
def data_for_public_message(legacy)
|
46
|
+
if legacy
|
47
|
+
logger.info "received a public salmon slap"
|
48
|
+
CGI.unescape(params[:xml])
|
49
|
+
else
|
50
|
+
logger.info "received a public magic envelope"
|
51
|
+
request.body.read
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def data_for_private_message(legacy)
|
56
|
+
if legacy
|
57
|
+
logger.info "received a private salmon slap for #{params[:guid]}"
|
58
|
+
CGI.unescape(params[:xml])
|
59
|
+
else
|
60
|
+
logger.info "received a private encrypted magic envelope for #{params[:guid]}"
|
61
|
+
request.body.read
|
62
|
+
end
|
39
63
|
end
|
40
64
|
end
|
41
65
|
end
|
@@ -13,7 +13,7 @@ module DiasporaFederation
|
|
13
13
|
#
|
14
14
|
# GET /.well-known/host-meta
|
15
15
|
def host_meta
|
16
|
-
render
|
16
|
+
render xml: WebfingerController.host_meta_xml, content_type: "application/xrd+xml"
|
17
17
|
end
|
18
18
|
|
19
19
|
# @deprecated this is the pre RFC 7033 webfinger
|
@@ -41,18 +41,18 @@ module DiasporaFederation
|
|
41
41
|
render nothing: true, status: 404
|
42
42
|
else
|
43
43
|
logger.info "webfinger profile request for: #{person_wf.acct_uri}"
|
44
|
-
render
|
44
|
+
render xml: person_wf.to_xml, content_type: "application/xrd+xml"
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
|
-
private
|
49
|
-
|
50
48
|
# creates the host-meta xml with the configured server_uri and caches it
|
51
49
|
# @return [String] XML string
|
52
50
|
def self.host_meta_xml
|
53
51
|
@host_meta_xml ||= Discovery::HostMeta.from_base_url(DiasporaFederation.server_uri.to_s).to_xml
|
54
52
|
end
|
55
53
|
|
54
|
+
private
|
55
|
+
|
56
56
|
def find_person_webfinger(query)
|
57
57
|
DiasporaFederation.callbacks.trigger(:fetch_person_for_webfinger, query.strip.downcase.sub("acct:", ""))
|
58
58
|
end
|
data/config/routes.rb
CHANGED
@@ -4,6 +4,10 @@ DiasporaFederation::Engine.routes.draw do
|
|
4
4
|
post "receive/users/:guid" => :private, :as => "receive_private"
|
5
5
|
end
|
6
6
|
|
7
|
+
controller :fetch do
|
8
|
+
get "fetch/:type/:guid" => :fetch, :as => "fetch"
|
9
|
+
end
|
10
|
+
|
7
11
|
controller :webfinger do
|
8
12
|
get ".well-known/host-meta" => :host_meta, :as => "host_meta"
|
9
13
|
get "webfinger" => :legacy_webfinger, :as => "legacy_webfinger"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: diaspora_federation-rails
|
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: rails
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.0.
|
33
|
+
version: 0.0.13
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.0.
|
40
|
+
version: 0.0.13
|
41
41
|
description: A rails engine that adds the diaspora* federation protocol to a rails
|
42
42
|
app
|
43
43
|
email:
|
@@ -49,6 +49,7 @@ files:
|
|
49
49
|
- LICENSE
|
50
50
|
- README.md
|
51
51
|
- app/controllers/diaspora_federation/application_controller.rb
|
52
|
+
- app/controllers/diaspora_federation/fetch_controller.rb
|
52
53
|
- app/controllers/diaspora_federation/h_card_controller.rb
|
53
54
|
- app/controllers/diaspora_federation/receive_controller.rb
|
54
55
|
- app/controllers/diaspora_federation/webfinger_controller.rb
|