diaspora_federation-rails 0.0.12 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
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