opro 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,7 @@
1
+ ## 0.3.3
2
+
3
+ - [#8] Fix Doc urls (@robe5)
4
+
1
5
  ## 0.3.2
2
6
 
3
7
  - Attempt to find user based on params[:username] from client in devise default find_user_for_auth
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.2
1
+ 0.3.3
@@ -8,9 +8,11 @@ class Opro::Oauth::DocsController < OproController
8
8
  helper_method :render_doc
9
9
 
10
10
  def index
11
+ @protocol = protocol
11
12
  end
12
13
 
13
14
  def show
15
+ @protocol = protocol
14
16
  @doc = params[:id]
15
17
  end
16
18
 
@@ -23,6 +25,10 @@ class Opro::Oauth::DocsController < OproController
23
25
 
24
26
  private
25
27
 
28
+ def protocol
29
+ Rails.env.production? ? "https" : "http"
30
+ end
31
+
26
32
  def parse_erb(str)
27
33
  ERB.new(str).result(binding)
28
34
  end
@@ -1,6 +1,6 @@
1
1
  # Curl
2
2
 
3
- [Curl](http://curl.haxx.se/) is a command line tool for transfering data with a url syntax. Most systems should have curl installed. Open up terminal on OS X or command prompt on windows and type in `curl`. There are parts of the OAuth process that were not intended for direct human interaction such as exchanging the code from the Provider for an access_token. Because of this, it can be easier to use `curl` to talk to a server directly instead of using a web browser.
3
+ [Curl](http://curl.haxx.se/) is a command line tool for transferring data with a url syntax. Most systems should have curl installed. Open up terminal on OS X or command prompt on windows and type in `curl`. There are parts of the OAuth process that were not intended for direct human interaction such as exchanging the code from the Provider for an access_token. Because of this, it can be easier to use `curl` to talk to a server directly instead of using a web browser.
4
4
 
5
5
  ## What is it good for?
6
6
 
@@ -39,17 +39,13 @@ You can ask for the headers of a request by adding the `-I` flag to a curl comma
39
39
 
40
40
  You can set a request header by using `-H` for example if you wanted to send an access_token in a header you could issue this request (assuming your access token is '9693accessTokena7ca570bbaf')
41
41
 
42
- $ curl -H "Authorization: token 9693accessTokena7ca570bbaf" "http://localhost:3000/oauth_test/show_me_the_money"
42
+ $ curl -H "Authorization: token 9693accessTokena7ca570bbaf" "<%= oauth_test_url(:show_me_the_money, :protocol => @protocol)%>"
43
43
 
44
44
 
45
45
  ### HTTP Verb
46
46
 
47
- You can specify the type of request you make in curl (GET, POST, PUT, DELETE, etc.) by specifying `-X`. For example if you wanted to POST to the /products url at localhost:3000/products you could do so like this:
48
-
49
- $ curl -X POST http://localhost:3000
50
-
51
-
52
-
47
+ You can specify the type of request you make in curl (GET, POST, PUT, DELETE, etc.) by using `-X`. For example if you wanted to POST to the /products url at localhost:3000/products you could do so like this:
53
48
 
49
+ $ curl -X POST <%= root_url %>
54
50
 
55
51
 
@@ -1,9 +1,9 @@
1
- ## Opro Oauth
1
+ ## OAuth 2
2
2
 
3
3
  OAuth comes in a few different flavors, the implementation of OAuth comes from [Version 22 of the OAuth 2.0 protocol](http://tools.ietf.org/html/draft-ietf-oauth-v2-22) and is heavily influenced by [Facebook's Server Side OAuth Authentication](http://developers.facebook.com/docs/authentication/server-side/) and [Github's API](http://developer.github.com/v3/oauth/).
4
4
 
5
5
 
6
- ## What is It?
6
+ ## What is OAuth?
7
7
 
8
8
  OAuth is a secure way to grant authorization without having to transfer passwords to third parties. If you've used an iPhone or Android app to access Twitter or Facebook you've likely used OAuth.
9
9
 
@@ -24,7 +24,7 @@ Client and server side web applications can use this type of authorization to ad
24
24
 
25
25
  ## Alternatives
26
26
 
27
- OAuth is simple in concept, but can be tricky to implement right. Many services also support basic auth. With basic auth you send a user's username and password along with every request. While this is fairly simple it means that the client application has access to your password, which is not very secure.
27
+ OAuth is simple in concept, but can be tricky to implement right. Many services also support basic auth. With basic auth you send a user's username and password along with every request. While this is fairly simple it means that the client application store your password, which is not very secure.
28
28
 
29
29
 
30
30
  ## Clients
@@ -5,22 +5,29 @@
5
5
 
6
6
  If you're building a mobile (iPhone, Android, etc.) app it can be easier to exchange a user's password and email/username for an access token then to send your user throught the traditional OAuth flow.
7
7
 
8
- ## Get Started
9
8
 
10
- First obtain a client app id and secret, if you don't have them see the [Quick Start Guide](/oauth_docs/quick_start) and return here. For this example we will use this data:
9
+ ## Step 1: Register your Application
11
10
 
12
- Name: foo
13
- client id: 3234myClientId5678
14
- Secret: 14321myClientSecret8765
11
+ Sign in as a registered user then visit the [new client application page](/oauth_client_apps/new). Enter in the name of your application for this example we can use `foo`, you can change this later if you desire. Hit enter and you should see a screen that has your application name along with a `client id` and a `secret`, these behave like a username and password for your OAuth application.
15
12
 
16
- Note you will need to replace the client id and secret with your actual client id and secret.
13
+
14
+ Name: foo
15
+ client id: 3234myClientId5678
16
+ client Secret: 14321myClientSecret8765
17
+
18
+
19
+ Once you've registered an app successfully we can start to build an OAuth application. Don't continue until you've [registered a client app](/oauth_client_apps/new).
20
+
21
+ **Note:** Replace the client id and secret with your actual client id and secret.
17
22
 
18
23
  Once you have your id and secret, you can ask the user of your application to provide you with their username and password. For the purposes of this we will be using the example email address of `foo@example.com` and password of `p4ssw0rd`.
19
24
 
20
- Once you have the email/username and password of your user on the mobile device, you can then send all of this information to the server with your client id & secret. Don't forget to url encode any special characters like `@`, and always transmit this sensitive data using secure https:
25
+ **Note:** Replace the email and password with a real user's credentials.
26
+
21
27
 
28
+ Once you have the email/username and password of a user, you can exchange this information for a token by sending the server your client\_id & client\_secret along with username and password. Don't forget to url encode any special characters like `@`, and always transmit this sensitive data using a secure protocol (such as https):
22
29
 
23
- <%= "#{request.base_url.gsub('http://', 'https://')}/oauth/token?" %>email=foo%40example.com&password=p4ssw0rd&client_id=3234myClientId5678&client_secret=14321myClientSecret8765
30
+ <%= oauth_token_url(:protocol => @protocol, :email => "foo@example.com", :password => "p4ssw0rd", :client_id => "3234myClientId5678", :client_secret => "14321myClientSecret8765" ) %>
24
31
 
25
32
  The response should be json with an access_token:
26
33
 
@@ -3,24 +3,26 @@
3
3
 
4
4
  # Permissions
5
5
 
6
- Permissions give the user a way to control the scope of access that a client application has to their data. This is similar to how Facebook will ask users what actions an app can take on their part.
6
+ Permissions give the user a way to control the scope of access that a client application has to their data. This is similar to how Facebook will ask users what actions an application can take on their behalf.
7
7
 
8
8
 
9
9
  <% if ::Opro.request_permissions.present? && ::Opro.request_permissions.map(&:to_s).include?("write") %>
10
10
 
11
11
  ## Write Access
12
12
 
13
- To perform any type of request other than a GET ([HTTP Request methods](http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods)), your application must have `write` access to the user. You can specify this scope (see Request Scope below) or by default all permissions will be requested.
13
+ To perform any type of request other than a [GET](http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods) request, your application must have `write` access from the user. Your application can request this permission with `scope` (see Request Scope below). By default all permissions will be requested.
14
14
 
15
15
  <% end %>
16
16
 
17
17
  ## Request Scope
18
18
 
19
- As a client app you can request specific scopes while you are authing a user, if no scope is specified all permissions will be requested.
19
+ As a client application you can request specific scopes while you are authorizing a user, if no scope is specified all permissions will be requested. This is an example of an application with client id of `3234myClientId5678` specifying that they want `write` access for their app:
20
20
 
21
- <%= "#{request.base_url}/oauth/authorize?" %>scope[]=write&#... %>
22
21
 
23
- While authorizing your app a user can choose to accept or deny individual permissions.
22
+ <%= oauth_authorize_url(:client_id => "3234myClientId5678", :protocol => @protocol) + "&scope[]=write" %>
23
+
24
+
25
+ While authorizing your application a user can choose to grant or reject individual permissions.
24
26
 
25
27
 
26
28
  ## Available Permissions/Scopes
@@ -1,11 +1,21 @@
1
1
  ## Quick Start Guide
2
2
 
3
- This site is providing OAuth through [Opro](http://github.com/schneems/opro). If this is your first time using Oauth, please visit [What is Oauth](<%= oauth_doc_path(:oauth) %>) or follow along with this guide.
3
+ This site is providing OAuth 2 through [Opro](http://github.com/schneems/opro). If this is your first time using OAuth, please visit [What is OAuth](<%= oauth_doc_path(:oauth) %>) or follow along with this guide.
4
+
5
+ <% if ::Opro.password_exchange_enabled? %>
6
+
7
+ ## Password Exchange
8
+
9
+ If you are building a client application and have direct access to a user's credentials including password, you can exchange them for a token. For more information see [password exchange docs](<%= oauth_doc_path(:password_exchange) %>).
10
+
11
+ <% end %>
12
+
13
+ # OAuth 2 Flow
4
14
 
5
15
 
6
16
  ## Step 1: Register your Application
7
17
 
8
- Sign in as a registered user then visit the [new client application page](/oauth_client_applications/new). Enter in the name of your application for this example we can use `foo`, you can change this later if you desire. Hit enter and you should see a screen that has your application name along with a `client id` and a `secret`, these behave like a username and password for your OAuth application.
18
+ Sign in as a registered user then visit the [new client application page](/oauth_client_apps/new). Enter in the name of your application for this example we can use `foo`, you can change this later if you desire. Hit enter and you should see a screen that has your application name along with a `client id` and a `secret`, these behave like a username and password for your OAuth application.
9
19
 
10
20
 
11
21
  Name: foo
@@ -13,14 +23,15 @@ Sign in as a registered user then visit the [new client application page](/oauth
13
23
  Secret: 14321myClientSecret8765
14
24
 
15
25
 
16
- Once you've registered an app successfully we can start to build an OAuth application
26
+ Once you've registered an app successfully we can start to build an OAuth application. Don't continue until you've [registered a client app](/oauth_client_apps/new).
17
27
 
18
28
 
19
29
  ## Step 2: As a User Grant access to your App
20
30
 
21
- Now that you have a client id, you'll want to give it access to a user account. Open a new browser window with your currently logged in account, then give your application permission by visiting the url below (please swap out '3234myClientId5678' for your client id)
31
+ Now that you have a client application, you'll want to give it access to a user account. Open a new browser window with your currently logged in account, then give your application permission by visiting the url below (swap out '3234myClientId5678' for your client id and '14321myClientSecret8765' for your client secret)
32
+
33
+ <%= oauth_authorize_url(:protocol => @protocol, :redirect_uri => "/", :client_id => "3234myClientId5678", :client_secret => "14321myClientSecret8765" ) %>
22
34
 
23
- <%= "#{request.base_url}/oauth/authorize?" %>client_id=3234myClientId5678&redirect_uri=%2F
24
35
 
25
36
  This should land you on a page asking if you would like to grant permission to the application. If not, make sure you're logged in and you put the correct client id in the url.
26
37
 
@@ -28,44 +39,49 @@ Once you grant your application permission, you will be redirected back to the u
28
39
 
29
40
  Once redirected to the home page, take a look in the address bar, we should see a `code` parameter. Copy this for use later:
30
41
 
31
- <%= "#{request.base_url}" %>?code=4857goldfish827423
42
+ <%= root_url(:protocol => @protocol) + "?code=4857goldfish827423" %>
32
43
 
33
44
  In the url above the `code` would be `4857goldfish827423`. This code can be used to obtain an access token for the user. Once you have a user's access token, you can perform actions for the user as if they were logged in. If you accidentally close this page, don't worry just visit first url and we'll show you the code again.
34
45
 
35
46
 
36
- ## Step 3: Get AccessToken for User with Curl
47
+ ## Step 3: Get an Access Token for a User with Curl
37
48
 
38
49
  We'll be using [Curl](<%= oauth_doc_path(:curl) %>) to go through the process of getting an access for our first user, you'll likely use http client libraries in your actual applications, but most systems come with curl and it is a fairly easy way to get started. If you've never used it before read our [curl documentation](<%= oauth_doc_path(:curl) %>)
39
50
 
40
51
  (Note in all code examples the $ character indicates we are on the command line, it does not need to be coppied)
41
52
 
53
+ You'll want to make sure to replace `client_id`, `client_secret`, and `code` with your values.
42
54
 
43
- $ curl '<%= "#{request.base_url}/oauth/token?" %>?client_id=3234myClientId5678&client_secret=14321myClientSecret8765&code=4857goldfish827423'
44
55
 
45
- You'll want to make sure to replace `client_id`, `client_secret`, and `code` with your values.
56
+ $ curl '<%= oauth_token_url(:protocol => @protocol,
57
+ :client_id => "3234myClientId5678",
58
+ :client_secret => "14321myClientSecret8765",
59
+ :code => "4857goldfish827423") %>'
60
+
46
61
 
47
62
  You should get back a response that looks like this
48
63
 
49
64
  $ {"access_token":"9693accessTokena7ca570bbaf","refresh_token":"3a3c129ad02b573de78e65af06c293f1","expires_in":null}
50
65
 
51
66
 
52
- If not, double check the previous steps and ensure you are using the correct values in the query. Copy the `access_token` we'll use it for the rest of our application, in this example it is `9693accessTokena7ca570bbaf`. Treat this access_token as if it were the user's password. It is sensitive information.
67
+ If not, double check the previous steps and ensure you are using the correct values in the query. Once you get a successful response, copy the `access_token` for use later, in this example it is `9693accessTokena7ca570bbaf`. Treat this access_token as if it were the user's password. It is sensitive information.
53
68
 
54
69
 
55
70
  ## Step 4: Use the access token
56
71
 
57
- Now we've gone through all the hard work of getting this token, you can use it to make authenticated requests to the server. You'll just need to include the correct `access_token` parameter in your query and you'll be logged in as that user for that request.
72
+ Now we've gone through all the hard work of getting an access token, you can use it to make authenticated requests to the server. You'll need to include the correct `access_token` parameter in your query and you'll be logged in as that user for that request.
73
+
74
+ Try it out for yourself, replace the access token below with the one you received, then you can run this curl command:
58
75
 
59
- Try it out for yourself open up a browser and go to
76
+ $ curl "<%= oauth_tests_url(:show_me_the_money, :access_token => '9693accessTokena7ca570bbaf') %>"
60
77
 
61
- <%= "#{request.base_url}/oauth_test/show_me_the_money?access_token=9693accessTokena7ca570bbaf" %>
62
78
 
63
79
 
64
- You should see a successful result ( again don't forget to replace the example access token with yours ). Not all urls will support OAuth authentication.
80
+ You should see a successful result ( again don't forget to replace the example access token with yours ). Note that all urls will support OAuth authentication.
65
81
 
66
82
  You can also use a header to pass the oauth token
67
83
 
68
- <%= %Q{ curl -H "Authorization: token 9693accessTokena7ca570bbaf" "#{request.base_url}/oauth_test/show_me_the_money" } %>
84
+ $ curl -H "Authorization: token 9693accessTokena7ca570bbaf" "<%= oauth_tests_url(:show_me_the_money) %>"
69
85
 
70
86
 
71
87
  ## Security
@@ -9,7 +9,11 @@ Refresh tokens can be used to refresh an expiring `access_token`. When you recei
9
9
  If a token has expired or you simply wish to receive a new `access_token` you can send your `refresh_token` along with your `app_id` and `app_secret` to `/oauth/token` and your access_token will be refreshed.
10
10
 
11
11
 
12
- $ curl '<%= "#{request.base_url}/oauth/token?" %>?client_id=3234myClientId5678&client_secret=14321myClientSecret8765&refresh_token=4857goldfish827423'
12
+
13
+ $ curl '<%= oauth_token_url(:protocol => @protocol,
14
+ :client_id => "3234myClientId5678",
15
+ :client_secret => "14321myClientSecret8765",
16
+ :refresh_token => "4857goldfish827423") %>'
13
17
 
14
18
  You'll want to make sure to replace `client_id`, `client_secret`, and `refresh_token` with your values.
15
19
 
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "opro"
8
- s.version = "0.3.2"
8
+ s.version = "0.3.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["schneems"]
12
- s.date = "2012-07-30"
12
+ s.date = "2012-08-01"
13
13
  s.description = " Enable OAuth clients (iphone, android, web sites, etc.) to access and use your Rails application, what you do with it is up to you"
14
14
  s.email = "richard.schneeman@gmail.com"
15
15
  s.extra_rdoc_files = [
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-30 00:00:00.000000000Z
12
+ date: 2012-08-01 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &70102804767380 !ruby/object:Gem::Requirement
16
+ requirement: &70221194337460 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.1.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70102804767380
24
+ version_requirements: *70221194337460
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rails
27
- requirement: &70102804769580 !ruby/object:Gem::Requirement
27
+ requirement: &70221194339080 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 3.1.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70102804769580
35
+ version_requirements: *70221194339080
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bluecloth
38
- requirement: &70102804771760 !ruby/object:Gem::Requirement
38
+ requirement: &70221194340700 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70102804771760
46
+ version_requirements: *70221194340700
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: mocha
49
- requirement: &70102804773620 !ruby/object:Gem::Requirement
49
+ requirement: &70221194342280 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70102804773620
57
+ version_requirements: *70221194342280
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: timecop
60
- requirement: &70102804781920 !ruby/object:Gem::Requirement
60
+ requirement: &70221194351740 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70102804781920
68
+ version_requirements: *70221194351740
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: jeweler
71
- requirement: &70102804789160 !ruby/object:Gem::Requirement
71
+ requirement: &70221194350540 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 1.6.4
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70102804789160
79
+ version_requirements: *70221194350540
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: bundler
82
- requirement: &70102804788560 !ruby/object:Gem::Requirement
82
+ requirement: &70221194349660 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 1.1.3
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70102804788560
90
+ version_requirements: *70221194349660
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: capybara
93
- requirement: &70102804787900 !ruby/object:Gem::Requirement
93
+ requirement: &70221194348900 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: 0.4.0
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70102804787900
101
+ version_requirements: *70221194348900
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: sqlite3
104
- requirement: &70102804787420 !ruby/object:Gem::Requirement
104
+ requirement: &70221194348160 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *70102804787420
112
+ version_requirements: *70221194348160
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: launchy
115
- requirement: &70102804786900 !ruby/object:Gem::Requirement
115
+ requirement: &70221194347460 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *70102804786900
123
+ version_requirements: *70221194347460
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: devise
126
- requirement: &70102804786420 !ruby/object:Gem::Requirement
126
+ requirement: &70221194346840 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ! '>='
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *70102804786420
134
+ version_requirements: *70221194346840
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: rcov
137
- requirement: &70102804785940 !ruby/object:Gem::Requirement
137
+ requirement: &70221194346340 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ! '>='
@@ -142,10 +142,10 @@ dependencies:
142
142
  version: '0'
143
143
  type: :development
144
144
  prerelease: false
145
- version_requirements: *70102804785940
145
+ version_requirements: *70221194346340
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: simplecov
148
- requirement: &70102804785460 !ruby/object:Gem::Requirement
148
+ requirement: &70221194345800 !ruby/object:Gem::Requirement
149
149
  none: false
150
150
  requirements:
151
151
  - - ! '>='
@@ -153,7 +153,7 @@ dependencies:
153
153
  version: '0'
154
154
  type: :development
155
155
  prerelease: false
156
- version_requirements: *70102804785460
156
+ version_requirements: *70221194345800
157
157
  description: ! ' Enable OAuth clients (iphone, android, web sites, etc.) to access
158
158
  and use your Rails application, what you do with it is up to you'
159
159
  email: richard.schneeman@gmail.com
@@ -280,7 +280,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
280
280
  version: '0'
281
281
  segments:
282
282
  - 0
283
- hash: 2934563165059774319
283
+ hash: 2666856507921880303
284
284
  required_rubygems_version: !ruby/object:Gem::Requirement
285
285
  none: false
286
286
  requirements: