redfinger 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.5
1
+ 0.0.6
@@ -7,13 +7,17 @@ module Redfinger
7
7
  attr_accessor :account, :domain, :uri_template
8
8
 
9
9
  def initialize(email, uri_template = nil)
10
- self.account = urify(email)
10
+ self.account = normalize(email)
11
11
  self.domain = account.split('@').last
12
12
  end
13
13
 
14
14
  def finger
15
15
  self.uri_template ||= retrieve_template_from_xrd
16
- Finger.new RestClient.get(swizzle).body
16
+ begin
17
+ return Finger.new self.account, RestClient.get(swizzle).body
18
+ rescue RestClient::ResourceNotFound
19
+ return Finger.new self.account, RestClient.get(swizzle(account_with_scheme)).body
20
+ end
17
21
  end
18
22
 
19
23
  def xrd_url(ssl = true)
@@ -22,21 +26,19 @@ module Redfinger
22
26
 
23
27
  private
24
28
 
25
- def swizzle
29
+ def swizzle(account = nil)
30
+ account ||= self.account
26
31
  uri_template.gsub '{uri}', URI.escape(self.account)
27
32
  end
28
33
 
29
34
  def retrieve_template_from_xrd(ssl = true)
30
35
  doc = Nokogiri::XML::Document.parse(RestClient.get(xrd_url(ssl)).body)
31
- if doc.namespaces["xmlns:hm"] != "http://host-meta.net/xrd/1.0"
36
+ if doc.namespaces["xmlns"] != "http://docs.oasis-open.org/ns/xri/xrd-1.0"
32
37
  # it's probably not finger, let's try without ssl
33
38
  # http://code.google.com/p/webfinger/wiki/WebFingerProtocol
34
39
  # says first ssl should be tried then without ssl, should fix issue #2
35
40
  doc = Nokogiri::XML::Document.parse(RestClient.get(xrd_url(false)).body)
36
41
  end
37
- unless doc.at_xpath('.//hm:Host').content == self.domain
38
- raise Redfinger::SecurityException, "The XRD document's host did not match the account's host."
39
- end
40
42
 
41
43
  doc.at('Link[rel=lrdd]').attribute('template').value
42
44
  rescue Errno::ECONNREFUSED, RestClient::ResourceNotFound
@@ -47,9 +49,13 @@ module Redfinger
47
49
  end
48
50
  end
49
51
 
50
- def urify(email)
51
- email = "acct:#{email}" unless email.include?("acct:")
52
- email
52
+ def normalize(email)
53
+ email.sub! /^acct:/, ''
54
+ email.downcase
55
+ end
56
+
57
+ def account_with_scheme
58
+ "acct:" + account
53
59
  end
54
60
  end
55
61
  end
@@ -5,9 +5,9 @@ module Redfinger
5
5
  # special helpers that are availale to pull specific types
6
6
  # of URLs, see Redfinger::LinkHelpers
7
7
  class Finger
8
- def initialize(xml) # :nodoc:
8
+ def initialize(subject, xml) # :nodoc:
9
9
  @doc = Nokogiri::XML::Document.parse(xml)
10
- @subject = @doc.at_css('Subject').content
10
+ @subject = subject
11
11
  end
12
12
 
13
13
  # All of the links provided by the Webfinger response.
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{redfinger}
8
- s.version = "0.0.5"
8
+ s.version = "0.0.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Michael Bleigh"]
12
- s.date = %q{2010-06-24}
12
+ s.date = %q{2010-08-10}
13
13
  s.description = %q{A Ruby Webfinger client}
14
14
  s.email = %q{michael@intridea.com}
15
15
  s.extra_rdoc_files = [
@@ -37,7 +37,7 @@ Gem::Specification.new do |s|
37
37
  s.homepage = %q{http://github.com/mbleigh/redfinger}
38
38
  s.rdoc_options = ["--charset=UTF-8"]
39
39
  s.require_paths = ["lib"]
40
- s.rubygems_version = %q{1.3.6}
40
+ s.rubygems_version = %q{1.3.7}
41
41
  s.summary = %q{A Ruby WebFinger client.}
42
42
  s.test_files = [
43
43
  "spec/redfinger/client_spec.rb",
@@ -49,7 +49,7 @@ Gem::Specification.new do |s|
49
49
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
50
50
  s.specification_version = 3
51
51
 
52
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
52
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
53
53
  s.add_runtime_dependency(%q<rest-client>, [">= 1.5.0"])
54
54
  s.add_runtime_dependency(%q<nokogiri>, [">= 1.4.0"])
55
55
  s.add_runtime_dependency(%q<hashie>, [">= 0"])
@@ -4,12 +4,8 @@ class HaltSuccessError < StandardError; end
4
4
 
5
5
  describe Redfinger::Client do
6
6
  describe '#new' do
7
- it 'should add acct: if it is not in URI form' do
8
- Redfinger::Client.new('abc@example.com').account.should == 'acct:abc@example.com'
9
- end
10
-
11
- it 'should not add acct: if it is already in URI form' do
12
- Redfinger::Client.new('acct:abc@example.com').account.should == 'acct:abc@example.com'
7
+ it 'should remove acct: if it is already in URI form' do
8
+ Redfinger::Client.new('acct:abc@example.com').account.should == 'abc@example.com'
13
9
  end
14
10
 
15
11
  it 'should set the domain to whatevers after the @ sign' do
@@ -45,11 +41,6 @@ describe Redfinger::Client do
45
41
  stub_request(:get, 'https://example.com/.well-known/host-meta').to_return(:status => 200, :body => host_xrd)
46
42
  Redfinger::Client.new('acct:abc@example.com').send(:retrieve_template_from_xrd).should == 'http://example.com/webfinger/?q={uri}'
47
43
  end
48
-
49
- it 'should raise a SecurityException if there is a host mismatch' do
50
- stub_request(:get, 'https://franklin.com/.well-known/host-meta').to_return(:status => 200, :body => host_xrd)
51
- lambda{Redfinger::Client.new('acct:abc@franklin.com').send(:retrieve_template_from_xrd)}.should raise_error(Redfinger::SecurityException)
52
- end
53
44
  end
54
45
 
55
46
  describe '#finger' do
@@ -12,11 +12,7 @@ include WebMock
12
12
  def host_xrd
13
13
  <<-XML
14
14
  <?xml version='1.0' encoding='UTF-8'?>
15
- <!-- NOTE: this host-meta end-point is a pre-alpha work in progress. Don't rely on it. -->
16
- <!-- Please follow the list at http://groups.google.com/group/webfinger -->
17
- <XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'
18
- xmlns:hm='http://host-meta.net/xrd/1.0'>
19
- <hm:Host xmlns='http://host-meta.net/xrd/1.0'>example.com</hm:Host>
15
+ <XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>
20
16
  <Link rel='lrdd'
21
17
  template='http://example.com/webfinger/?q={uri}'>
22
18
  <Title>Resource Descriptor</Title>
@@ -29,7 +25,6 @@ def finger_xrd
29
25
  <<-XML
30
26
  <?xml version='1.0'?>
31
27
  <XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>
32
- <Subject>acct:abc@example.com</Subject>
33
28
  <Alias>http://www.google.com/profiles/abc</Alias>
34
29
  <Link rel='http://portablecontacts.net/spec/1.0' href='http://www-opensocial.googleusercontent.com/api/people/'/>
35
30
  <Link rel='http://webfinger.net/rel/profile-page' href='http://www.google.com/profiles/abc' type='text/html'/>
@@ -43,9 +38,9 @@ def finger_xrd
43
38
  XML
44
39
  end
45
40
 
46
- def stub_success
41
+ def stub_success(address = 'abc@example.com')
47
42
  stub_request(:get, 'https://example.com/.well-known/host-meta').to_return(:status => 200, :body => host_xrd)
48
- stub_request(:get, /webfinger\/\?q=.*/).to_return(:status => 200, :body => finger_xrd)
43
+ stub_request(:get, /webfinger\/\?q=#{address}/).to_return(:status => 200, :body => finger_xrd)
49
44
  end
50
45
 
51
46
  Spec::Runner.configure do |config|
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redfinger
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 19
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 0
8
- - 5
9
- version: 0.0.5
9
+ - 6
10
+ version: 0.0.6
10
11
  platform: ruby
11
12
  authors:
12
13
  - Michael Bleigh
@@ -14,16 +15,18 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-06-24 00:00:00 -04:00
18
+ date: 2010-08-10 00:00:00 -05:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  name: rest-client
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
24
26
  requirements:
25
27
  - - ">="
26
28
  - !ruby/object:Gem::Version
29
+ hash: 3
27
30
  segments:
28
31
  - 1
29
32
  - 5
@@ -35,9 +38,11 @@ dependencies:
35
38
  name: nokogiri
36
39
  prerelease: false
37
40
  requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
38
42
  requirements:
39
43
  - - ">="
40
44
  - !ruby/object:Gem::Version
45
+ hash: 7
41
46
  segments:
42
47
  - 1
43
48
  - 4
@@ -49,9 +54,11 @@ dependencies:
49
54
  name: hashie
50
55
  prerelease: false
51
56
  requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
52
58
  requirements:
53
59
  - - ">="
54
60
  - !ruby/object:Gem::Version
61
+ hash: 3
55
62
  segments:
56
63
  - 0
57
64
  version: "0"
@@ -61,9 +68,11 @@ dependencies:
61
68
  name: rspec
62
69
  prerelease: false
63
70
  requirement: &id004 !ruby/object:Gem::Requirement
71
+ none: false
64
72
  requirements:
65
73
  - - ">="
66
74
  - !ruby/object:Gem::Version
75
+ hash: 13
67
76
  segments:
68
77
  - 1
69
78
  - 2
@@ -75,9 +84,11 @@ dependencies:
75
84
  name: webmock
76
85
  prerelease: false
77
86
  requirement: &id005 !ruby/object:Gem::Requirement
87
+ none: false
78
88
  requirements:
79
89
  - - ">="
80
90
  - !ruby/object:Gem::Version
91
+ hash: 3
81
92
  segments:
82
93
  - 0
83
94
  version: "0"
@@ -119,23 +130,27 @@ rdoc_options:
119
130
  require_paths:
120
131
  - lib
121
132
  required_ruby_version: !ruby/object:Gem::Requirement
133
+ none: false
122
134
  requirements:
123
135
  - - ">="
124
136
  - !ruby/object:Gem::Version
137
+ hash: 3
125
138
  segments:
126
139
  - 0
127
140
  version: "0"
128
141
  required_rubygems_version: !ruby/object:Gem::Requirement
142
+ none: false
129
143
  requirements:
130
144
  - - ">="
131
145
  - !ruby/object:Gem::Version
146
+ hash: 3
132
147
  segments:
133
148
  - 0
134
149
  version: "0"
135
150
  requirements: []
136
151
 
137
152
  rubyforge_project:
138
- rubygems_version: 1.3.6
153
+ rubygems_version: 1.3.7
139
154
  signing_key:
140
155
  specification_version: 3
141
156
  summary: A Ruby WebFinger client.