add Person and Profile entity for discovery-data
This commit is contained in:
parent
6d63903e73
commit
c65ad965b3
7 changed files with 136 additions and 25 deletions
|
|
@ -6,6 +6,8 @@ require "diaspora_federation/entity"
|
|||
|
||||
require "diaspora_federation/fetcher"
|
||||
|
||||
require "diaspora_federation/entities"
|
||||
|
||||
require "diaspora_federation/discovery"
|
||||
|
||||
# diaspora* federation library
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ module DiasporaFederation
|
|||
end
|
||||
|
||||
# fetch all metadata for the account
|
||||
# @return [Person]
|
||||
def fetch
|
||||
logger.info "Fetch data for #{handle}"
|
||||
|
||||
|
|
@ -20,7 +21,7 @@ module DiasporaFederation
|
|||
raise DiscoveryError, "Handle does not match: Wanted #{handle} but got #{clean_handle(webfinger.acct_uri)}"
|
||||
end
|
||||
|
||||
discovery_data_hash
|
||||
Entities::Person.new(person_hash)
|
||||
end
|
||||
|
||||
private
|
||||
|
|
@ -63,14 +64,26 @@ module DiasporaFederation
|
|||
@hcard ||= HCard.from_html get(webfinger.hcard_url)
|
||||
end
|
||||
|
||||
def discovery_data_hash
|
||||
hcard_hash = hcard.to_h.expect(:guid, :serialized_public_key)
|
||||
hcard_hash.merge(
|
||||
def person_hash
|
||||
{
|
||||
guid: hcard.guid || webfinger.guid,
|
||||
public_key: hcard.public_key || webfinger.public_key,
|
||||
diaspora_handle: handle,
|
||||
seed_url: webfinger.seed_url
|
||||
)
|
||||
url: webfinger.seed_url,
|
||||
exported_key: hcard.public_key || webfinger.public_key,
|
||||
profile: Entities::Profile.new(profile_hash)
|
||||
}
|
||||
end
|
||||
|
||||
def profile_hash
|
||||
{
|
||||
diaspora_handle: handle,
|
||||
first_name: hcard.first_name,
|
||||
last_name: hcard.last_name,
|
||||
image_url: hcard.photo_large_url,
|
||||
image_url_medium: hcard.photo_medium_url,
|
||||
image_url_small: hcard.photo_small_url,
|
||||
searchable: hcard.searchable
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ module DiasporaFederation
|
|||
property :nickname
|
||||
|
||||
# @!attribute [r] full_name
|
||||
# @return [String] display name of the user
|
||||
# @return [String] display name of the user
|
||||
property :full_name
|
||||
|
||||
# @!attribute [r] url
|
||||
|
|
|
|||
12
lib/diaspora_federation/entities.rb
Normal file
12
lib/diaspora_federation/entities.rb
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
module DiasporaFederation
|
||||
# This namespace contains all the entities used to encapsulate data that is
|
||||
# passed around in the Diaspora* network as part of the federation protocol.
|
||||
#
|
||||
# All entities must be defined in this namespace. otherwise the XML
|
||||
# de-serialization will fail.
|
||||
module Entities
|
||||
end
|
||||
end
|
||||
|
||||
require "diaspora_federation/entities/profile"
|
||||
require "diaspora_federation/entities/person"
|
||||
31
lib/diaspora_federation/entities/person.rb
Normal file
31
lib/diaspora_federation/entities/person.rb
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
module DiasporaFederation
|
||||
module Entities
|
||||
# this entity contains the base data of a person
|
||||
class Person < Entity
|
||||
# @!attribute [r] guid
|
||||
# @see HCard#guid
|
||||
# @return [String] guid
|
||||
property :guid
|
||||
|
||||
# @!attribute [r] diaspora_handle
|
||||
# The diaspora handle of the person
|
||||
# @return [String] diaspora handle
|
||||
property :diaspora_handle
|
||||
|
||||
# @!attribute [r] url
|
||||
# @see WebFinger#seed_url
|
||||
# @return [String] link to the pod
|
||||
property :url
|
||||
|
||||
# @!attribute [r] profile
|
||||
# all profile data of the person
|
||||
# @return [Profile] the profile of the person
|
||||
entity :profile, Entities::Profile
|
||||
|
||||
# @!attribute [r] exported_key
|
||||
# @see HCard#public_key
|
||||
# @return [String] public key
|
||||
property :exported_key
|
||||
end
|
||||
end
|
||||
end
|
||||
51
lib/diaspora_federation/entities/profile.rb
Normal file
51
lib/diaspora_federation/entities/profile.rb
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
module DiasporaFederation
|
||||
module Entities
|
||||
# this entity contains all the profile data of a person
|
||||
class Profile < Entity
|
||||
# @!attribute [r] diaspora_handle
|
||||
# The diaspora handle of the person
|
||||
# @see Person#diaspora_handle
|
||||
# @return [String] diaspora handle
|
||||
property :diaspora_handle
|
||||
|
||||
# @!attribute [r] first_name
|
||||
# @deprecated
|
||||
# @see #full_name
|
||||
# @see HCard#first_name
|
||||
# @return [String] first name
|
||||
property :first_name, default: nil
|
||||
|
||||
# @!attribute [r] last_name
|
||||
# @deprecated
|
||||
# @see #full_name
|
||||
# @see HCard#last_name
|
||||
# @return [String] last name
|
||||
property :last_name, default: nil
|
||||
# @!attribute [r] image_url
|
||||
# @see HCard#photo_large_url
|
||||
# @return [String] url to the big avatar (300x300)
|
||||
property :image_url, default: nil
|
||||
# @!attribute [r] image_url_medium
|
||||
# @see HCard#photo_medium_url
|
||||
# @return [String] url to the medium avatar (100x100)
|
||||
property :image_url_medium, default: nil
|
||||
# @!attribute [r] image_url_small
|
||||
# @see HCard#photo_small_url
|
||||
# @return [String] url to the small avatar (50x50)
|
||||
property :image_url_small, default: nil
|
||||
|
||||
property :birthday, default: nil
|
||||
property :gender, default: nil
|
||||
property :bio, default: nil
|
||||
property :location, default: nil
|
||||
|
||||
# @!attribute [r] searchable
|
||||
# @see HCard#searchable
|
||||
# @return [Boolean] searchable flag
|
||||
property :searchable, default: true
|
||||
|
||||
property :nsfw, default: false
|
||||
property :tag_string, default: nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,22 +1,24 @@
|
|||
module Entities
|
||||
class TestEntity < DiasporaFederation::Entity
|
||||
property :test
|
||||
end
|
||||
module DiasporaFederation
|
||||
module Entities
|
||||
class TestEntity < DiasporaFederation::Entity
|
||||
property :test
|
||||
end
|
||||
|
||||
class TestDefaultEntity < DiasporaFederation::Entity
|
||||
property :test1
|
||||
property :test2
|
||||
property :test3, default: true
|
||||
property :test4, default: -> { true }
|
||||
end
|
||||
class TestDefaultEntity < DiasporaFederation::Entity
|
||||
property :test1
|
||||
property :test2
|
||||
property :test3, default: true
|
||||
property :test4, default: -> { true }
|
||||
end
|
||||
|
||||
class OtherEntity < DiasporaFederation::Entity
|
||||
property :asdf
|
||||
end
|
||||
class OtherEntity < DiasporaFederation::Entity
|
||||
property :asdf
|
||||
end
|
||||
|
||||
class TestNestedEntity < DiasporaFederation::Entity
|
||||
property :asdf
|
||||
entity :test, TestEntity
|
||||
entity :multi, [OtherEntity]
|
||||
class TestNestedEntity < DiasporaFederation::Entity
|
||||
property :asdf
|
||||
entity :test, TestEntity
|
||||
entity :multi, [OtherEntity]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in a new issue