goldfinger 1.2.0 → 2.0.0
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.
- checksums.yaml +4 -4
- data/README.md +10 -7
- data/lib/goldfinger.rb +2 -3
- data/lib/goldfinger/client.rb +10 -30
- data/lib/goldfinger/link.rb +2 -0
- data/lib/goldfinger/request.rb +2 -0
- data/lib/goldfinger/result.rb +13 -17
- data/lib/goldfinger/utils.rb +2 -0
- metadata +25 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dddcce07ce9462a9e37c4339d722d7a93687d49a
|
4
|
+
data.tar.gz: c520b7d8b7504f46d2c33f13020359856c25865f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 16b82f58d3b734b7a254d06214ca1875953cda6b134a57e00a63b057029041e1b238af087c8a87ff36db00afc5f5c7c5871b29f42c079dfc88b10ee6708f3461
|
7
|
+
data.tar.gz: 58c4b87d7834551e51372e3244aa6d00e4eeff7fb1c809cdf97404e459b857c2b35a4b38268da452105ca89ee5c59db062235c214dc0b0bcdd9c99b756a848a0
|
data/README.md
CHANGED
@@ -1,15 +1,18 @@
|
|
1
|
-
Goldfinger, a
|
1
|
+
Goldfinger, a WebFinger client for Ruby
|
2
2
|
=======================================
|
3
3
|
|
4
4
|
[][gem]
|
5
|
-
[][travis]
|
6
|
+
[][gemnasium]
|
7
7
|
|
8
8
|
[gem]: https://rubygems.org/gems/goldfinger
|
9
|
-
[travis]: https://travis-ci.org/
|
10
|
-
[gemnasium]: https://gemnasium.com/
|
9
|
+
[travis]: https://travis-ci.org/tootsuite/goldfinger
|
10
|
+
[gemnasium]: https://gemnasium.com/tootsuite/goldfinger
|
11
11
|
|
12
|
-
A
|
12
|
+
A WebFinger client for Ruby. Supports `application/xrd+xml` and `application/jrd+json` responses. Raises `Goldfinger::NotFoundError` on failure to fetch the Webfinger or XRD data, can also raise `HTTP:Error` or `OpenSSL::SSL::SSLError` if something is wrong with the HTTPS connection it uses.
|
13
|
+
|
14
|
+
- **Does not** fall back to HTTP if HTTPS is not available
|
15
|
+
- **Does** check host-meta XRD, but *only* if the standard WebFinger path yielded no result
|
13
16
|
|
14
17
|
## Installation
|
15
18
|
|
@@ -30,4 +33,4 @@ A Webfinger client for Ruby. Supports `application/xrd+xml` and `application/jrd
|
|
30
33
|
|
31
34
|
## RFC support
|
32
35
|
|
33
|
-
The official
|
36
|
+
The official WebFinger RFC is [7033](https://tools.ietf.org/html/rfc7033).
|
data/lib/goldfinger.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'goldfinger/request'
|
2
4
|
require 'goldfinger/link'
|
3
5
|
require 'goldfinger/result'
|
@@ -11,9 +13,6 @@ module Goldfinger
|
|
11
13
|
class NotFoundError < Error
|
12
14
|
end
|
13
15
|
|
14
|
-
class SSLError < Error
|
15
|
-
end
|
16
|
-
|
17
16
|
# Returns result for the Webfinger query
|
18
17
|
#
|
19
18
|
# @raise [Goldfinger::NotFoundError] Error raised when the Webfinger resource could not be retrieved
|
data/lib/goldfinger/client.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'addressable'
|
2
4
|
require 'nokogiri'
|
3
5
|
|
@@ -10,24 +12,11 @@ module Goldfinger
|
|
10
12
|
end
|
11
13
|
|
12
14
|
def finger
|
13
|
-
|
14
|
-
|
15
|
-
begin
|
16
|
-
response = perform_get(standard_url(ssl))
|
17
|
-
|
18
|
-
return finger_from_template if response.code != 200
|
15
|
+
response = perform_get(standard_url)
|
19
16
|
|
20
|
-
|
21
|
-
rescue HTTP::Error
|
22
|
-
raise Goldfinger::NotFoundError unless ssl
|
17
|
+
return finger_from_template if response.code != 200
|
23
18
|
|
24
|
-
|
25
|
-
retry
|
26
|
-
end
|
27
|
-
rescue HTTP::Error
|
28
|
-
raise Goldfinger::NotFoundError
|
29
|
-
rescue OpenSSL::SSL::SSLError
|
30
|
-
raise Goldfinger::SSLError
|
19
|
+
Goldfinger::Result.new(response)
|
31
20
|
rescue Addressable::URI::InvalidURIError
|
32
21
|
raise Goldfinger::NotFoundError, 'Invalid URI'
|
33
22
|
end
|
@@ -35,16 +24,7 @@ module Goldfinger
|
|
35
24
|
private
|
36
25
|
|
37
26
|
def finger_from_template
|
38
|
-
|
39
|
-
|
40
|
-
begin
|
41
|
-
template = perform_get(url(ssl))
|
42
|
-
rescue HTTP::Error
|
43
|
-
raise Goldfinger::NotFoundError unless ssl
|
44
|
-
|
45
|
-
ssl = false
|
46
|
-
retry
|
47
|
-
end
|
27
|
+
template = perform_get(url)
|
48
28
|
|
49
29
|
raise Goldfinger::NotFoundError, 'No host-meta on the server' if template.code != 200
|
50
30
|
|
@@ -55,12 +35,12 @@ module Goldfinger
|
|
55
35
|
Goldfinger::Result.new(response)
|
56
36
|
end
|
57
37
|
|
58
|
-
def url
|
59
|
-
"
|
38
|
+
def url
|
39
|
+
"https://#{domain}/.well-known/host-meta"
|
60
40
|
end
|
61
41
|
|
62
|
-
def standard_url
|
63
|
-
"
|
42
|
+
def standard_url
|
43
|
+
"https://#{domain}/.well-known/webfinger?resource=#{@uri}"
|
64
44
|
end
|
65
45
|
|
66
46
|
def url_from_template(template)
|
data/lib/goldfinger/link.rb
CHANGED
data/lib/goldfinger/request.rb
CHANGED
data/lib/goldfinger/result.rb
CHANGED
@@ -1,13 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'oj'
|
4
|
+
|
1
5
|
module Goldfinger
|
6
|
+
# @!attribute [r] subject
|
7
|
+
# @return [String] URI that identifies the entity that the JRD describes.
|
8
|
+
# @!attribute [r] aliases
|
9
|
+
# @return [Array] Zero or more URI strings that identify the same entity as the "subject" URI.
|
2
10
|
class Result
|
3
11
|
MIME_TYPES = [
|
4
12
|
'application/jrd+json',
|
5
13
|
'application/json',
|
6
14
|
'application/xrd+xml',
|
7
15
|
'application/xml',
|
8
|
-
'text/xml'
|
16
|
+
'text/xml',
|
9
17
|
].freeze
|
10
18
|
|
19
|
+
attr_reader :subject, :aliases
|
20
|
+
|
11
21
|
def initialize(response)
|
12
22
|
@mime_type = response.mime_type
|
13
23
|
@body = response.body
|
@@ -19,20 +29,6 @@ module Goldfinger
|
|
19
29
|
parse
|
20
30
|
end
|
21
31
|
|
22
|
-
# The value of the "subject" member is a URI that identifies the entity
|
23
|
-
# that the JRD describes.
|
24
|
-
# @return [String]
|
25
|
-
def subject
|
26
|
-
@subject
|
27
|
-
end
|
28
|
-
|
29
|
-
# The "aliases" array is an array of zero or more URI strings that
|
30
|
-
# identify the same entity as the "subject" URI.
|
31
|
-
# @return [Array]
|
32
|
-
def aliases
|
33
|
-
@aliases
|
34
|
-
end
|
35
|
-
|
36
32
|
# The "properties" object comprises zero or more name/value pairs whose
|
37
33
|
# names are URIs (referred to as "property identifiers") and whose
|
38
34
|
# values are strings or nil.
|
@@ -78,7 +74,7 @@ module Goldfinger
|
|
78
74
|
end
|
79
75
|
|
80
76
|
def parse_json
|
81
|
-
json =
|
77
|
+
json = Oj.load(@body, mode: :null)
|
82
78
|
|
83
79
|
@subject = json['subject']
|
84
80
|
@aliases = json['aliases'] || []
|
@@ -94,7 +90,7 @@ module Goldfinger
|
|
94
90
|
xml = Nokogiri::XML(@body)
|
95
91
|
|
96
92
|
@subject = xml.at_xpath('//xmlns:Subject').content
|
97
|
-
@aliases = xml.xpath('//xmlns:Alias').map
|
93
|
+
@aliases = xml.xpath('//xmlns:Alias').map(&:content)
|
98
94
|
|
99
95
|
properties = xml.xpath('/xmlns:XRD/xmlns:Property')
|
100
96
|
properties.each { |prop| @properties[prop.attribute('type').value] = prop.attribute('nil') ? nil : prop.content }
|
data/lib/goldfinger/utils.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: goldfinger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eugen Rochko
|
@@ -16,56 +16,70 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '2.
|
19
|
+
version: '2.2'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '2.
|
26
|
+
version: '2.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: addressable
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '2.
|
33
|
+
version: '2.5'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '2.
|
40
|
+
version: '2.5'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: nokogiri
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1.
|
47
|
+
version: '1.8'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '1.
|
54
|
+
version: '1.8'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: oj
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: bundler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '1.
|
75
|
+
version: '1.15'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '1.
|
82
|
+
version: '1.15'
|
69
83
|
description: A Webfinger utility for Ruby
|
70
84
|
email: eugen@zeonfederated.com
|
71
85
|
executables: []
|
@@ -92,7 +106,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
92
106
|
requirements:
|
93
107
|
- - ">="
|
94
108
|
- !ruby/object:Gem::Version
|
95
|
-
version: 2.
|
109
|
+
version: 2.3.0
|
96
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
111
|
requirements:
|
98
112
|
- - ">="
|
@@ -100,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
114
|
version: '0'
|
101
115
|
requirements: []
|
102
116
|
rubyforge_project:
|
103
|
-
rubygems_version: 2.
|
117
|
+
rubygems_version: 2.6.11
|
104
118
|
signing_key:
|
105
119
|
specification_version: 4
|
106
120
|
summary: A Webfinger utility for Ruby
|