diaspora_federation 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -4
  3. data/lib/diaspora_federation.rb +23 -4
  4. data/lib/diaspora_federation/discovery.rb +14 -0
  5. data/lib/diaspora_federation/discovery/discovery.rb +94 -0
  6. data/lib/diaspora_federation/{web_finger → discovery}/exceptions.rb +5 -1
  7. data/lib/diaspora_federation/{web_finger → discovery}/h_card.rb +29 -25
  8. data/lib/diaspora_federation/{web_finger → discovery}/host_meta.rb +13 -13
  9. data/lib/diaspora_federation/{web_finger → discovery}/web_finger.rb +24 -28
  10. data/lib/diaspora_federation/{web_finger → discovery}/xrd_document.rb +10 -11
  11. data/lib/diaspora_federation/entities.rb +12 -0
  12. data/lib/diaspora_federation/entities/person.rb +33 -0
  13. data/lib/diaspora_federation/entities/profile.rb +54 -0
  14. data/lib/diaspora_federation/entity.rb +62 -30
  15. data/lib/diaspora_federation/fetcher.rb +42 -0
  16. data/lib/diaspora_federation/logging.rb +4 -2
  17. data/lib/diaspora_federation/properties_dsl.rb +11 -2
  18. data/lib/diaspora_federation/validators.rb +38 -0
  19. data/lib/diaspora_federation/validators/h_card_validator.rb +30 -0
  20. data/lib/diaspora_federation/validators/person_validator.rb +18 -0
  21. data/lib/diaspora_federation/validators/profile_validator.rb +33 -0
  22. data/lib/diaspora_federation/validators/rules/birthday.rb +38 -0
  23. data/lib/diaspora_federation/validators/rules/boolean.rb +38 -0
  24. data/lib/diaspora_federation/validators/rules/diaspora_id.rb +46 -0
  25. data/lib/diaspora_federation/validators/rules/guid.rb +28 -0
  26. data/lib/diaspora_federation/validators/rules/nilable_uri.rb +19 -0
  27. data/lib/diaspora_federation/validators/rules/not_nil.rb +23 -0
  28. data/lib/diaspora_federation/validators/rules/public_key.rb +33 -0
  29. data/lib/diaspora_federation/validators/rules/tag_count.rb +34 -0
  30. data/lib/diaspora_federation/validators/web_finger_validator.rb +20 -0
  31. data/lib/diaspora_federation/version.rb +1 -1
  32. metadata +82 -8
  33. data/lib/diaspora_federation/web_finger.rb +0 -13
@@ -0,0 +1,18 @@
1
+ module DiasporaFederation
2
+ module Validators
3
+ # This validates a {Entities::Person}
4
+ class PersonValidator < Validation::Validator
5
+ include Validation
6
+
7
+ rule :guid, :guid
8
+
9
+ rule :diaspora_id, %i(not_empty diaspora_id)
10
+
11
+ rule :url, %i(not_nil nilableURI)
12
+
13
+ rule :profile, :not_nil
14
+
15
+ rule :exported_key, :public_key
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,33 @@
1
+ module DiasporaFederation
2
+ module Validators
3
+ # This validates a {Entities::Profile}
4
+ class ProfileValidator < Validation::Validator
5
+ include Validation
6
+
7
+ rule :diaspora_id, :diaspora_id
8
+
9
+ # the name must not contain a semicolon because of mentions
10
+ # @{<full_name> ; <diaspora_id>}
11
+ rule :first_name, regular_expression: {regex: /\A[^;]{,32}\z/}
12
+ rule :last_name, regular_expression: {regex: /\A[^;]{,32}\z/}
13
+
14
+ # this urls can be relative
15
+ rule :image_url, nilableURI: [:path]
16
+ rule :image_url_medium, nilableURI: [:path]
17
+ rule :image_url_small, nilableURI: [:path]
18
+
19
+ rule :birthday, :birthday
20
+
21
+ # TODO: replace regex with "length: {maximum: xxx}" but this rule doesn't allow nil now.
22
+ rule :gender, regular_expression: {regex: /\A.{,255}\z/}
23
+ rule :bio, regular_expression: {regex: /\A.{,65535}\z/}
24
+ rule :location, regular_expression: {regex: /\A.{,255}\z/}
25
+
26
+ rule :searchable, :boolean
27
+
28
+ rule :nsfw, :boolean
29
+
30
+ rule :tag_string, tag_count: {maximum: 5}
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,38 @@
1
+ require "date"
2
+
3
+ module Validation
4
+ module Rule
5
+ # Birthday validation rule
6
+ #
7
+ # Valid is:
8
+ # * nil or an empty +String+
9
+ # * a +Date+ object
10
+ # * a +String+ with the format "yyyy-mm-dd" and is a valid +Date+, example: 2015-07-25
11
+ class Birthday
12
+ # The error key for this rule
13
+ # @return [Symbol] error key
14
+ def error_key
15
+ :birthday
16
+ end
17
+
18
+ # Determines if value is a valid birthday date
19
+ def valid_value?(value)
20
+ return true if value.nil? || (value.is_a?(String) && value.empty?)
21
+ return true if value.is_a? Date
22
+
23
+ if value =~ /[0-9]{4}\-[0-9]{2}\-[0-9]{2}/
24
+ date_field = value.split("-").map(&:to_i)
25
+ return Date.valid_civil?(date_field[0], date_field[1], date_field[2])
26
+ end
27
+
28
+ false
29
+ end
30
+
31
+ # This rule has no params
32
+ # @return [Hash] params
33
+ def params
34
+ {}
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,38 @@
1
+ module Validation
2
+ module Rule
3
+ # Boolean validation rule
4
+ #
5
+ # Valid is:
6
+ # * a +String+: "true", "false", "t", "f", "yes", "no", "y", "n", "1", "0"
7
+ # * a +Fixnum+: 1 or 0
8
+ # * a +Boolean+: true or false
9
+ class Boolean
10
+ # The error key for this rule
11
+ # @return [Symbol] error key
12
+ def error_key
13
+ :boolean
14
+ end
15
+
16
+ # Determines if value is a valid +boolean+
17
+ def valid_value?(value)
18
+ return false if value.nil?
19
+
20
+ if value.is_a?(String)
21
+ true if value =~ /\A(true|false|t|f|yes|no|y|n|1|0)\z/i
22
+ elsif value.is_a?(Fixnum)
23
+ true if value == 1 || value == 0
24
+ elsif [true, false].include? value
25
+ true
26
+ else
27
+ false
28
+ end
29
+ end
30
+
31
+ # This rule has no params
32
+ # @return [Hash] params
33
+ def params
34
+ {}
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,46 @@
1
+ module Validation
2
+ module Rule
3
+ # Diaspora ID validation rule
4
+ #
5
+ # This rule is based on https://github.com/zombor/Validator/blob/master/lib/validation/rule/email.rb
6
+ # which was adapted from https://github.com/emmanuel/aequitas/blob/master/lib/aequitas/rule/format/email_address.rb
7
+ class DiasporaId
8
+ # The Regex for a valid diaspora ID
9
+ DIASPORA_ID = begin
10
+ letter = "a-zA-Z"
11
+ digit = "0-9"
12
+ username = "[#{letter}#{digit}\\-\\_\\.]+"
13
+ atext = "[#{letter}#{digit}+\\=\\-\\_]"
14
+ dot_atom = "#{atext}+([.]#{atext}*)*"
15
+ no_ws_ctl = '\x01-\x08\x11\x12\x14-\x1f\x7f'
16
+ text = '[\x01-\x09\x11\x12\x14-\x7f]'
17
+ quoted_pair = "(\\x5c#{text})"
18
+ dtext = "[#{no_ws_ctl}\\x21-\\x5a\\x5e-\\x7e]"
19
+ dcontent = "(?:#{dtext}|#{quoted_pair})"
20
+ domain_literal = "\\[#{dcontent}+\\]"
21
+ domain = "(?:#{dot_atom}|#{domain_literal})"
22
+ port = "(:[#{digit}]+)?"
23
+ addr_spec = "(#{username}\\@#{domain}#{port})?"
24
+
25
+ /\A#{addr_spec}\z/u
26
+ end
27
+
28
+ # The error key for this rule
29
+ # @return [Symbol] error key
30
+ def error_key
31
+ :diaspora_id
32
+ end
33
+
34
+ # Determines if value is a valid diaspora ID
35
+ def valid_value?(value)
36
+ value.nil? || !DIASPORA_ID.match(value).nil?
37
+ end
38
+
39
+ # This rule has no params
40
+ # @return [Hash] params
41
+ def params
42
+ {}
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,28 @@
1
+ module Validation
2
+ module Rule
3
+ # GUID validation rule
4
+ #
5
+ # Valid is a +String+ that is at least 16 chars long and contains only:
6
+ # * Letters: a-z
7
+ # * Numbers: 0-9
8
+ # * Special chars: '-', '_', '@', '.' and ':'
9
+ class Guid
10
+ # The error key for this rule
11
+ # @return [Symbol] error key
12
+ def error_key
13
+ :guid
14
+ end
15
+
16
+ # Determines if value is a valid +GUID+
17
+ def valid_value?(value)
18
+ value.is_a?(String) && value.downcase =~ /\A[0-9a-z\-_@.:]{16,}\z/
19
+ end
20
+
21
+ # This rule has no params
22
+ # @return [Hash] params
23
+ def params
24
+ {}
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,19 @@
1
+ module Validation
2
+ module Rule
3
+ # URI validation rule
4
+
5
+ # It allows +nil+, so maybe add an additional {Rule::NotNil} rule.
6
+ class NilableURI < Validation::Rule::URI
7
+ # The error key for this rule
8
+ # @return [Symbol] error key
9
+ def error_key
10
+ :nilableURI
11
+ end
12
+
13
+ # Determines if value is a valid URI
14
+ def valid_value?(uri_string)
15
+ uri_string.nil? || super
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,23 @@
1
+ module Validation
2
+ module Rule
3
+ # Validates that a property is not +nil+
4
+ class NotNil
5
+ # The error key for this rule
6
+ # @return [Symbol] error key
7
+ def error_key
8
+ :not_nil
9
+ end
10
+
11
+ # Determines if value is not nil
12
+ def valid_value?(value)
13
+ !value.nil?
14
+ end
15
+
16
+ # This rule has no params
17
+ # @return [Hash] params
18
+ def params
19
+ {}
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,33 @@
1
+ module Validation
2
+ module Rule
3
+ # Public key validation rule
4
+ #
5
+ # A valid key must:
6
+ # * start with "-----BEGIN PUBLIC KEY-----" and end with "-----END PUBLIC KEY-----"
7
+ # or
8
+ # * start with "-----BEGIN RSA PUBLIC KEY-----" and end with "-----END RSA PUBLIC KEY-----"
9
+ class PublicKey
10
+ # The error key for this rule
11
+ # @return [Symbol] error key
12
+ def error_key
13
+ :public_key
14
+ end
15
+
16
+ # Determines if value is a valid public key
17
+ def valid_value?(value)
18
+ !value.nil? && (
19
+ (value.strip.start_with?("-----BEGIN PUBLIC KEY-----") &&
20
+ value.strip.end_with?("-----END PUBLIC KEY-----")) ||
21
+ (value.strip.start_with?("-----BEGIN RSA PUBLIC KEY-----") &&
22
+ value.strip.end_with?("-----END RSA PUBLIC KEY-----"))
23
+ )
24
+ end
25
+
26
+ # This rule has no params
27
+ # @return [Hash] params
28
+ def params
29
+ {}
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,34 @@
1
+ module Validation
2
+ module Rule
3
+ # Rule for validating the number of tags in a string.
4
+ # Only the "#" characters will be counted.
5
+ # The string can be nil.
6
+ class TagCount
7
+ # This rule must have a +maximum+ param
8
+ # @return [Hash] params
9
+ attr_reader :params
10
+
11
+ # create a new rule for a maximum tag count validation
12
+ # @param [Hash] params
13
+ # @option params [Fixnum] :maximum maximum allowed tag count
14
+ def initialize(params)
15
+ unless params.include?(:maximum) && params[:maximum].is_a?(Fixnum)
16
+ raise ArgumentError, "A number has to be specified for :maximum"
17
+ end
18
+
19
+ @params = params
20
+ end
21
+
22
+ # The error key for this rule
23
+ # @return [Symbol] error key
24
+ def error_key
25
+ :tag_count
26
+ end
27
+
28
+ # Determines if value doesn't have more than +maximum+ tags
29
+ def valid_value?(value)
30
+ value.nil? || value.count("#") <= params[:maximum]
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,20 @@
1
+ module DiasporaFederation
2
+ module Validators
3
+ # This validates a {Discovery::WebFinger}
4
+ #
5
+ # @note it does not validate the guid and public key, because it will be
6
+ # removed in the webfinger
7
+ class WebFingerValidator < Validation::Validator
8
+ include Validation
9
+
10
+ rule :acct_uri, :not_empty
11
+
12
+ rule :alias_url, [:not_nil, nilableURI: %i(host path)]
13
+ rule :hcard_url, [:not_nil, nilableURI: %i(host path)]
14
+ rule :seed_url, %i(not_nil nilableURI)
15
+ rule :profile_url, [:not_nil, nilableURI: %i(host path)]
16
+ rule :atom_url, [:not_nil, nilableURI: %i(host path)]
17
+ rule :salmon_url, [:not_nil, nilableURI: %i(host path)]
18
+ end
19
+ end
20
+ end
@@ -1,4 +1,4 @@
1
1
  module DiasporaFederation
2
2
  # the gem version
3
- VERSION = "0.0.3"
3
+ VERSION = "0.0.4"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diaspora_federation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Neff
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-14 00:00:00.000000000 Z
11
+ date: 2015-08-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -30,6 +30,62 @@ dependencies:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.6.6
33
+ - !ruby/object:Gem::Dependency
34
+ name: faraday
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 0.9.0
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: 0.9.0
47
+ - !ruby/object:Gem::Dependency
48
+ name: faraday_middleware
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: 0.10.0
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: 0.10.0
61
+ - !ruby/object:Gem::Dependency
62
+ name: typhoeus
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 0.7.0
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 0.7.0
75
+ - !ruby/object:Gem::Dependency
76
+ name: valid
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: 0.5.0
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: 0.5.0
33
89
  description: This gem provides the functionality for de-/serialization and de-/encryption
34
90
  of Entities in the protocols used for communication among the various installations
35
91
  of Diaspora*
@@ -43,16 +99,34 @@ files:
43
99
  - README.md
44
100
  - lib/diaspora_federation.rb
45
101
  - lib/diaspora_federation/callbacks.rb
102
+ - lib/diaspora_federation/discovery.rb
103
+ - lib/diaspora_federation/discovery/discovery.rb
104
+ - lib/diaspora_federation/discovery/exceptions.rb
105
+ - lib/diaspora_federation/discovery/h_card.rb
106
+ - lib/diaspora_federation/discovery/host_meta.rb
107
+ - lib/diaspora_federation/discovery/web_finger.rb
108
+ - lib/diaspora_federation/discovery/xrd_document.rb
109
+ - lib/diaspora_federation/entities.rb
110
+ - lib/diaspora_federation/entities/person.rb
111
+ - lib/diaspora_federation/entities/profile.rb
46
112
  - lib/diaspora_federation/entity.rb
113
+ - lib/diaspora_federation/fetcher.rb
47
114
  - lib/diaspora_federation/logging.rb
48
115
  - lib/diaspora_federation/properties_dsl.rb
116
+ - lib/diaspora_federation/validators.rb
117
+ - lib/diaspora_federation/validators/h_card_validator.rb
118
+ - lib/diaspora_federation/validators/person_validator.rb
119
+ - lib/diaspora_federation/validators/profile_validator.rb
120
+ - lib/diaspora_federation/validators/rules/birthday.rb
121
+ - lib/diaspora_federation/validators/rules/boolean.rb
122
+ - lib/diaspora_federation/validators/rules/diaspora_id.rb
123
+ - lib/diaspora_federation/validators/rules/guid.rb
124
+ - lib/diaspora_federation/validators/rules/nilable_uri.rb
125
+ - lib/diaspora_federation/validators/rules/not_nil.rb
126
+ - lib/diaspora_federation/validators/rules/public_key.rb
127
+ - lib/diaspora_federation/validators/rules/tag_count.rb
128
+ - lib/diaspora_federation/validators/web_finger_validator.rb
49
129
  - lib/diaspora_federation/version.rb
50
- - lib/diaspora_federation/web_finger.rb
51
- - lib/diaspora_federation/web_finger/exceptions.rb
52
- - lib/diaspora_federation/web_finger/h_card.rb
53
- - lib/diaspora_federation/web_finger/host_meta.rb
54
- - lib/diaspora_federation/web_finger/web_finger.rb
55
- - lib/diaspora_federation/web_finger/xrd_document.rb
56
130
  - lib/tasks/build.rake
57
131
  - lib/tasks/diaspora_federation_tasks.rake
58
132
  - lib/tasks/tests.rake