diaspora_federation 0.0.12 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/lib/diaspora_federation.rb +103 -18
  3. data/lib/diaspora_federation/discovery/discovery.rb +1 -1
  4. data/lib/diaspora_federation/discovery/h_card.rb +4 -5
  5. data/lib/diaspora_federation/discovery/host_meta.rb +1 -1
  6. data/lib/diaspora_federation/discovery/web_finger.rb +8 -8
  7. data/lib/diaspora_federation/discovery/xrd_document.rb +6 -7
  8. data/lib/diaspora_federation/entities.rb +21 -10
  9. data/lib/diaspora_federation/entities/account_deletion.rb +7 -3
  10. data/lib/diaspora_federation/entities/comment.rb +13 -10
  11. data/lib/diaspora_federation/entities/contact.rb +29 -0
  12. data/lib/diaspora_federation/entities/conversation.rb +5 -6
  13. data/lib/diaspora_federation/entities/like.rb +10 -18
  14. data/lib/diaspora_federation/entities/message.rb +6 -12
  15. data/lib/diaspora_federation/entities/participation.rb +8 -16
  16. data/lib/diaspora_federation/entities/person.rb +6 -2
  17. data/lib/diaspora_federation/entities/photo.rb +3 -3
  18. data/lib/diaspora_federation/entities/poll_participation.rb +6 -12
  19. data/lib/diaspora_federation/entities/post.rb +37 -0
  20. data/lib/diaspora_federation/entities/profile.rb +7 -3
  21. data/lib/diaspora_federation/entities/relayable.rb +169 -65
  22. data/lib/diaspora_federation/entities/relayable_retraction.rb +33 -32
  23. data/lib/diaspora_federation/entities/request.rb +20 -6
  24. data/lib/diaspora_federation/entities/reshare.rb +5 -27
  25. data/lib/diaspora_federation/entities/retraction.rb +6 -6
  26. data/lib/diaspora_federation/entities/signed_retraction.rb +32 -26
  27. data/lib/diaspora_federation/entities/status_message.rb +2 -22
  28. data/lib/diaspora_federation/entity.rb +137 -38
  29. data/lib/diaspora_federation/federation.rb +9 -0
  30. data/lib/diaspora_federation/federation/fetcher.rb +26 -0
  31. data/lib/diaspora_federation/federation/receiver.rb +41 -0
  32. data/lib/diaspora_federation/federation/receiver/abstract_receiver.rb +35 -0
  33. data/lib/diaspora_federation/federation/receiver/exceptions.rb +13 -0
  34. data/lib/diaspora_federation/federation/receiver/private.rb +15 -0
  35. data/lib/diaspora_federation/federation/receiver/public.rb +9 -0
  36. data/lib/diaspora_federation/federation/sender.rb +33 -0
  37. data/lib/diaspora_federation/federation/sender/hydra_wrapper.rb +92 -0
  38. data/lib/diaspora_federation/{fetcher.rb → http_client.rb} +6 -6
  39. data/lib/diaspora_federation/properties_dsl.rb +51 -14
  40. data/lib/diaspora_federation/salmon.rb +2 -1
  41. data/lib/diaspora_federation/salmon/aes.rb +1 -1
  42. data/lib/diaspora_federation/salmon/encrypted_magic_envelope.rb +61 -0
  43. data/lib/diaspora_federation/salmon/encrypted_slap.rb +69 -50
  44. data/lib/diaspora_federation/salmon/exceptions.rb +8 -14
  45. data/lib/diaspora_federation/salmon/magic_envelope.rb +80 -39
  46. data/lib/diaspora_federation/salmon/slap.rb +20 -51
  47. data/lib/diaspora_federation/salmon/xml_payload.rb +5 -104
  48. data/lib/diaspora_federation/validators.rb +22 -16
  49. data/lib/diaspora_federation/validators/account_deletion_validator.rb +1 -1
  50. data/lib/diaspora_federation/validators/comment_validator.rb +0 -4
  51. data/lib/diaspora_federation/validators/contact_validator.rb +13 -0
  52. data/lib/diaspora_federation/validators/conversation_validator.rb +2 -2
  53. data/lib/diaspora_federation/validators/like_validator.rb +1 -3
  54. data/lib/diaspora_federation/validators/message_validator.rb +0 -4
  55. data/lib/diaspora_federation/validators/participation_validator.rb +1 -5
  56. data/lib/diaspora_federation/validators/person_validator.rb +1 -1
  57. data/lib/diaspora_federation/validators/photo_validator.rb +2 -2
  58. data/lib/diaspora_federation/validators/poll_participation_validator.rb +0 -4
  59. data/lib/diaspora_federation/validators/profile_validator.rb +1 -1
  60. data/lib/diaspora_federation/validators/relayable_retraction_validator.rb +1 -1
  61. data/lib/diaspora_federation/validators/relayable_validator.rb +2 -0
  62. data/lib/diaspora_federation/validators/request_validator.rb +3 -2
  63. data/lib/diaspora_federation/validators/reshare_validator.rb +3 -3
  64. data/lib/diaspora_federation/validators/retraction_validator.rb +2 -2
  65. data/lib/diaspora_federation/validators/rules/guid.rb +16 -7
  66. data/lib/diaspora_federation/validators/signed_retraction_validator.rb +1 -1
  67. data/lib/diaspora_federation/validators/status_message_validator.rb +2 -2
  68. data/lib/diaspora_federation/version.rb +1 -1
  69. metadata +20 -11
  70. data/lib/diaspora_federation/receiver.rb +0 -28
  71. data/lib/diaspora_federation/receiver/private.rb +0 -19
  72. data/lib/diaspora_federation/receiver/public.rb +0 -13
  73. data/lib/diaspora_federation/signing.rb +0 -56
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 139e142cef6dcafa3a2f3cf6d29c5c32e139d175
4
- data.tar.gz: afaa1ff9f0c2c53829c0e57d80e099d8a5ea7da4
3
+ metadata.gz: 1eab26d24aadd05dde520265d1fc2cae76cb71bb
4
+ data.tar.gz: 0454bedd0f5cef501c7a99d04a1e67db3f13db9e
5
5
  SHA512:
6
- metadata.gz: f7d23b7d5eae3ebfe956dca44fc3807ef4f035e3627568ebf4d6c5edbc8a8ff186277b5318ffbbef43186cf51b2e45c7859a4eeb773ece60256844b486f82fc6
7
- data.tar.gz: 1ac847a911f7254f426ea5141a95e65c770b82c32d48a8ca0d8f23a6b2c7a462a6358f4a7acbb0ff32ba9e5804caaf314086a72976cda15bacb2da66f5d75abf
6
+ metadata.gz: 6ed6351f1780275bfa7856e288ca6f23b202e8b34f54dae9d109ced23b8bb6c4815dfb1df171a29b0974737551b04694ff05750138ac5cbfe9a2866733da8d0c
7
+ data.tar.gz: 9fa0cb00be0cce4ee0c5aa1ffca7e33decb7e3f9afd9fc2019e898432f6dc57adf30ee5ab600256145756dc2395738eb607fc54970cd8728c5ad03a941af3ff0
@@ -1,3 +1,5 @@
1
+ require "diaspora_federation/version"
2
+
1
3
  require "diaspora_federation/logging"
2
4
 
3
5
  require "diaspora_federation/callbacks"
@@ -5,14 +7,13 @@ require "diaspora_federation/properties_dsl"
5
7
  require "diaspora_federation/entity"
6
8
  require "diaspora_federation/validators"
7
9
 
8
- require "diaspora_federation/fetcher"
10
+ require "diaspora_federation/http_client"
9
11
 
10
- require "diaspora_federation/signing"
11
12
  require "diaspora_federation/entities"
12
13
 
13
14
  require "diaspora_federation/discovery"
14
15
  require "diaspora_federation/salmon"
15
- require "diaspora_federation/receiver"
16
+ require "diaspora_federation/federation"
16
17
 
17
18
  # diaspora* federation library
18
19
  module DiasporaFederation
@@ -30,29 +31,84 @@ module DiasporaFederation
30
31
  fetch_entity_author_id_by_guid
31
32
  queue_public_receive
32
33
  queue_private_receive
33
- save_entity_after_receive
34
+ receive_entity
35
+ fetch_public_entity
36
+ fetch_person_url_to
37
+ update_pod
34
38
  )
35
39
 
40
+ # defaults
41
+ @http_concurrency = 20
42
+ @http_timeout = 30
43
+ @http_verbose = false
44
+ @http_redirect_limit = 4
45
+ @http_user_agent = "DiasporaFederation/#{DiasporaFederation::VERSION}"
46
+
36
47
  class << self
37
48
  # {Callbacks} instance with defined callbacks
38
49
  # @see Callbacks#on
39
50
  # @see Callbacks#trigger
51
+ # @return [Callbacks] callbacks
40
52
  attr_reader :callbacks
41
53
 
42
54
  # the pod url
43
55
  #
44
- # @example with uri
45
- # config.server_uri = URI("http://localhost:3000/")
46
- # @example with configured pod_uri
47
- # config.server_uri = AppConfig.pod_uri
56
+ # @overload server_uri
57
+ # @return [URI] the server uri
58
+ # @overload server_uri=
59
+ # @example with uri
60
+ # config.server_uri = URI("http://localhost:3000/")
61
+ # @example with configured pod_uri
62
+ # config.server_uri = AppConfig.pod_uri
63
+ # @param [URI] value the server uri
48
64
  attr_accessor :server_uri
49
65
 
50
66
  # Set the bundle of certificate authorities (CA) certificates
51
67
  #
52
- # @example
53
- # config.certificate_authorities = AppConfig.environment.certificate_authorities.get
68
+ # @overload certificate_authorities
69
+ # @return [String] path to certificate authorities
70
+ # @overload certificate_authorities=
71
+ # @example
72
+ # config.certificate_authorities = AppConfig.environment.certificate_authorities.get
73
+ # @param [String] value path to certificate authorities
54
74
  attr_accessor :certificate_authorities
55
75
 
76
+ # Maximum number of parallel HTTP requests made to other pods (default: +20+)
77
+ #
78
+ # @overload http_concurrency
79
+ # @return [Integer] max number of parallel requests
80
+ # @overload http_concurrency=
81
+ # @example
82
+ # config.http_concurrency = AppConfig.settings.typhoeus_concurrency.to_i
83
+ # @param [Integer] value max number of parallel requests
84
+ attr_accessor :http_concurrency
85
+
86
+ # timeout in seconds for http-requests (default: +30+)
87
+ #
88
+ # @overload http_timeout
89
+ # @return [Integer] http timeout in seconds
90
+ # @overload http_timeout=
91
+ # @param [Integer] value http timeout in seconds
92
+ attr_accessor :http_timeout
93
+
94
+ # Turn on extra verbose output when sending stuff. (default: +false+)
95
+ #
96
+ # @overload http_verbose
97
+ # @return [Boolean] verbose http output
98
+ # @overload http_verbose=
99
+ # @example
100
+ # config.http_verbose = AppConfig.settings.typhoeus_verbose?
101
+ # @param [Boolean] value verbose http output
102
+ attr_accessor :http_verbose
103
+
104
+ # max redirects to follow
105
+ # @return [Integer] max redirects
106
+ attr_reader :http_redirect_limit
107
+
108
+ # user agent used for http-requests
109
+ # @return [String] user agent
110
+ attr_reader :http_user_agent
111
+
56
112
  # configure the federation library
57
113
  #
58
114
  # @example
@@ -97,7 +153,7 @@ module DiasporaFederation
97
153
  #
98
154
  # fetch_author_private_key_by_entity_guid
99
155
  # Fetches a private key of the person who authored an entity identified by a given guid
100
- # @param [String] entity type (Post, Comment, Like, etc)
156
+ # @param [String] entity_type (Post, Comment, Like, etc)
101
157
  # @param [String] guid of the entity
102
158
  # @return [OpenSSL::PKey::RSA] key
103
159
  #
@@ -108,36 +164,55 @@ module DiasporaFederation
108
164
  #
109
165
  # fetch_author_public_key_by_entity_guid
110
166
  # Fetches a public key of the person who authored an entity identified by a given guid
111
- # @param [String] entity type (Post, Comment, Like, etc)
167
+ # @param [String] entity_type (Post, Comment, Like, etc)
112
168
  # @param [String] guid of the entity
113
169
  # @return [OpenSSL::PKey::RSA] key
114
170
  #
115
171
  # entity_author_is_local?
116
172
  # Reports if the author of the entity identified by a given guid is local on the pod
117
173
  # where we operate.
118
- # @param [String] entity type (Post, Comment, Like, etc)
174
+ # @param [String] entity_type (Post, Comment, Like, etc)
119
175
  # @param [String] guid of the entity
120
176
  # @return [Boolean]
121
177
  #
122
178
  # fetch_entity_author_id_by_guid
123
179
  # Fetches Diaspora ID of the person who authored the entity identified by a given guid
124
- # @param [String] entity type (Post, Comment, Like, etc)
180
+ # @param [String] entity_type (Post, Comment, Like, etc)
125
181
  # @param [String] guid of the entity
126
182
  # @return [String] Diaspora ID of the person
127
183
  #
128
184
  # queue_public_receive
129
185
  # Queue a public salmon xml to process in background
130
- # @param [String] xml salmon xml
186
+ # @param [String] data salmon slap xml or magic envelope xml
187
+ # @param [Boolean] legacy true if it is a legacy salmon slap, false if it is a magic envelope xml
131
188
  #
132
189
  # queue_private_receive
133
190
  # Queue a private salmon xml to process in background
134
191
  # @param [String] guid guid of the receiver person
135
- # @param [String] xml salmon xml
192
+ # @param [String] data salmon slap xml or encrypted magic envelope json
193
+ # @param [Boolean] legacy true if it is a legacy salmon slap, false if it is a encrypted magic envelope json
136
194
  # @return [Boolean] true if successful, false if the user was not found
137
195
  #
138
- # save_entity_after_receive
196
+ # receive_entity
139
197
  # After the xml was parsed and processed the gem calls this callback to persist the entity
140
198
  # @param [DiasporaFederation::Entity] entity the received entity after processing
199
+ # @param [Object] recipient_id identifier for the recipient of private messages or nil for public,
200
+ # see {Receiver.receive_private}
201
+ #
202
+ # fetch_public_entity
203
+ # fetch a public entity from the database
204
+ # @param [String] entity_type (Post, StatusMessage, etc)
205
+ # @param [String] guid the guid of the entity
206
+ #
207
+ # fetch_person_url_to
208
+ # fetch the url to path for a person
209
+ # @param [String] diaspora_id
210
+ # @param [String] path
211
+ #
212
+ # update_pod
213
+ # Update the pod status
214
+ # @param [String] url the pod url
215
+ # @param [Symbol, Integer] status the error as {Symbol} or the http-status as {Integer} if it was :ok
141
216
  #
142
217
  # @see Callbacks#on
143
218
  #
@@ -167,6 +242,8 @@ module DiasporaFederation
167
242
  end
168
243
  end
169
244
 
245
+ validate_http_config
246
+
170
247
  unless @callbacks.definition_complete?
171
248
  configuration_error "Missing handlers for #{@callbacks.missing_handlers.join(', ')}"
172
249
  end
@@ -176,8 +253,16 @@ module DiasporaFederation
176
253
 
177
254
  private
178
255
 
256
+ def validate_http_config
257
+ configuration_error "http_concurrency: please configure a number" unless @http_concurrency.is_a?(Fixnum)
258
+ configuration_error "http_timeout: please configure a number" unless @http_timeout.is_a?(Fixnum)
259
+
260
+ return unless !@http_verbose.is_a?(TrueClass) && !@http_verbose.is_a?(FalseClass)
261
+ configuration_error "http_verbose: please configure a boolean"
262
+ end
263
+
179
264
  def configuration_error(message)
180
- logger.fatal("diaspora federation configuration error: #{message}")
265
+ logger.fatal "diaspora federation configuration error: #{message}"
181
266
  raise ConfigurationError, message
182
267
  end
183
268
  end
@@ -40,7 +40,7 @@ module DiasporaFederation
40
40
 
41
41
  def get(url, http_fallback=false)
42
42
  logger.info "Fetching #{url} for #{diaspora_id}"
43
- response = Fetcher.get(url)
43
+ response = HttpClient.get(url)
44
44
  raise "Failed to fetch #{url}: #{response.status}" unless response.success?
45
45
  response.body
46
46
  rescue => e
@@ -47,7 +47,6 @@ module DiasporaFederation
47
47
 
48
48
  # @!attribute [r] nickname
49
49
  # the first part of the diaspora ID
50
- # @see Entities::Person#diaspora_id
51
50
  # @return [String] nickname
52
51
  property :nickname
53
52
 
@@ -121,7 +120,7 @@ module DiasporaFederation
121
120
  photo_small: ".entity_photo_small .photo[src]",
122
121
  key: ".key",
123
122
  searchable: ".searchable"
124
- }
123
+ }.freeze
125
124
 
126
125
  # Create the HTML string from the current HCard instance
127
126
  # @return [String] HTML string
@@ -209,13 +208,13 @@ module DiasporaFederation
209
208
  #
210
209
  # @param container [Nokogiri::XML::Element] parent element for added property HTML
211
210
  # @param name [Symbol] property name
212
- # @param block [Proc] block returning an element
213
- def add_property(container, name, &block)
211
+ # @yield [Nokogiri::HTML::Builder] html builder
212
+ def add_property(container, name)
214
213
  Nokogiri::HTML::Builder.with(container) do |html|
215
214
  html.dl(class: "entity_#{name}") {
216
215
  html.dt(name.to_s.capitalize)
217
216
  html.dd {
218
- block.call(html)
217
+ yield html
219
218
  }
220
219
  }
221
220
  end
@@ -26,7 +26,7 @@ module DiasporaFederation
26
26
  end
27
27
 
28
28
  # URL fragment to append to the base URL
29
- WEBFINGER_SUFFIX = "/webfinger?q={uri}"
29
+ WEBFINGER_SUFFIX = "/webfinger?q={uri}".freeze
30
30
 
31
31
  # Returns the WebFinger URL that was used to build this instance (either from
32
32
  # xml or by giving a base URL).
@@ -104,35 +104,35 @@ module DiasporaFederation
104
104
  property :public_key
105
105
 
106
106
  # +hcard_url+ link relation
107
- REL_HCARD = "http://microformats.org/profile/hcard"
107
+ REL_HCARD = "http://microformats.org/profile/hcard".freeze
108
108
 
109
109
  # +seed_url+ link relation
110
- REL_SEED = "http://joindiaspora.com/seed_location"
110
+ REL_SEED = "http://joindiaspora.com/seed_location".freeze
111
111
 
112
112
  # @deprecated This should be a +Property+ or moved to the +hCard+, but +Link+
113
113
  # is inappropriate according to the specification (will affect older
114
114
  # Diaspora* installations).
115
115
  # +guid+ link relation
116
- REL_GUID = "http://joindiaspora.com/guid"
116
+ REL_GUID = "http://joindiaspora.com/guid".freeze
117
117
 
118
118
  # +profile_url+ link relation.
119
119
  # @note This might just as well be an +Alias+ instead of a +Link+.
120
- REL_PROFILE = "http://webfinger.net/rel/profile-page"
120
+ REL_PROFILE = "http://webfinger.net/rel/profile-page".freeze
121
121
 
122
122
  # +atom_url+ link relation
123
- REL_ATOM = "http://schemas.google.com/g/2010#updates-from"
123
+ REL_ATOM = "http://schemas.google.com/g/2010#updates-from".freeze
124
124
 
125
125
  # +salmon_url+ link relation
126
- REL_SALMON = "salmon"
126
+ REL_SALMON = "salmon".freeze
127
127
 
128
128
  # +subscribe_url+ link relation
129
- REL_SUBSCRIBE = "http://ostatus.org/schema/1.0/subscribe"
129
+ REL_SUBSCRIBE = "http://ostatus.org/schema/1.0/subscribe".freeze
130
130
 
131
131
  # @deprecated This should be a +Property+ or moved to the +hcard+, but +Link+
132
132
  # is inappropriate according to the specification (will affect older
133
133
  # Diaspora* installations).
134
134
  # +pubkey+ link relation
135
- REL_PUBKEY = "diaspora-public-key"
135
+ REL_PUBKEY = "diaspora-public-key".freeze
136
136
 
137
137
  # Create the XML string from the current WebFinger instance
138
138
  # @return [String] XML string
@@ -29,13 +29,13 @@ module DiasporaFederation
29
29
  # @see http://docs.oasis-open.org/xri/xrd/v1.0/xrd-1.0.html Extensible Resource Descriptor (XRD) Version 1.0
30
30
  class XrdDocument
31
31
  # xml namespace url
32
- XMLNS = "http://docs.oasis-open.org/ns/xri/xrd-1.0"
32
+ XMLNS = "http://docs.oasis-open.org/ns/xri/xrd-1.0".freeze
33
33
 
34
34
  # +Link+ element attributes
35
- LINK_ATTRS = %i(rel type href template)
35
+ LINK_ATTRS = %i(rel type href template).freeze
36
36
 
37
37
  # format string for datetime (+Expires+ element)
38
- DATETIME_FORMAT = "%Y-%m-%dT%H:%M:%SZ"
38
+ DATETIME_FORMAT = "%Y-%m-%dT%H:%M:%SZ".freeze
39
39
 
40
40
  # The <Expires> element contains a time value which specifies the instant at
41
41
  # and after which the document has expired and SHOULD NOT be used.
@@ -67,7 +67,7 @@ module DiasporaFederation
67
67
  # Generates an XML document from the current instance and returns it as string
68
68
  # @return [String] XML document
69
69
  def to_xml
70
- builder = Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
70
+ Nokogiri::XML::Builder.new(encoding: "UTF-8") {|xml|
71
71
  xml.XRD("xmlns" => XMLNS) {
72
72
  xml.Expires(@expires.strftime(DATETIME_FORMAT)) if @expires.instance_of?(DateTime)
73
73
 
@@ -77,8 +77,7 @@ module DiasporaFederation
77
77
  add_properties_to(xml)
78
78
  add_links_to(xml)
79
79
  }
80
- end
81
- builder.to_xml
80
+ }.to_xml
82
81
  end
83
82
 
84
83
  # Parse the XRD document from the given string and create a hash containing
@@ -108,7 +107,7 @@ module DiasporaFederation
108
107
 
109
108
  private
110
109
 
111
- NS = {xrd: XMLNS}
110
+ NS = {xrd: XMLNS}.freeze
112
111
 
113
112
  def add_aliases_to(xml)
114
113
  @aliases.each do |a|
@@ -8,23 +8,34 @@ module DiasporaFederation
8
8
  end
9
9
  end
10
10
 
11
+ # abstract types
12
+ require "diaspora_federation/entities/post"
11
13
  require "diaspora_federation/entities/relayable"
14
+
15
+ # types
12
16
  require "diaspora_federation/entities/profile"
13
17
  require "diaspora_federation/entities/person"
14
- require "diaspora_federation/entities/location"
15
- require "diaspora_federation/entities/photo"
16
- require "diaspora_federation/entities/poll_answer"
17
- require "diaspora_federation/entities/poll"
18
- require "diaspora_federation/entities/status_message"
19
- require "diaspora_federation/entities/request"
18
+ require "diaspora_federation/entities/contact"
19
+ require "diaspora_federation/entities/account_deletion"
20
+
20
21
  require "diaspora_federation/entities/participation"
21
22
  require "diaspora_federation/entities/like"
22
23
  require "diaspora_federation/entities/comment"
23
- require "diaspora_federation/entities/account_deletion"
24
+ require "diaspora_federation/entities/poll_answer"
25
+ require "diaspora_federation/entities/poll"
26
+ require "diaspora_federation/entities/poll_participation"
27
+
28
+ require "diaspora_federation/entities/location"
29
+ require "diaspora_federation/entities/photo"
30
+ require "diaspora_federation/entities/status_message"
31
+ require "diaspora_federation/entities/reshare"
32
+
24
33
  require "diaspora_federation/entities/message"
25
34
  require "diaspora_federation/entities/conversation"
26
- require "diaspora_federation/entities/relayable_retraction"
27
- require "diaspora_federation/entities/reshare"
35
+
28
36
  require "diaspora_federation/entities/retraction"
37
+
38
+ # deprecated
39
+ require "diaspora_federation/entities/request"
29
40
  require "diaspora_federation/entities/signed_retraction"
30
- require "diaspora_federation/entities/poll_participation"
41
+ require "diaspora_federation/entities/relayable_retraction"
@@ -4,11 +4,15 @@ module DiasporaFederation
4
4
  #
5
5
  # @see Validators::AccountDeletionValidator
6
6
  class AccountDeletion < Entity
7
- # @!attribute [r] diaspora_id
7
+ # @!attribute [r] author
8
8
  # The diaspora ID of the deleted account
9
- # @see Person#diaspora_id
9
+ # @see Person#author
10
+ # @return [String] diaspora ID
11
+ # @!attribute [r] diaspora_id
12
+ # Alias for author
13
+ # @see AccountDeletion#author
10
14
  # @return [String] diaspora ID
11
- property :diaspora_id, xml_name: :diaspora_handle
15
+ property :author, alias: :diaspora_id, xml_name: :diaspora_handle
12
16
  end
13
17
  end
14
18
  end
@@ -4,11 +4,9 @@ module DiasporaFederation
4
4
  #
5
5
  # @see Validators::CommentValidator
6
6
  class Comment < Entity
7
- # @!attribute [r] guid
8
- # a random string of at least 16 chars.
9
- # @see Validation::Rule::Guid
10
- # @return [String] comment guid
11
- property :guid
7
+ # old signature order
8
+ # @deprecated
9
+ LEGACY_SIGNATURE_ORDER = %i(guid parent_guid text author).freeze
12
10
 
13
11
  include Relayable
14
12
 
@@ -16,11 +14,16 @@ module DiasporaFederation
16
14
  # @return [String] the comment text
17
15
  property :text
18
16
 
19
- # @!attribute [r] diaspora_id
20
- # The diaspora ID of the author.
21
- # @see Person#diaspora_id
22
- # @return [String] diaspora ID
23
- property :diaspora_id, xml_name: :diaspora_handle
17
+ # @!attribute [r] created_at
18
+ # comment entity creation time
19
+ # @return [Time] creation time
20
+ property :created_at, default: -> { Time.now.utc }
21
+
22
+ # The {Comment} parent is a Post
23
+ # @return [String] parent type
24
+ def parent_type
25
+ "Post"
26
+ end
24
27
  end
25
28
  end
26
29
  end