Commit dd80b7dcffc11134687d1c9ff9459f8ba1ea9907
1 parent
fedb0d62
Exists in
federation_webfinger
and in
1 other branch
Adding uri to webfinger resource
Signed-off-by: Thiago Ribeiro <thiagitosouza@gmail.com>
Showing
1 changed file
with
32 additions
and
3 deletions
Show diff stats
lib/noosfero/api/federation/webfinger.rb
| 1 | +require 'active_support/inflector' | ||
| 1 | module Noosfero | 2 | module Noosfero |
| 2 | module API | 3 | module API |
| 3 | module Federation | 4 | module Federation |
| @@ -27,12 +28,29 @@ def valid_domain? | @@ -27,12 +28,29 @@ def valid_domain? | ||
| 27 | end | 28 | end |
| 28 | end | 29 | end |
| 29 | 30 | ||
| 31 | +def valid_uri?(url) | ||
| 32 | + uri = URI.parse(url) | ||
| 33 | + uri.kind_of?(URI::HTTP) | ||
| 34 | + rescue URI::BadURIError | ||
| 35 | + false | ||
| 36 | + rescue URI::InvalidURIError | ||
| 37 | + false | ||
| 38 | +end | ||
| 39 | + | ||
| 40 | +def entity_exists?(uri) | ||
| 41 | + possible_entity = uri.split('/') | ||
| 42 | + possible_entity.map! {|entity| "#{entity}s"} | ||
| 43 | + ( ActiveRecord::Base.connection.tables & possible_entity ) | ||
| 44 | + rescue ActiveRecord::RecordNotFound | ||
| 45 | + false | ||
| 46 | +end | ||
| 47 | + | ||
| 30 | def generate_jrd | 48 | def generate_jrd |
| 49 | + result = {} | ||
| 31 | if valid_domain? && request_acct? | 50 | if valid_domain? && request_acct? |
| 32 | - result = {} | ||
| 33 | result = acct_hash | 51 | result = acct_hash |
| 34 | - else | ||
| 35 | - "This Domain this not exist in this envinronment" | 52 | + elsif valid_uri?(params[:resource]) |
| 53 | + result = uri_hash | ||
| 36 | end | 54 | end |
| 37 | end | 55 | end |
| 38 | 56 | ||
| @@ -46,3 +64,14 @@ def acct_hash | @@ -46,3 +64,14 @@ def acct_hash | ||
| 46 | acct[:properties] = Person.find_by_identifier(extract_person_identifier) | 64 | acct[:properties] = Person.find_by_identifier(extract_person_identifier) |
| 47 | acct | 65 | acct |
| 48 | end | 66 | end |
| 67 | + | ||
| 68 | +def uri_hash | ||
| 69 | + uri = {} | ||
| 70 | + uri[:subject] = params[:resource] | ||
| 71 | + entity = entity_exists?(params[:resource]) | ||
| 72 | + noosfero_entity = ActiveSupport::Inflector.classify(entity) | ||
| 73 | + id = params[:resource].split('/').last.to_i | ||
| 74 | + uri[:properties] = entity.first.classify.constantize.find(id) | ||
| 75 | + puts uri.inspect | ||
| 76 | + uri | ||
| 77 | +end |