libravatar 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.0
1
+ 1.2.0
@@ -57,12 +57,13 @@ class Libravatar
57
57
 
58
58
  # Grab the DNS SRV records associated with the target domain,
59
59
  # and choose one according to RFC2782.
60
- def get_base_url
60
+ def srv_lookup
61
61
  profile = @@profiles[ @https ? 1 : 0 ]
62
62
  Resolv::DNS::open do |dns|
63
63
  rrs = dns.getresources(profile[:srv] + get_target_domain(),
64
64
  Resolv::DNS::Resource::IN::SRV).to_a
65
- return profile[:scheme] + profile[:host] unless rrs.any?
65
+ return [nil, nil] unless rrs.any?
66
+
66
67
 
67
68
  min_priority = rrs.map{ |r| r.priority }.min
68
69
  rrs.delete_if{ |r| r.priority != min_priority }
@@ -72,13 +73,24 @@ class Libravatar
72
73
  weight_sum = rrs.inject(0) { |a,r| a+r.weight }
73
74
  value = rand( weight_sum + 1 )
74
75
  rrs.each do |r|
75
- port_fragment = r.port != profile[:port] ? ':' + r.port : ''
76
- return profile[:scheme] + r.target.to_s + port_fragment if r.weight <= value
76
+ return [r.target, r.port] if r.weight <= value
77
77
  value -= r.weight
78
78
  end
79
79
  end
80
80
  end
81
81
 
82
+ def get_base_url
83
+ profile = @@profiles[ @https ? 1 : 0 ]
84
+ target, port = srv_lookup
85
+
86
+ if (target && port)
87
+ port_fragment = port != profile[:port] ? ':' + port : ''
88
+ return profile[:scheme] + target.to_s + port_fragment
89
+ else
90
+ return profile[:scheme] + profile[:host]
91
+ end
92
+ end
93
+
82
94
  # Generate the libravatar URL
83
95
  def to_s
84
96
  if @email
@@ -98,6 +110,14 @@ class Libravatar
98
110
 
99
111
  private
100
112
 
113
+ def sanitize_srv_lookup(hostname, port)
114
+ unless hostname.match(/^[0-9a-zA-Z\-.]+$/) && 1 <= port && port <= 65535
115
+ return [nil, nil]
116
+ end
117
+
118
+ return [hostname, port]
119
+ end
120
+
101
121
  # Normalize an openid URL following the description on libravatar.org
102
122
  def normalize_openid(s)
103
123
  x = URI.parse(s)
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{libravatar}
8
- s.version = "1.1.0"
8
+ s.version = "1.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kang-min Liu"]
12
- s.date = %q{2011-06-26}
12
+ s.date = %q{2011-07-24}
13
13
  s.description = %q{libravatar.org provides avatar image hosting (like gravatar.com). Their users may associate avatar images with email or openid. This rubygem can be used to generate libravatar avatar image URL}
14
14
  s.email = %q{gugod@gugod.org}
15
15
  s.extra_rdoc_files = [
@@ -38,8 +38,14 @@ class TestLibravatar < Test::Unit::TestCase
38
38
  assert_equal x.send(:normalize_openid, "HTTP://EXAMPLE.COM"), "http://example.com/"
39
39
  end
40
40
 
41
- should "Retured the federated URI" do
41
+ should "Return the federated URI" do
42
42
  avatar = Libravatar.new(:email => 'invalid@catalyst.net.nz')
43
43
  assert_equal avatar.to_s, 'http://static.avatars.catalyst.net.nz/avatar/f924d1e9f2c10ee9efa7acdd16484c2f'
44
44
  end
45
+
46
+ should "Sanitize the SRV lookup result" do
47
+ avatar = Libravatar.new
48
+ assert_equal ["hosntame.abcde.fghi.com", 12345], avatar.send(:sanitize_srv_lookup, "hosntame.abcde.fghi.com", 12345)
49
+ assert_equal [nil, nil], avatar.send(:sanitize_srv_lookup, "FNORD IMPUNTK *#(*$#&", 65348283)
50
+ end
45
51
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libravatar
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 1.1.0
10
+ version: 1.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kang-min Liu
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-06-26 00:00:00 +08:00
18
+ date: 2011-07-24 00:00:00 +08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency