Commit fedb0d62112cd6962ea2a738ff3ce544408e7166

Authored by Thiago Ribeiro
Committed by Alessandro Beltrão
1 parent 110c9f56

Federation webfinger

lib/noosfero/api/api.rb
... ... @@ -5,14 +5,12 @@ Dir["#{Rails.root}/lib/noosfero/api/*.rb"].each {|file| require file unless file
5 5 module Noosfero
6 6 module API
7 7  
8   - class Federation < Grape::API
  8 + class NoosferoFederation < Grape::API
  9 + before { detect_stuff_by_domain }
9 10 format :json
10   - content_type :txt, "text/plain"
11   -
12   - #REMOVE ME - testing routes only
13   - get "/me" do
14   - present_partial current_person, :with => Entities::Person, :current_person => current_person
15   - end
  11 + content_type :json, "application/jrd+json"
  12 + prefix ".well-known"
  13 + mount Federation::Webfinger
16 14 end
17 15  
18 16 class BaseAPI < Grape::API
... ... @@ -70,7 +68,7 @@ module Noosfero
70 68 end
71 69  
72 70 mount Noosfero::API::BaseAPI
73   - mount Noosfero::API::Federation
  71 + mount Noosfero::API::NoosferoFederation
74 72  
75 73 # hook point which allow plugins to add Grape::API extensions to API::API
76 74 #finds for plugins which has api mount points classes defined (the class should extends Grape::API)
... ...
lib/noosfero/api/federation/webfinger.rb 0 → 100644
... ... @@ -0,0 +1,48 @@
  1 +module Noosfero
  2 + module API
  3 + module Federation
  4 + class Webfinger < Grape::API
  5 + get "webfinger" do
  6 + result = generate_jrd
  7 + present result, :with => Grape::Presenters::Presenter
  8 + end
  9 + end
  10 + end
  11 + end
  12 +end
  13 +
  14 +def extract_person_identifier
  15 + person = params[:resource].split("@")[0].split(":")[1]
  16 + person
  17 +end
  18 +
  19 +def valid_domain?
  20 + #validate domain if resource have acct
  21 + if request_acct?
  22 + domain = params[:resource].split("@")[1]
  23 + environment.domains.map(&:name).include? domain
  24 + else
  25 + #please validate domain with http
  26 + false
  27 + end
  28 +end
  29 +
  30 +def generate_jrd
  31 + if valid_domain? && request_acct?
  32 + result = {}
  33 + result = acct_hash
  34 + else
  35 + "This Domain this not exist in this envinronment"
  36 + end
  37 +end
  38 +
  39 +def request_acct?
  40 + params[:resource].include? "acct:"
  41 +end
  42 +
  43 +def acct_hash
  44 + acct = {}
  45 + acct[:subject] = params[:resource]
  46 + acct[:properties] = Person.find_by_identifier(extract_person_identifier)
  47 + acct
  48 +end
... ...