diaspora_federation 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +28 -0
  3. data/README.md +2 -1
  4. data/lib/diaspora_federation.rb +14 -14
  5. data/lib/diaspora_federation/callbacks.rb +4 -4
  6. data/lib/diaspora_federation/discovery.rb +1 -1
  7. data/lib/diaspora_federation/discovery/discovery.rb +8 -8
  8. data/lib/diaspora_federation/discovery/h_card.rb +11 -12
  9. data/lib/diaspora_federation/discovery/host_meta.rb +2 -2
  10. data/lib/diaspora_federation/discovery/web_finger.rb +10 -13
  11. data/lib/diaspora_federation/discovery/xrd_document.rb +1 -1
  12. data/lib/diaspora_federation/entities.rb +2 -2
  13. data/lib/diaspora_federation/entities/account_deletion.rb +4 -4
  14. data/lib/diaspora_federation/entities/comment.rb +3 -3
  15. data/lib/diaspora_federation/entities/contact.rb +4 -4
  16. data/lib/diaspora_federation/entities/conversation.rb +13 -13
  17. data/lib/diaspora_federation/entities/like.rb +5 -5
  18. data/lib/diaspora_federation/entities/location.rb +1 -1
  19. data/lib/diaspora_federation/entities/message.rb +5 -5
  20. data/lib/diaspora_federation/entities/participation.rb +6 -6
  21. data/lib/diaspora_federation/entities/person.rb +6 -6
  22. data/lib/diaspora_federation/entities/photo.rb +10 -10
  23. data/lib/diaspora_federation/entities/poll.rb +3 -3
  24. data/lib/diaspora_federation/entities/poll_answer.rb +2 -2
  25. data/lib/diaspora_federation/entities/poll_participation.rb +3 -3
  26. data/lib/diaspora_federation/entities/post.rb +7 -7
  27. data/lib/diaspora_federation/entities/profile.rb +6 -6
  28. data/lib/diaspora_federation/entities/related_entity.rb +4 -4
  29. data/lib/diaspora_federation/entities/relayable.rb +32 -24
  30. data/lib/diaspora_federation/entities/relayable_retraction.rb +17 -17
  31. data/lib/diaspora_federation/entities/request.rb +5 -5
  32. data/lib/diaspora_federation/entities/reshare.rb +7 -7
  33. data/lib/diaspora_federation/entities/retraction.rb +6 -6
  34. data/lib/diaspora_federation/entities/signed_retraction.rb +8 -8
  35. data/lib/diaspora_federation/entities/status_message.rb +8 -8
  36. data/lib/diaspora_federation/entity.rb +7 -7
  37. data/lib/diaspora_federation/federation/fetcher.rb +3 -3
  38. data/lib/diaspora_federation/federation/receiver.rb +3 -3
  39. data/lib/diaspora_federation/federation/receiver/abstract_receiver.rb +3 -3
  40. data/lib/diaspora_federation/federation/receiver/private.rb +1 -1
  41. data/lib/diaspora_federation/federation/receiver/public.rb +1 -1
  42. data/lib/diaspora_federation/federation/sender/hydra_wrapper.rb +7 -6
  43. data/lib/diaspora_federation/http_client.rb +2 -2
  44. data/lib/diaspora_federation/logging.rb +7 -7
  45. data/lib/diaspora_federation/properties_dsl.rb +3 -3
  46. data/lib/diaspora_federation/salmon.rb +1 -1
  47. data/lib/diaspora_federation/salmon/aes.rb +4 -4
  48. data/lib/diaspora_federation/salmon/encrypted_slap.rb +9 -9
  49. data/lib/diaspora_federation/salmon/magic_envelope.rb +16 -16
  50. data/lib/diaspora_federation/salmon/slap.rb +2 -2
  51. data/lib/diaspora_federation/validators.rb +1 -1
  52. data/lib/diaspora_federation/validators/account_deletion_validator.rb +1 -1
  53. data/lib/diaspora_federation/validators/comment_validator.rb +1 -1
  54. data/lib/diaspora_federation/validators/contact_validator.rb +1 -1
  55. data/lib/diaspora_federation/validators/conversation_validator.rb +4 -4
  56. data/lib/diaspora_federation/validators/h_card_validator.rb +2 -2
  57. data/lib/diaspora_federation/validators/like_validator.rb +1 -1
  58. data/lib/diaspora_federation/validators/location_validator.rb +1 -1
  59. data/lib/diaspora_federation/validators/message_validator.rb +4 -1
  60. data/lib/diaspora_federation/validators/participation_validator.rb +1 -1
  61. data/lib/diaspora_federation/validators/person_validator.rb +1 -1
  62. data/lib/diaspora_federation/validators/photo_validator.rb +3 -1
  63. data/lib/diaspora_federation/validators/poll_answer_validator.rb +1 -1
  64. data/lib/diaspora_federation/validators/poll_participation_validator.rb +1 -1
  65. data/lib/diaspora_federation/validators/poll_validator.rb +1 -1
  66. data/lib/diaspora_federation/validators/profile_validator.rb +3 -3
  67. data/lib/diaspora_federation/validators/related_entity_validator.rb +1 -1
  68. data/lib/diaspora_federation/validators/relayable_retraction_validator.rb +2 -2
  69. data/lib/diaspora_federation/validators/relayable_validator.rb +2 -2
  70. data/lib/diaspora_federation/validators/request_validator.rb +2 -2
  71. data/lib/diaspora_federation/validators/reshare_validator.rb +1 -1
  72. data/lib/diaspora_federation/validators/retraction_validator.rb +1 -1
  73. data/lib/diaspora_federation/validators/rules/birthday.rb +2 -2
  74. data/lib/diaspora_federation/validators/rules/boolean.rb +1 -1
  75. data/lib/diaspora_federation/validators/rules/diaspora_id.rb +5 -5
  76. data/lib/diaspora_federation/validators/rules/diaspora_id_count.rb +3 -3
  77. data/lib/diaspora_federation/validators/rules/guid.rb +4 -4
  78. data/lib/diaspora_federation/validators/rules/not_nil.rb +1 -1
  79. data/lib/diaspora_federation/validators/rules/public_key.rb +1 -1
  80. data/lib/diaspora_federation/validators/rules/tag_count.rb +2 -2
  81. data/lib/diaspora_federation/validators/signed_retraction_validator.rb +2 -2
  82. data/lib/diaspora_federation/validators/status_message_validator.rb +3 -1
  83. data/lib/diaspora_federation/validators/web_finger_validator.rb +3 -3
  84. data/lib/diaspora_federation/version.rb +1 -1
  85. metadata +3 -2
@@ -1,6 +1,6 @@
1
1
  module DiasporaFederation
2
2
  # +Entity+ is the base class for all other objects used to encapsulate data
3
- # for federation messages in the Diaspora* network.
3
+ # for federation messages in the diaspora* network.
4
4
  # Entity fields are specified using a simple {PropertiesDSL DSL} as part of
5
5
  # the class definition.
6
6
  #
@@ -231,7 +231,7 @@ module DiasporaFederation
231
231
  end
232
232
  end
233
233
 
234
- # create simple node, fill it with text and append to root
234
+ # Create simple node, fill it with text and append to root
235
235
  def simple_node(doc, name, value)
236
236
  xml_name = self.class.xml_names[name]
237
237
  Nokogiri::XML::Element.new(xml_name ? xml_name.to_s : name, doc).tap do |node|
@@ -268,7 +268,7 @@ module DiasporaFederation
268
268
  end
269
269
  end
270
270
 
271
- # create simple entry in data hash
271
+ # Create simple entry in data hash
272
272
  #
273
273
  # @param [String] name xml tag to parse
274
274
  # @param [Nokogiri::XML::Element] root_node XML root_node to parse
@@ -279,24 +279,24 @@ module DiasporaFederation
279
279
  node.first.text if node.any?
280
280
  end
281
281
 
282
- # create an entry in the data hash for the nested entity
282
+ # Create an entry in the data hash for the nested entity
283
283
  #
284
284
  # @param [Class] type target type to parse
285
285
  # @param [Nokogiri::XML::Element] root_node XML node to parse
286
286
  # @return [Entity] parsed child entity
287
287
  private_class_method def self.parse_entity_from_node(type, root_node)
288
288
  node = root_node.xpath(type.entity_name)
289
- type.from_xml(node.first) if node.any?
289
+ type.from_xml(node.first) if node.any? && node.first.children.any?
290
290
  end
291
291
 
292
- # collect all nested children of that type and create an array in the data hash
292
+ # Collect all nested children of that type and create an array in the data hash
293
293
  #
294
294
  # @param [Class] type target type to parse
295
295
  # @param [Nokogiri::XML::Element] root_node XML node to parse
296
296
  # @return [Array<Entity>] array with parsed child entities
297
297
  private_class_method def self.parse_array_from_node(type, root_node)
298
298
  node = root_node.xpath(type.entity_name)
299
- node.map {|child| type.from_xml(child) } unless node.empty?
299
+ node.select {|child| child.children.any? }.map {|child| type.from_xml(child) } unless node.empty?
300
300
  end
301
301
 
302
302
  # Raised, if entity is not valid
@@ -1,9 +1,9 @@
1
1
  module DiasporaFederation
2
2
  module Federation
3
- # this module is for fetching entities from other pods
3
+ # This module is for fetching entities from other pods.
4
4
  module Fetcher
5
- # fetches a public entity from a remote pod
6
- # @param [String] author the diaspora ID of the author of the entity
5
+ # Fetches a public entity from a remote pod
6
+ # @param [String] author the diaspora* ID of the author of the entity
7
7
  # @param [Symbol, String] entity_type snake_case version of the entity class
8
8
  # @param [String] guid guid of the entity to fetch
9
9
  def self.fetch_public(author, entity_type, guid)
@@ -1,10 +1,10 @@
1
1
  module DiasporaFederation
2
2
  module Federation
3
- # this module is for parse and receive entities.
3
+ # This module parses and receives entities.
4
4
  module Receiver
5
5
  extend Logging
6
6
 
7
- # receive a public message
7
+ # Receive a public message
8
8
  # @param [String] data message to receive
9
9
  # @param [Boolean] legacy use old slap parser
10
10
  def self.receive_public(data, legacy=false)
@@ -21,7 +21,7 @@ module DiasporaFederation
21
21
  raise e
22
22
  end
23
23
 
24
- # receive a private message
24
+ # Receive a private message
25
25
  # @param [String] data message to receive
26
26
  # @param [OpenSSL::PKey::RSA] recipient_private_key recipient private key to decrypt the message
27
27
  # @param [Object] recipient_id the identifier to persist the entity for the correct user,
@@ -1,11 +1,11 @@
1
1
  module DiasporaFederation
2
2
  module Federation
3
3
  module Receiver
4
- # common functionality for receivers
4
+ # Common functionality for receivers
5
5
  class AbstractReceiver
6
6
  include Logging
7
7
 
8
- # create a new receiver
8
+ # Creates a new receiver
9
9
  # @param [MagicEnvelope] magic_envelope the received magic envelope
10
10
  # @param [Object] recipient_id the identifier of the recipient of a private message
11
11
  def initialize(magic_envelope, recipient_id=nil)
@@ -14,7 +14,7 @@ module DiasporaFederation
14
14
  @recipient_id = recipient_id
15
15
  end
16
16
 
17
- # validate and receive the entity
17
+ # Validates and receives the entity
18
18
  def receive
19
19
  validate_and_receive
20
20
  rescue => e
@@ -1,7 +1,7 @@
1
1
  module DiasporaFederation
2
2
  module Federation
3
3
  module Receiver
4
- # receiver for private entities
4
+ # Receiver for private entities
5
5
  class Private < AbstractReceiver
6
6
  private
7
7
 
@@ -1,7 +1,7 @@
1
1
  module DiasporaFederation
2
2
  module Federation
3
3
  module Receiver
4
- # receiver for public entities
4
+ # Receiver for public entities
5
5
  class Public < AbstractReceiver
6
6
  private
7
7
 
@@ -11,12 +11,13 @@ module DiasporaFederation
11
11
  # @return [Hash] hydra opts
12
12
  def self.hydra_opts
13
13
  @hydra_opts ||= {
14
- maxredirs: DiasporaFederation.http_redirect_limit,
15
- timeout: DiasporaFederation.http_timeout,
16
- method: :post,
17
- verbose: DiasporaFederation.http_verbose,
18
- cainfo: DiasporaFederation.certificate_authorities,
19
- headers: {
14
+ maxredirs: DiasporaFederation.http_redirect_limit,
15
+ timeout: DiasporaFederation.http_timeout,
16
+ method: :post,
17
+ verbose: DiasporaFederation.http_verbose,
18
+ cainfo: DiasporaFederation.certificate_authorities,
19
+ forbid_reuse: true,
20
+ headers: {
20
21
  "Expect" => "",
21
22
  "Transfer-Encoding" => "",
22
23
  "User-Agent" => DiasporaFederation.http_user_agent
@@ -2,7 +2,7 @@ require "faraday"
2
2
  require "faraday_middleware/response/follow_redirects"
3
3
 
4
4
  module DiasporaFederation
5
- # A wrapper for {https://github.com/lostisland/faraday Faraday}.
5
+ # A wrapper for {https://github.com/lostisland/faraday Faraday}
6
6
  #
7
7
  # @see Discovery::Discovery
8
8
  # @see Federation::Fetcher
@@ -15,7 +15,7 @@ module DiasporaFederation
15
15
  connection.get(uri)
16
16
  end
17
17
 
18
- # gets the Faraday connection
18
+ # Gets the Faraday connection
19
19
  #
20
20
  # @return [Faraday::Connection] the response
21
21
  def self.connection
@@ -1,9 +1,9 @@
1
1
  module DiasporaFederation
2
- # logging module for the diaspora federation
2
+ # Logging module for the diaspora* federation
3
3
  #
4
- # it uses the logging-gem if available
4
+ # It uses the logging-gem if available.
5
5
  module Logging
6
- # add +logger+ also as class method when included
6
+ # Add +logger+ also as class method when included
7
7
  # @param [Class] klass the class into which the module is included
8
8
  def self.included(klass)
9
9
  klass.extend(self)
@@ -11,15 +11,15 @@ module DiasporaFederation
11
11
 
12
12
  private
13
13
 
14
- # get the logger for this class
14
+ # Get the logger for this class
15
15
  #
16
- # use the logging-gem if available, else use a default logger
16
+ # Use the logging-gem if available, else use a default logger.
17
17
  def logger
18
18
  @logger ||= begin
19
- # use logging-gem if available
19
+ # Use logging-gem if available
20
20
  return ::Logging::Logger[self] if defined?(::Logging::Logger)
21
21
 
22
- # use rails logger if running in rails and no logging-gem is available
22
+ # Use rails logger if running in rails and no logging-gem is available
23
23
  return ::Rails.logger if defined?(::Rails)
24
24
 
25
25
  # fallback logger
@@ -75,7 +75,7 @@ module DiasporaFederation
75
75
  @xml_names ||= {}
76
76
  end
77
77
 
78
- # finds a property by +xml_name+ or +name+
78
+ # Finds a property by +xml_name+ or +name+
79
79
  # @param [String] xml_name name of the property from the received xml
80
80
  # @return [Hash] the property data
81
81
  def find_property_for_xml_name(xml_name)
@@ -114,14 +114,14 @@ module DiasporaFederation
114
114
  define_alias(name, opts[:alias]) if opts.has_key? :alias
115
115
  end
116
116
 
117
- # checks if the name is a +Symbol+ or a +String+
117
+ # Checks if the name is a +Symbol+ or a +String+
118
118
  # @param [String, Symbol] name the name to check
119
119
  # @return [Boolean]
120
120
  def name_valid?(name)
121
121
  name.instance_of?(Symbol)
122
122
  end
123
123
 
124
- # checks if the type extends {Entity}
124
+ # Checks if the type extends {Entity}
125
125
  # @param [Class] type the type to check
126
126
  # @return [Boolean]
127
127
  def type_valid?(type)
@@ -1,5 +1,5 @@
1
1
  module DiasporaFederation
2
- # This module contains a Diaspora*-specific implementation of parts of the
2
+ # This module contains a diaspora*-specific implementation of parts of the
3
3
  # {http://www.salmon-protocol.org/ Salmon Protocol}.
4
4
  module Salmon
5
5
  # XML namespace url
@@ -1,18 +1,18 @@
1
1
  module DiasporaFederation
2
2
  module Salmon
3
- # class for AES encryption and decryption
3
+ # Class for AES encryption and decryption
4
4
  class AES
5
5
  # OpenSSL aes cipher definition
6
6
  CIPHER = "AES-256-CBC".freeze
7
7
 
8
- # generates a random AES key and initialization vector
8
+ # Generates a random AES key and initialization vector
9
9
  # @return [Hash] { key: "...", iv: "..." }
10
10
  def self.generate_key_and_iv
11
11
  cipher = OpenSSL::Cipher.new(CIPHER)
12
12
  {key: cipher.random_key, iv: cipher.random_iv}
13
13
  end
14
14
 
15
- # encrypts the given data with an AES cipher defined by the given key
15
+ # Encrypts the given data with an AES cipher defined by the given key
16
16
  # and iv and returns the resulting ciphertext base64 strict_encoded.
17
17
  # @param [String] data plain input
18
18
  # @param [String] key AES key
@@ -34,7 +34,7 @@ module DiasporaFederation
34
34
  Base64.strict_encode64(ciphertext)
35
35
  end
36
36
 
37
- # decrypts the given ciphertext with an AES cipher defined by the given key
37
+ # Decrypts the given ciphertext with an AES cipher defined by the given key
38
38
  # and iv. +ciphertext+ is expected to be base64 encoded
39
39
  # @param [String] ciphertext input data
40
40
  # @param [String] key AES key
@@ -3,14 +3,14 @@ require "json"
3
3
  module DiasporaFederation
4
4
  module Salmon
5
5
  # +EncryptedSlap+ provides class methods for generating and parsing encrypted
6
- # Slaps. (In principle the same as {Slap}, but with encryption.)
6
+ # Slaps. (In principle the same as {Slap}, but with encryption.)
7
7
  #
8
8
  # The basic encryption mechanism used here is based on the knowledge that
9
9
  # asymmetrical encryption is slow and symmetrical encryption is fast. Keeping in
10
10
  # mind that a message we want to de-/encrypt may greatly vary in length,
11
11
  # performance considerations must play a part of this scheme.
12
12
  #
13
- # A Diaspora*-flavored encrypted magic-enveloped XML message looks like the following:
13
+ # A diaspora*-flavored encrypted magic-enveloped XML message looks like the following:
14
14
  #
15
15
  # <?xml version="1.0" encoding="UTF-8"?>
16
16
  # <diaspora xmlns="https://joindiaspora.com/protocol" xmlns:me="http://salmon-protocol.org/ns/magic-env">
@@ -63,7 +63,7 @@ module DiasporaFederation
63
63
  # @deprecated
64
64
  class EncryptedSlap < Slap
65
65
  # the author of the slap
66
- # @param [String] value the author diaspora id
66
+ # @param [String] value the author diaspora* ID
67
67
  attr_writer :author_id
68
68
 
69
69
  # the key and iv if it is an encrypted slap
@@ -100,7 +100,7 @@ module DiasporaFederation
100
100
 
101
101
  # Creates an encrypted Salmon Slap.
102
102
  #
103
- # @param [String] author_id Diaspora* handle of the author
103
+ # @param [String] author_id diaspora* ID of the author
104
104
  # @param [OpenSSL::PKey::RSA] privkey sender private key for signing the magic envelope
105
105
  # @param [Entity] entity payload
106
106
  # @return [EncryptedSlap] encrypted Slap instance
@@ -136,7 +136,7 @@ module DiasporaFederation
136
136
 
137
137
  private
138
138
 
139
- # decrypts and reads the data from the encrypted XML header
139
+ # Decrypts and reads the data from the encrypted XML header
140
140
  # @param [String] data base64 encoded, encrypted header data
141
141
  # @param [OpenSSL::PKey::RSA] privkey private key for decryption
142
142
  # @return [Hash] { iv: "...", aes_key: "...", author_id: "..." }
@@ -151,7 +151,7 @@ module DiasporaFederation
151
151
  {iv: iv, aes_key: key, author_id: author_id}
152
152
  end
153
153
 
154
- # decrypts the xml header
154
+ # Decrypts the xml header
155
155
  # @param [String] data base64 encoded, encrypted header data
156
156
  # @param [OpenSSL::PKey::RSA] privkey private key for decryption
157
157
  # @return [Nokogiri::XML::Element] header xml document
@@ -163,8 +163,8 @@ module DiasporaFederation
163
163
  Nokogiri::XML::Document.parse(xml).root
164
164
  end
165
165
 
166
- # encrypt the header xml with an AES cipher and encrypt the cipher params
167
- # with the recipients public_key
166
+ # Encrypt the header xml with an AES cipher and encrypt the cipher params
167
+ # with the recipients public_key.
168
168
  # @param [String] author_id diaspora_handle
169
169
  # @param [Hash] envelope_key envelope cipher params
170
170
  # @param [OpenSSL::PKey::RSA] pubkey recipient public_key
@@ -182,7 +182,7 @@ module DiasporaFederation
182
182
  Base64.strict_encode64(json_header)
183
183
  end
184
184
 
185
- # generate the header xml string, including the author, aes_key and iv
185
+ # Generate the header xml string, including the author, aes_key and iv
186
186
  # @param [String] author_id diaspora_handle of the author
187
187
  # @param [Hash] envelope_key { key: "...", iv: "..." } (values in base64)
188
188
  # @return [String] header XML string
@@ -1,6 +1,6 @@
1
1
  module DiasporaFederation
2
2
  module Salmon
3
- # Represents a Magic Envelope for Diaspora* federation messages.
3
+ # Represents a Magic Envelope for diaspora* federation messages
4
4
  #
5
5
  # When generating a Magic Envelope, an instance of this class is created and
6
6
  # the contents are specified on initialization. Optionally, the payload can be
@@ -23,26 +23,26 @@ module DiasporaFederation
23
23
  class MagicEnvelope
24
24
  include Logging
25
25
 
26
- # encoding used for the payload data
26
+ # Encoding used for the payload data
27
27
  ENCODING = "base64url".freeze
28
28
 
29
- # algorithm used for signing the payload data
29
+ # Algorithm used for signing the payload data
30
30
  ALGORITHM = "RSA-SHA256".freeze
31
31
 
32
- # mime type describing the payload data
32
+ # Mime type describing the payload data
33
33
  DATA_TYPE = "application/xml".freeze
34
34
 
35
- # digest instance used for signing
35
+ # Digest instance used for signing
36
36
  DIGEST = OpenSSL::Digest::SHA256.new
37
37
 
38
38
  # XML namespace url
39
39
  XMLNS = "http://salmon-protocol.org/ns/magic-env".freeze
40
40
 
41
- # the payload entity of the magic envelope
41
+ # The payload entity of the magic envelope
42
42
  # @return [Entity] payload entity
43
43
  attr_reader :payload
44
44
 
45
- # the sender of the magic envelope
45
+ # The sender of the magic envelope
46
46
  # @return [String] diaspora-ID of the sender
47
47
  attr_reader :sender
48
48
 
@@ -101,7 +101,7 @@ module DiasporaFederation
101
101
  # @see AES#decrypt
102
102
  #
103
103
  # @param [Nokogiri::XML::Element] magic_env XML root node of a magic envelope
104
- # @param [String] sender diaspora-ID of the sender or nil
104
+ # @param [String] sender diaspora* ID of the sender or nil
105
105
  # @param [Hash] cipher_params hash containing the key and iv for
106
106
  # AES-decrypting previously encrypted data. E.g.: { iv: "...", key: "..." }
107
107
  #
@@ -132,7 +132,7 @@ module DiasporaFederation
132
132
 
133
133
  private
134
134
 
135
- # the payload data as string
135
+ # The payload data as string
136
136
  # @return [String] payload data
137
137
  def payload_data
138
138
  @payload_data ||= XmlPayload.pack(@payload).to_xml.strip.tap do |data|
@@ -155,7 +155,7 @@ module DiasporaFederation
155
155
  }.doc.root
156
156
  end
157
157
 
158
- # create the signature for all fields according to specification
158
+ # Creates the signature for all fields according to specification
159
159
  #
160
160
  # @param [OpenSSL::PKey::RSA] privkey private key used for signing
161
161
  # @return [String] the signature
@@ -173,7 +173,7 @@ module DiasporaFederation
173
173
  end
174
174
 
175
175
  # @param [Nokogiri::XML::Element] env magic envelope XML
176
- # @param [String] sender diaspora-ID of the sender or nil
176
+ # @param [String] sender diaspora* ID of the sender or nil
177
177
  # @return [Boolean]
178
178
  private_class_method def self.signature_valid?(env, sender)
179
179
  subject = sig_subject([Base64.urlsafe_decode64(env.at_xpath("me:data").content),
@@ -188,18 +188,18 @@ module DiasporaFederation
188
188
  sender_key.verify(DIGEST, sig, subject)
189
189
  end
190
190
 
191
- # reads the +key_id+ from the magic envelope
191
+ # Reads the +key_id+ from the magic envelope.
192
192
  # @param [Nokogiri::XML::Element] env magic envelope XML
193
- # @return [String] diaspora-ID of the sender
193
+ # @return [String] diaspora* ID of the sender
194
194
  private_class_method def self.sender(env)
195
195
  key_id = env.at_xpath("me:sig")["key_id"]
196
196
  raise InvalidEnvelope, "no key_id" unless key_id # TODO: move to `envelope_valid?`
197
197
  Base64.urlsafe_decode64(key_id)
198
198
  end
199
199
 
200
- # constructs the signature subject.
201
- # the given array should consist of the data, data_type (mimetype), encoding
202
- # and the algorithm
200
+ # Constructs the signature subject.
201
+ # The given array should consist of the data, data_type (mimetype), encoding
202
+ # and the algorithm.
203
203
  # @param [Array<String>] data_arr
204
204
  # @return [String] signature subject
205
205
  private_class_method def self.sig_subject(data_arr)
@@ -3,7 +3,7 @@ module DiasporaFederation
3
3
  # +Slap+ provides class methods to create unencrypted Slap XML from payload
4
4
  # data and parse incoming XML into a Slap instance.
5
5
  #
6
- # A Diaspora*-flavored magic-enveloped XML message looks like the following:
6
+ # A diaspora* flavored magic-enveloped XML message looks like the following:
7
7
  #
8
8
  # <?xml version="1.0" encoding="UTF-8"?>
9
9
  # <diaspora xmlns="https://joindiaspora.com/protocol" xmlns:me="http://salmon-protocol.org/ns/magic-env">
@@ -51,7 +51,7 @@ module DiasporaFederation
51
51
 
52
52
  # Creates an unencrypted Salmon Slap and returns the XML string.
53
53
  #
54
- # @param [String] author_id Diaspora* handle of the author
54
+ # @param [String] author_id diaspora* ID of the author
55
55
  # @param [OpenSSL::PKey::RSA] privkey sender private_key for signing the magic envelope
56
56
  # @param [Entity] entity payload
57
57
  # @return [String] Salmon XML string