yam 2.0.2 → 2.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 97a990374c59ee764163a8526ad5fb97c658394b
4
- data.tar.gz: 22f4a2584a6d6ce7893d96fb5fa16e3280a64201
3
+ metadata.gz: e0e5efea2af8ae9081156643e602122768245e7f
4
+ data.tar.gz: ad3067915dda2084e593b184a2e32fa56bed1b18
5
5
  SHA512:
6
- metadata.gz: d85bd34783b152be23fdb86598616adac60bae9fbc301d811d7208e4456effc628f6e6a4ddc0fd7b5e7613583c86289879e660db1ec140b84b929d8812496134
7
- data.tar.gz: 40c1d1664b2e1883b9d977125672bec96d8fa4fddf2006bd6fe88b66b6bed745a92a9547d93a4231d5bd89e671922abae3c42b53995bfbb010f2764e8512e110
6
+ metadata.gz: 6d6562a49ee934050eafbcbac4c99ca98fc7f712574eff6582d8c4cc27b45db832155eef8777c290cefdd4e984785a51ab63c6212d7868082257f83913e4b269
7
+ data.tar.gz: b0c26a07fec043005483b21072bcb36c19ff6c8e6c3e1bbeada98289ae59c01999c1add376545c2eafc91e0d895c6251a5e6a14b100e0e2ffb931e6308e008db
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ 2.1.0
2
+ ====================================
3
+ - Bundled Yammer OAuth2 Client into gem
1
4
 
2
5
  2.0.1
3
6
  ====================================
data/CONTRIBUTORS ADDED
@@ -0,0 +1,4 @@
1
+ Jessie A. Young
2
+ Jason Nochlin
3
+ Sandeep Sharma
4
+ Scott Balentine
data/Gemfile CHANGED
@@ -20,7 +20,6 @@
20
20
  source 'https://rubygems.org'
21
21
 
22
22
  group :test do
23
- # gem 'json', :platforms => :ruby_18
24
23
  gem 'rspec', '>= 2.11'
25
24
  gem 'simplecov', :require => false
26
25
  gem 'coveralls', :require => false
data/README.md CHANGED
@@ -83,6 +83,53 @@ Setup a Yammer client application as described on the [Yammer Developer site](ht
83
83
  }
84
84
  ```
85
85
 
86
+ ## Using bundled Yammer OAuth2 Client
87
+ This gem comes bundled with an OAuth2 wrapper that makes provides convenience methods for getting through the OAuth2 flow
88
+
89
+ ```ruby
90
+
91
+ require 'yammer-oauth2/client'
92
+
93
+ yammer_client = Yammmer::OAuth2Client.new('PRbTcg9qjgKsp4jjpm1pw', 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U')
94
+
95
+ ```
96
+
97
+ ## Authorization Grants
98
+ The client wraps around the creation of any given grant and passing in the parameters defined in the configuration
99
+ file. The supported grants include Authorization Code and Implicit. They are available via the `authorization_code` and `implicit` methods on a client object.
100
+
101
+ # Authorization Code grant (Server-side authorization)
102
+
103
+ ```ruby
104
+
105
+ # generate authorization url
106
+ auth_url = yammer_client.webserver_authorization_url
107
+ # => https://www.yammer.com/dialog/oauth/authorize?client_id=PRbTcg9qjgKsp4jjpm1pw&response_type=code
108
+
109
+ # exchange authorization code for access token. we will get back a Net::HTTPResponse
110
+ response = yammer_client.exchange_auth_code_for_token({
111
+ :code => '11a0b0b64db56c30e2ef',
112
+ :redirect_uri => 'https://localhost/callback',
113
+ })
114
+
115
+ response.inspect
116
+ # => #<Net::HTTPOK:0x007ff8bc7c1200>
117
+
118
+ response.body
119
+ # => {
120
+ # "access_token" : {
121
+ # "token": "e409f4272fe539166a77c42479de030e7660812a",
122
+ # "token_type" : "bearer"
123
+ # }
124
+ # }"
125
+ ```
126
+
127
+ # Implicit Grant (Client-side authorization)
128
+ ```ruby
129
+ authorization_url = yammer_client.clientside_authorization_url(:redirect_uri => 'http://localhost/oauth2/callback')
130
+ # => "https://www.yammer.com/dialog/oauth/?client_id=PRbTcg9qjgKsp4jjpm1pw&redirect_uri=http%3A%2F%2Flocalhost%2Foauth%2Fcallback&response_type=token"
131
+ ```
132
+
86
133
  ### Configuring yammer-client
87
134
 
88
135
  To view the current state of the client use the `options` method
data/lib/yammer.rb CHANGED
@@ -17,6 +17,7 @@ require 'yammer/error'
17
17
  require 'yammer/configurable'
18
18
  require 'yammer/api'
19
19
  require 'yammer/http_adapter'
20
+ require 'yammer/oauth2_client'
20
21
  require 'yammer/client'
21
22
  require 'yammer/api_handler'
22
23
  require 'yammer/api_response'
@@ -0,0 +1,122 @@
1
+ # Copyright (c) Microsoft Corporation
2
+ # All rights reserved.
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ #
7
+ # THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR
8
+ # CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
9
+ # WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE,
10
+ # FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
11
+
12
+ # See the Apache Version 2.0 License for specific language governing
13
+ # permissions and limitations under the License.
14
+
15
+ require 'oauth2'
16
+
17
+ module Yammer
18
+ class OAuth2Client < OAuth2::Client
19
+
20
+ SITE_URL = 'https://www.yammer.com'
21
+ TOKEN_PATH = '/oauth2/token'
22
+ AUTHORIZE_PATH = '/dialog/oauth'
23
+
24
+ def initialize(client_id, client_secret, opts={})
25
+ site_url = opts.delete(:site_url) || SITE_URL
26
+ opts[:token_path] ||= TOKEN_PATH
27
+ opts[:authorize_path] ||= AUTHORIZE_PATH
28
+ super(site_url, client_id, client_secret, opts)
29
+ yield self if block_given?
30
+ self
31
+ end
32
+
33
+ # Generates the Yammer URL that the user will be redirected to in order to
34
+ # authorize your application
35
+ #
36
+ # @see https://developer.yammer.com/api/oauth2.html#client-side
37
+ #
38
+ # @opts [Hash] additional parameters to be include in URL eg. scope, state, etc
39
+ #
40
+ # client = YammerClient.new(config)
41
+ # client.clientside_authorization_url({
42
+ # :redirect_uri => 'https://localhost/oauth/cb',
43
+ # })
44
+ # >> https://www.yammer.com/dialog/oauth/?client_id={client_id}&
45
+ # redirect_uri=http%3A%2F%2Flocalhost%2Foauth%2Fcb&response_type=token
46
+ #
47
+ def webclient_authorization_url(opts={})
48
+ implicit.token_url(opts)
49
+ end
50
+
51
+ # Generates the Yammer URL that the user will be redirected to in order to
52
+ # authorize your application
53
+ #
54
+ # @see https://developer.yammer.com/api/oauth2.html#server-side
55
+ #
56
+ # @opts [Hash] additional parameters to be include in URL eg. scope, state, etc
57
+ #
58
+ # >> client = YammerClient.new(config)
59
+ # >> client.webserver_authorization_url({
60
+ # :redirect_uri => 'https://localhost/oauth/cb',
61
+ # })
62
+ # >> https://www.yammer.com/dialog/oauth/?client_id={client_id}&
63
+ # redirect_uri=http%3A%2F%2Flocalhost%2Foauth%2Fcb&response_type=code
64
+ #
65
+ def webserver_authorization_url(opts={})
66
+ opts[:scope] = normalize_scope(opts[:scope]) if opts[:scope]
67
+ authorization_code.authorization_url(opts)
68
+ end
69
+
70
+ # Makes a request to Yammer server that will swap your authorization code for an access
71
+ # token
72
+ #
73
+ # @see https://developer.yammer.com/api/oauth2.html#server-side
74
+ #
75
+ # @opts [Hash] may include redirect uri and other query parameters
76
+ #
77
+ # >> client = YammerClient.new(config)
78
+ # >> client.exchange_auth_code_for_token({
79
+ # :redirect_uri => 'https://localhost:3000/oauth/v2/callback',
80
+ # :code => 'G3Y6jU3a',
81
+ # })
82
+ #
83
+ # POST /oauth2/access_token HTTP/1.1
84
+ # Host: www.yammer.com
85
+ # Content-Type: application/x-www-form-urlencoded
86
+
87
+ # client_id={client_id}&code=G3Y6jU3a&grant_type=authorization_code&
88
+ # redirect_uri=http%3A%2F%2Flocalhost%2Foauth%2Fcb&client_secret={client_secret}
89
+ def access_token_from_authorization_code(code, opts={})
90
+ opts[:authenticate] ||= :body
91
+ authorization_code.get_token(code, opts)
92
+ end
93
+
94
+ # Makes a request to Yammer server that will swap client credential for an access token
95
+ #
96
+ # @opts [Hash] parameters that will be added to URL query string
97
+ #
98
+ # POST /oauth2/access_token HTTP/1.1
99
+ # Host: www.yammer.com
100
+ # Content-Type: application/x-www-form-urlencoded
101
+ #
102
+ # client_id={client_id}&client_secret={client_secret}
103
+ def access_token_from_client_credentials(opts={})
104
+ opts[:authenticate] ||= :body
105
+ client_credentials.get_token(opts)
106
+ end
107
+
108
+ # Makes a request to Yammer server that will swap resource owner credentials for an access token
109
+ #
110
+ # @opts [Hash] parameters that will be added to URL query string
111
+ #
112
+ # POST /oauth2/access_token HTTP/1.1
113
+ # Host: www.yammer.com
114
+ # Content-Type: application/x-www-form-urlencoded
115
+ #
116
+ # client_id={client_id}&client_secret={client_secret}&username={username}&password={passwort}
117
+ def access_token_from_resource_owner_credentials(username, password, opts={})
118
+ opts[:authenticate] ||= :body
119
+ self.password.get_token(username, password, opts)
120
+ end
121
+ end
122
+ end
@@ -15,8 +15,8 @@
15
15
  module Yammer
16
16
  class Version
17
17
  MAJOR = 2 unless defined? Yammer::MAJOR
18
- MINOR = 0 unless defined? Yammer::MINOR
19
- PATCH = 2 unless defined? Yammer::PATCH
18
+ MINOR = 1 unless defined? Yammer::MINOR
19
+ PATCH = 0 unless defined? Yammer::PATCH
20
20
  PRE = nil unless defined? Yammer::PRE
21
21
 
22
22
  class << self
@@ -0,0 +1,123 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ # Copyright (c) Microsoft Corporation
4
+ # All rights reserved.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
13
+ # ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY
14
+ # IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR
15
+ # PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
16
+ #
17
+ # See the Apache Version 2.0 License for specific language governing
18
+ # permissions and limitations under the License.
19
+
20
+ require File.expand_path('../spec_helper', __FILE__)
21
+
22
+ describe Yammer::OAuth2Client do
23
+
24
+ subject do
25
+ Yammer::OAuth2Client.new('PRbTcg9qjgKsp4jjpm1pw', 'a2nQpcUm2Dgq1chWdAvbXGTk', {
26
+ :connection_options => {
27
+ :headers => {
28
+ 'User-Agent' => "Yammer OAuth2 Client #{Yammer::Version}",
29
+ "Accept" => "application/json"
30
+ }
31
+ }
32
+ })
33
+ end
34
+
35
+ describe "#webserver_authorization_url" do
36
+ it "returns the authorization url" do
37
+ params = {
38
+ "client_id" => "PRbTcg9qjgKsp4jjpm1pw",
39
+ "redirect_uri" => "https://localhost/callback",
40
+ "response_type" =>"code",
41
+ "state" => "12345"
42
+ }
43
+
44
+ auth_url = subject.webserver_authorization_url(
45
+ :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
46
+ :state => '12345',
47
+ :redirect_uri => 'https://localhost/callback'
48
+ )
49
+
50
+ parsed_url = Addressable::URI.parse(auth_url)
51
+ expect(parsed_url.path).to eq '/dialog/oauth'
52
+ expect(parsed_url.query_values).to eq params
53
+ expect(parsed_url.scheme).to eq 'https'
54
+ expect(parsed_url.host).to eq 'www.yammer.com'
55
+ end
56
+ end
57
+
58
+ describe "#access_token_from_authorization_code" do
59
+ it "makes a POST request to exchange authorization code for access token" do
60
+
61
+ stub_request(:post, "https://www.yammer.com/oauth2/token").with(
62
+ :body => {
63
+ :grant_type => 'authorization_code',
64
+ :code => 'MmOGL795LbIZuJJVnL49Cc',
65
+ :redirect_uri => 'https://localhost',
66
+ :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
67
+ :client_secret => 'a2nQpcUm2Dgq1chWdAvbXGTk'
68
+ },
69
+ :headers => {
70
+ 'Accept' =>'application/json',
71
+ 'Content-Type' =>'application/x-www-form-urlencoded',
72
+ 'User-Agent' =>"Yammer OAuth2 Client #{Yammer::Version}"
73
+ })
74
+
75
+ subject.access_token_from_authorization_code(
76
+ 'MmOGL795LbIZuJJVnL49Cc',
77
+ :params => {
78
+ :redirect_uri => 'https://localhost'
79
+ }
80
+ )
81
+ end
82
+ end
83
+
84
+ describe "#access_token_from_client_credentials" do
85
+ it "makes a POST request to exchange client credentiaks for access token" do
86
+
87
+ stub_request(:post, "https://www.yammer.com/oauth2/token").with(
88
+ :body => {
89
+ :grant_type => 'client_credentials',
90
+ :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
91
+ :client_secret => 'a2nQpcUm2Dgq1chWdAvbXGTk'
92
+ },
93
+ :headers => {
94
+ 'Accept' =>'application/json',
95
+ 'Content-Type' =>'application/x-www-form-urlencoded',
96
+ 'User-Agent' =>"Yammer OAuth2 Client #{Yammer::Version}"
97
+ })
98
+
99
+ subject.access_token_from_client_credentials
100
+ end
101
+ end
102
+
103
+ describe "#access_token_from_resource_owner_credentials" do
104
+ it "makes a POST request to exchange client credentiaks for access token" do
105
+
106
+ stub_request(:post, "https://www.yammer.com/oauth2/token").with(
107
+ :body => {
108
+ :grant_type => 'password',
109
+ :username => 'thekev',
110
+ :password => 'h4x0r',
111
+ :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
112
+ :client_secret => 'a2nQpcUm2Dgq1chWdAvbXGTk'
113
+ },
114
+ :headers => {
115
+ 'Accept' =>'application/json',
116
+ 'Content-Type' =>'application/x-www-form-urlencoded',
117
+ 'User-Agent' =>"Yammer OAuth2 Client #{Yammer::Version}"
118
+ })
119
+
120
+ subject.access_token_from_resource_owner_credentials('thekev', 'h4x0r')
121
+ end
122
+ end
123
+ end
data/spec/spec_helper.rb CHANGED
@@ -70,4 +70,4 @@ end
70
70
 
71
71
  def upload(file)
72
72
  File.new("#{mock_path}/#{file}")
73
- end
73
+ end
data/yam.gemspec CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |s|
25
25
  s.name = 'yam'
26
26
  s.version = Yammer::Version
27
27
 
28
- s.date = %q{2013-12-12}
28
+ s.date = %q{2013-12-16}
29
29
  s.summary = "Yammer API Client"
30
30
 
31
31
  s.description = "A Ruby wrapper for accessing Yammer's REST API"
@@ -43,7 +43,7 @@ Gem::Specification.new do |s|
43
43
  s.signing_key = File.expand_path("~/.gem/certs/private_key.pem") if $0 =~ /gem\z/
44
44
 
45
45
  s.add_dependency 'oj', '~> 2.0.10'
46
- s.add_dependency 'multi_json', '~> 1.3'
46
+ s.add_dependency 'multi_json', '~> 1.8.2'
47
47
  s.add_dependency 'rest-client', '~> 1.6.7'
48
48
  s.add_dependency 'addressable', '~> 2.3.3'
49
49
  s.add_dependency 'oauth2-client', '~> 1.1.2'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yam
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Mutyaba
@@ -29,7 +29,7 @@ cert_chain:
29
29
  B+kZ9/4dAvmKkr2NPSoxBQtO7Rz0HDNLtjMxkXbQUWMDsGnB6Kk1WUBb/w3kQ9Ah
30
30
  JgIHF4cG
31
31
  -----END CERTIFICATE-----
32
- date: 2013-12-12 00:00:00.000000000 Z
32
+ date: 2013-12-16 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: oj
@@ -51,14 +51,14 @@ dependencies:
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: '1.3'
54
+ version: 1.8.2
55
55
  type: :runtime
56
56
  prerelease: false
57
57
  version_requirements: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: '1.3'
61
+ version: 1.8.2
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: rest-client
64
64
  requirement: !ruby/object:Gem::Requirement
@@ -183,6 +183,7 @@ files:
183
183
  - AUTHORS
184
184
  - CHANGELOG.md
185
185
  - CONTRIBUTING.md
186
+ - CONTRIBUTORS
186
187
  - Gemfile
187
188
  - LICENSE.txt
188
189
  - README.md
@@ -212,6 +213,7 @@ files:
212
213
  - lib/yammer/configurable.rb
213
214
  - lib/yammer/error.rb
214
215
  - lib/yammer/http_adapter.rb
216
+ - lib/yammer/oauth2_client.rb
215
217
  - lib/yammer/resources.rb
216
218
  - lib/yammer/resources/base.rb
217
219
  - lib/yammer/resources/group.rb
@@ -253,6 +255,7 @@ files:
253
255
  - spec/fixtures/users_following.json
254
256
  - spec/http_adapter_spec.rb
255
257
  - spec/mocks/attachment.txt
258
+ - spec/oauth2_client_spec.rb
256
259
  - spec/resources/base_spec.rb
257
260
  - spec/resources/group_membership_spec.rb
258
261
  - spec/resources/group_spec.rb
@@ -317,6 +320,7 @@ test_files:
317
320
  - spec/fixtures/users_following.json
318
321
  - spec/http_adapter_spec.rb
319
322
  - spec/mocks/attachment.txt
323
+ - spec/oauth2_client_spec.rb
320
324
  - spec/resources/base_spec.rb
321
325
  - spec/resources/group_membership_spec.rb
322
326
  - spec/resources/group_spec.rb
metadata.gz.sig CHANGED
Binary file