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: 3bc0f1579572749f536a1c85277a9ae875cb6bae
4
- data.tar.gz: ce86ee406e7882fbf924788934dd66bc4ade9e9f
3
+ metadata.gz: 9b03b6fa1888ffee4dd8ca177375f2e945bb1fae
4
+ data.tar.gz: 4e11d2005c587ac8ba7eb1c5d47ea60260df22b1
5
5
  SHA512:
6
- metadata.gz: 3627595c4d7d9c16edbacdbcbc18787f06b1fabf2eff7a9d34603e948fde827b93084ae3165d93c8b0f539e39cc81db11cf23f18665ef84b5957236e46a497fc
7
- data.tar.gz: 788dcfc5806e6e0fcdc8210351025078f1e48f9c813b544567b8bcdd8214238a186bd3d4a17104a445cc7a92b53c43bb678b47970a079b0d9a861f6c7df4b4ab
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
- logger.info "received a public message"
14
- xml = CGI.unescape(params[:xml])
15
- logger.debug xml
12
+ legacy = request.content_type != "application/magic-envelope+xml"
16
13
 
17
- DiasporaFederation.callbacks.trigger(:queue_public_receive, xml)
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
- logger.info "received a private message for #{params[:guid]}"
27
- xml = CGI.unescape(params[:xml])
28
- logger.debug xml
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], xml)
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
- render nothing: true, status: 422 if params[:xml].nil?
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 body: WebfingerController.host_meta_xml, content_type: "application/xrd+xml"
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 body: person_wf.to_xml, content_type: "application/xrd+xml"
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.12
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-01-23 00:00:00.000000000 Z
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.12
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.12
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