opro 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +4 -0
- data/VERSION +1 -1
- data/app/controllers/opro/oauth/docs_controller.rb +6 -0
- data/app/views/opro/oauth/docs/markdown/curl.md.erb +4 -8
- data/app/views/opro/oauth/docs/markdown/oauth.md.erb +3 -3
- data/app/views/opro/oauth/docs/markdown/password_exchange.md.erb +15 -8
- data/app/views/opro/oauth/docs/markdown/permissions.md.erb +7 -5
- data/app/views/opro/oauth/docs/markdown/quick_start.md.erb +31 -15
- data/app/views/opro/oauth/docs/markdown/refresh_tokens.md.erb +5 -1
- data/opro.gemspec +2 -2
- metadata +29 -29
data/CHANGELOG.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
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
|
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" "
|
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
|
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
|
-
##
|
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
|
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
|
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
|
-
|
9
|
+
## Step 1: Register your Application
|
11
10
|
|
12
|
-
|
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
|
-
|
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
|
-
|
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
|
-
<%=
|
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
|
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
|
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
|
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
|
-
|
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
|
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](/
|
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
|
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
|
-
<%= "
|
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
|
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
|
-
|
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.
|
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
|
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
|
-
|
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 ).
|
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
|
-
|
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
|
-
|
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
|
|
data/opro.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "opro"
|
8
|
-
s.version = "0.3.
|
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-
|
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.
|
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-
|
12
|
+
date: 2012-08-01 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
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: *
|
24
|
+
version_requirements: *70221194337460
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rails
|
27
|
-
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: *
|
35
|
+
version_requirements: *70221194339080
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: bluecloth
|
38
|
-
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: *
|
46
|
+
version_requirements: *70221194340700
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: mocha
|
49
|
-
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: *
|
57
|
+
version_requirements: *70221194342280
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: timecop
|
60
|
-
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: *
|
68
|
+
version_requirements: *70221194351740
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: jeweler
|
71
|
-
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: *
|
79
|
+
version_requirements: *70221194350540
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: bundler
|
82
|
-
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: *
|
90
|
+
version_requirements: *70221194349660
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: capybara
|
93
|
-
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: *
|
101
|
+
version_requirements: *70221194348900
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: sqlite3
|
104
|
-
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: *
|
112
|
+
version_requirements: *70221194348160
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: launchy
|
115
|
-
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: *
|
123
|
+
version_requirements: *70221194347460
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: devise
|
126
|
-
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: *
|
134
|
+
version_requirements: *70221194346840
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: rcov
|
137
|
-
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: *
|
145
|
+
version_requirements: *70221194346340
|
146
146
|
- !ruby/object:Gem::Dependency
|
147
147
|
name: simplecov
|
148
|
-
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: *
|
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:
|
283
|
+
hash: 2666856507921880303
|
284
284
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
285
285
|
none: false
|
286
286
|
requirements:
|