osub 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,74 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+
4
+ require 'ostatus'
5
+ require 'hmac-sha1'
6
+
7
+ module OSub
8
+ class Subscription
9
+ attr_reader :callback_url
10
+ attr_reader :topic_url
11
+
12
+ def initialize(callback_url, topic_url, secret = nil, token = nil)
13
+ @tokens = []
14
+ if token != nil
15
+ @tokens << token
16
+ end
17
+
18
+ secret = "" if secret == nil
19
+ @secret = secret.to_s
20
+
21
+ @callback_url = callback_url
22
+ @topic_url = topic_url
23
+ end
24
+
25
+ # Actively searches for hubs by talking to publisher directly
26
+ def hubs
27
+ OStatus::Feed.from_url(topic_url).hubs
28
+ end
29
+
30
+ # Subscribe to the topic through the given hub.
31
+ def subscribe(hub_url, async = false, token = nil)
32
+ if token != nil
33
+ @tokens << token.to_s
34
+ end
35
+ change_subscription(:subscribe, hub_url, async, token)
36
+ end
37
+
38
+ # Unsubscribe to the topic through the given hub.
39
+ def unsubscribe(hub_url, async = false, token = nil)
40
+ if token != nil
41
+ @tokens << token.to_s
42
+ end
43
+ change_subscription(:unsubscribe, hub_url, async, token)
44
+ end
45
+
46
+ def change_subscription(mode, hub_url, async, token)
47
+ res = Net::HTTP.post_form(URI.parse(hub_url),
48
+ { 'hub.mode' => mode.to_s,
49
+ 'hub.callback' => @callback_url,
50
+ 'hub.verify' => async ? 'async' : 'sync',
51
+ 'hub.verify_token' => token,
52
+ 'hub.lease_seconds' => '',
53
+ 'hub.secret' => @secret,
54
+ 'hub.topic' => @topic_url})
55
+ end
56
+
57
+ def verify_subscription(token)
58
+ result = @tokens.index(token) != nil
59
+ @tokens.delete(token)
60
+
61
+ result
62
+ end
63
+
64
+ def verify_content(body, signature)
65
+ hmac = HMAC::SHA1.hexdigest(@secret, body)
66
+ check = "sha1=" + hmac
67
+ check == signature
68
+ end
69
+
70
+ def perform_challenge(challenge_code)
71
+ {:body => challenge_code, :status => 200}
72
+ end
73
+ end
74
+ end
data/lib/osub/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module OSub
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
data/lib/osub.rb CHANGED
@@ -1,3 +1,2 @@
1
- require_relative 'osub/subscriber'
2
1
  require_relative 'osub/subscription'
3
-
2
+ require_relative 'osub/subscribers'
metadata CHANGED
@@ -1,86 +1,98 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: osub
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.5
5
- prerelease:
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 6
9
+ version: 0.0.6
6
10
  platform: ruby
7
- authors:
11
+ authors:
8
12
  - Hackers of the Severed Hand
9
13
  autorequire:
10
14
  bindir: bin
11
15
  cert_chain: []
12
- date: 2014-10-06 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
16
+
17
+ date: 2011-04-03 00:00:00 -04:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: ruby-hmac
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :runtime
23
22
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
23
+ requirement: &id001 !ruby/object:Gem::Requirement
25
24
  none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: ostatus
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ version: "0"
38
31
  type: :runtime
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: ostatus
39
35
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
36
+ requirement: &id002 !ruby/object:Gem::Requirement
41
37
  none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ version: "0"
44
+ type: :runtime
45
+ version_requirements: *id002
46
46
  description: This is a simple implementation of a subscriber in the PubSubHubbub protocol.
47
- email:
47
+ email:
48
48
  - hotsh@xomb.org
49
49
  executables: []
50
+
50
51
  extensions: []
52
+
51
53
  extra_rdoc_files: []
52
- files:
54
+
55
+ files:
53
56
  - .gitignore
54
57
  - Gemfile
55
58
  - LICENSE
56
59
  - Rakefile
57
60
  - lib/osub.rb
58
- - lib/osub/subscriber.rb
59
61
  - lib/osub/subscribers.rb
62
+ - lib/osub/subscription.rb
60
63
  - lib/osub/version.rb
61
64
  - osub.gemspec
65
+ has_rdoc: true
62
66
  homepage: http://github.com/hotsh/osub
63
67
  licenses: []
68
+
64
69
  post_install_message:
65
70
  rdoc_options: []
66
- require_paths:
71
+
72
+ require_paths:
67
73
  - lib
68
- required_ruby_version: !ruby/object:Gem::Requirement
74
+ required_ruby_version: !ruby/object:Gem::Requirement
69
75
  none: false
70
- requirements:
71
- - - ! '>='
72
- - !ruby/object:Gem::Version
73
- version: '0'
74
- required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ segments:
80
+ - 0
81
+ version: "0"
82
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
83
  none: false
76
- requirements:
77
- - - ! '>='
78
- - !ruby/object:Gem::Version
79
- version: '0'
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ segments:
88
+ - 0
89
+ version: "0"
80
90
  requirements: []
91
+
81
92
  rubyforge_project: osub
82
- rubygems_version: 1.8.24
93
+ rubygems_version: 1.3.7
83
94
  signing_key:
84
95
  specification_version: 3
85
96
  summary: This is a simple implementation of a subscriber in the PubSubHubbub protocol.
86
97
  test_files: []
98
+
@@ -1,93 +0,0 @@
1
- require 'net/http'
2
- require 'uri'
3
-
4
- require 'ostatus'
5
- require 'hmac-sha1'
6
-
7
- module OSub
8
- class Subscription
9
- attr_reader :callback_url
10
- attr_reader :topic_url
11
-
12
- def initialize(callback_url, topic_url, secret = nil)
13
- @tokens = []
14
-
15
- secret = "" if secret == nil
16
- @secret = secret.to_s
17
-
18
- @callback_url = callback_url
19
- @topic_url = topic_url
20
- end
21
-
22
- # Actively searches for hubs by talking to publisher directly
23
- def hubs
24
- OStatus::Feed.from_url(topic_url).hubs
25
- end
26
-
27
- # Subscribe to the topic through the given hub.
28
- def subscribe(hub_url, token = nil)
29
- if token != nil
30
- @tokens << token.to_s
31
- end
32
- change_subscription(:subscribe, hub_url, token)
33
- end
34
-
35
- # Unsubscribe to the topic through the given hub.
36
- def unsubscribe(hub_url, token = nil)
37
- if token != nil
38
- @tokens << token.to_s
39
- end
40
- change_subscription(:unsubscribe, hub_url, token)
41
- end
42
-
43
- def change_subscription(mode, hub_url, token, redirect_limit = 10)
44
- hub_uri = URI.parse(hub_url)
45
-
46
- req = Net::HTTP::Post.new(hub_uri.request_uri)
47
- req.set_form_data({
48
- 'hub.mode' => mode.to_s,
49
- 'hub.callback' => @callback_url,
50
- 'hub.verify' => async ? 'async' : 'sync',
51
- 'hub.verify_token' => token,
52
- 'hub.lease_seconds' => '',
53
- 'hub.secret' => @secret,
54
- 'hub.topic' => @topic_url
55
- })
56
-
57
- http = Net::HTTP.new(hub_uri.hostname, hub_uri.port)
58
- if hub_uri.scheme == 'https'
59
- http.use_ssl = true
60
- http.verify_mode = OpenSSL::SSL::VERIFY_PEER
61
- end
62
-
63
- response = http.request(req)
64
-
65
- if response.is_a?(Net::HTTPRedirection) && redirect_limit > 0
66
- location = response['location']
67
- self.change_subscription(mode, hub_url, token, redirect_limit - 1)
68
- else
69
- response
70
- end
71
-
72
- rescue OpenSSL::SSL::SSLError
73
- return nil
74
- end
75
-
76
- def verify_subscription(token)
77
- result = @tokens.index(token) != nil
78
- @tokens.delete(token)
79
-
80
- result
81
- end
82
-
83
- def verify_content(body, signature)
84
- hmac = HMAC::SHA1.hexdigest(@secret, body)
85
- check = "sha1=" + hmac
86
- check == signature
87
- end
88
-
89
- def perform_challenge(challenge_code)
90
- {:body => challenge_code, :status => 200}
91
- end
92
- end
93
- end