opro 0.0.1.pre → 0.0.1.pre1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +34 -17
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/app/controllers/oauth/tests_controller.rb +53 -0
- data/app/views/oauth/client_application/new.html.erb +1 -1
- data/app/views/oauth/docs/markdown/oauth.md.erb +3 -1
- data/app/views/oauth/docs/markdown/quick_start.md.erb +8 -7
- data/app/views/oauth/tests/index.html.erb +31 -0
- data/config/routes.rb +1 -0
- data/lib/opro/controllers/application_controller_helper.rb +26 -2
- data/opro.gemspec +4 -2
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/integration/oauth_test.rb +4 -0
- metadata +27 -25
data/README.md
CHANGED
@@ -1,27 +1,17 @@
|
|
1
1
|
## Stop, Read This
|
2
2
|
|
3
|
-
|
3
|
+
If you want to use this, do so at your own risk. I'm vetting it on some development and production applications, when it is ready for consumption and contribution, I'll remove this. If you want to be notified when that happens let me know [@schneems](http://twitter.com/schneems). For now this should be considered a toy, and enjoyed as such :)
|
4
4
|
|
5
5
|
## Opro
|
6
6
|
|
7
7
|
A Rails Engine that turns your app into an [Oauth](http://oauth.net/2/) Provider.
|
8
8
|
|
9
|
-
|
10
|
-
## What is an Oauth Provider
|
11
|
-
|
12
|
-
Oauth is used all over the web by apps that need to authenticate users or restrict access to information in a secure fashion. Twitter and Facebook are the best known Oauth Providers. Users click "connect to Twitter" in an iPhone app, then they're sent over to Twitter's site where they can accept or deny access. From there they're sent back to the iPhone app where they can do anything through the API that they would be allowed to do in the website.
|
13
|
-
|
14
|
-
Most users understand the flow pretty well, it's a fairly standard process, and is secure. While there are plenty of Oauth client libraries unfortunately it's not super easy to implement from a provider standpoint. Since I hate writing code twice, I decided to take an Oauth Provider and turn it into a Rails Engine so anyone could implement an Oauth Provider on their site.
|
15
|
-
|
16
9
|
## Why would I use this?
|
17
10
|
|
18
11
|
Lets say you've built a Rails app, awesome. Now you want to build a mobile app on say, the iPhone; cool. You start throwing around `#to_json` like nobody's business, but then you realize you need to authenticate users somehow. "Basic Auth!!", you exclaim, but then you realize that's not the most secure solution. You also realize that some users already signed up with Facebook & Twitter so they don't have a username/password combo. What ever shall you do?
|
19
12
|
|
20
13
|
Wouldn't it be great if we could have a token exchange where the user goes to a mobile web view and grants permission, and then we return back an auth token just like the big boys (Facebook, Twitter, *cough* Foursquare *cough*). With Opro, we can add this functionality pretty easily. We'll use your existing authentication strategy and provide some end integration points for your clients to use out of the box.
|
21
14
|
|
22
|
-
## Sounds Hard
|
23
|
-
|
24
|
-
It's not, just follow the directions below. I'll add a screencast and example app when I get time. Any questions, open an issue or ping me on Twitter.
|
25
15
|
|
26
16
|
## Install
|
27
17
|
|
@@ -31,16 +21,31 @@ Gemfile
|
|
31
21
|
gem 'opro'
|
32
22
|
```
|
33
23
|
|
24
|
+
Then run
|
25
|
+
|
34
26
|
```shell
|
35
27
|
$ bundle install
|
36
28
|
```
|
37
29
|
|
30
|
+
and don't forget
|
31
|
+
|
38
32
|
```shell
|
39
|
-
$ opro:install
|
33
|
+
$ rails g opro:install
|
40
34
|
```
|
41
35
|
|
42
36
|
This will put a file in `initializers/opro.rb` and generate some migrations.
|
43
37
|
|
38
|
+
|
39
|
+
Now we're ready to migrate the database
|
40
|
+
|
41
|
+
```shell
|
42
|
+
$ rake db:migrate
|
43
|
+
````
|
44
|
+
|
45
|
+
This will add `Oauth::AccessGrant` and `Oauth::ClientApplication` to your database
|
46
|
+
|
47
|
+
## Setup
|
48
|
+
|
44
49
|
Go to `initializers/opro.rb` and configure your app for your authentication scheme.
|
45
50
|
|
46
51
|
```ruby
|
@@ -59,20 +64,32 @@ If you're not using devise you can manually configure your own auth strategy. In
|
|
59
64
|
end
|
60
65
|
```
|
61
66
|
|
62
|
-
Now
|
67
|
+
Now in your controllers you can allow OAuth access using the same syntax of the rails `before_filter`
|
68
|
+
|
69
|
+
```ruby
|
70
|
+
class UsersController < ApplicationController
|
71
|
+
allow_oauth! :only => [:show]
|
72
|
+
end
|
73
|
+
```
|
74
|
+
|
75
|
+
|
76
|
+
You can also disallow OAuth on specific actions. Disallowing will always over-ride allowing.
|
63
77
|
|
64
|
-
```shell
|
65
|
-
$ rake db:migrate
|
66
|
-
````
|
67
78
|
|
79
|
+
```ruby
|
80
|
+
class ProductsController < ApplicationController
|
81
|
+
disallow_oauth! :only => [:create]
|
82
|
+
end
|
83
|
+
```
|
68
84
|
|
85
|
+
By default all OAuth access is blacklisted. To whitelist all access, add `allow_oauth!` to your `ApplicationController` (this is not recommended). The best practice is to add allow or disallow code to each controller.
|
69
86
|
|
70
87
|
That should be all you need to do to get setup, congrats you're now able to authenticate users using OAuth!!
|
71
88
|
|
72
89
|
|
73
90
|
## Use it
|
74
91
|
|
75
|
-
Opro comes with built in documentation, so if you start your server you can view them at
|
92
|
+
Opro comes with built in documentation, so if you start your server you can view them at http://localhost:3000/oauth_docs. If you're reading this on Github you can jump right to the [Quick Start](https://github.com/schneems/opro/blob/master/app/views/oauth/docs/markdown/quick_start.md.erb) guide. This guide will walk you through creating your first OAuth client application, giving access to that app as a logged in user, getting an access token for that user, and using that token to access the server as an authenticated user!
|
76
93
|
|
77
94
|
|
78
95
|
## Assumptions
|
data/Rakefile
CHANGED
@@ -40,7 +40,7 @@ Jeweler::Tasks.new do |gem|
|
|
40
40
|
gem.homepage = "http://github.com/schneems/opro"
|
41
41
|
gem.license = "MIT"
|
42
42
|
gem.summary = %Q{ Opro turns your Rails application into an OAuth Provider }
|
43
|
-
gem.description = %Q{ Enable
|
43
|
+
gem.description = %Q{ Enable OAuth clients (iphone, android, web sites, etc.) to access and use your Rails application, what you do with it is up to you}
|
44
44
|
gem.email = "richard.schneeman@gmail.com"
|
45
45
|
gem.authors = ["schneems"]
|
46
46
|
# dependencies defined in Gemfile
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.1.
|
1
|
+
0.0.1.pre1.0.1
|
@@ -0,0 +1,53 @@
|
|
1
|
+
class Oauth::TestsController < ApplicationController
|
2
|
+
allow_oauth!
|
3
|
+
disallow_oauth! :only => [:destroy]
|
4
|
+
|
5
|
+
def index
|
6
|
+
|
7
|
+
end
|
8
|
+
|
9
|
+
def show
|
10
|
+
result = if valid_oauth?
|
11
|
+
{:status => 200, :message => 'OAuth Worked!!', :params => params, :user_id => oauth_user.id }
|
12
|
+
else
|
13
|
+
{:status => 401, :message => "OAuth Did not Work :( #{generate_oauth_error_message!}", :params => params}
|
14
|
+
end
|
15
|
+
|
16
|
+
respond_to do |format|
|
17
|
+
format.html do
|
18
|
+
render :text => result.to_json, :status => result[:status], :layout => true
|
19
|
+
end
|
20
|
+
format.json do
|
21
|
+
render :json => result, :status => result[:status]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def destroy
|
27
|
+
result = if valid_oauth?
|
28
|
+
{:status => 200, :message => 'OHNO!!! OAuth is Disabled on this Action, this is bad', :params => params}
|
29
|
+
else
|
30
|
+
{:status => 401, :message => "Oauth is Disabled on this Action, this is the correct result!", :params => params}
|
31
|
+
end
|
32
|
+
|
33
|
+
respond_to do |format|
|
34
|
+
format.html do
|
35
|
+
render :text => result.to_json, :status => result[:status], :layout => true
|
36
|
+
end
|
37
|
+
format.json do
|
38
|
+
render :json => result, :status => result[:status]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def generate_oauth_error_message!
|
46
|
+
msg = ""
|
47
|
+
msg << ' - No OAuth Token Provided!' if params[:access_token].blank?
|
48
|
+
msg << ' - Allow OAuth set to false!' if allow_oauth? == false
|
49
|
+
msg << ' - OAuth user not found!' if oauth_user.blank?
|
50
|
+
msg
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
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]() or follow along with this guide.
|
4
4
|
|
5
|
+
|
5
6
|
## Step 1: Register your Application
|
6
7
|
|
7
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.
|
@@ -19,20 +20,19 @@ Once you've registered an app successfully we can start to build an OAuth applic
|
|
19
20
|
|
20
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)
|
21
22
|
|
22
|
-
<%= "#{request.base_url}/oauth/authorize?" %>client_id=3234myClientId5678&redirect_uri
|
23
|
+
<%= "#{request.base_url}/oauth/authorize?" %>client_id=3234myClientId5678&redirect_uri=%2F
|
23
24
|
|
24
25
|
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.
|
25
26
|
|
26
27
|
Once you grant your application permission, you will be redirected back to the url provided. In this case we will go back to the home page of our app.
|
27
28
|
|
28
|
-
Once redirected to the home page take a look in the address bar, we should see a `code` parameter. Copy this for use later:
|
29
|
+
Once redirected to the home page, take a look in the address bar, we should see a `code` parameter. Copy this for use later:
|
29
30
|
|
30
31
|
<%= "#{request.base_url}?" %>?code=4857goldfish827423
|
31
32
|
|
32
33
|
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.
|
33
34
|
|
34
35
|
|
35
|
-
|
36
36
|
## Step 3: Get AccessToken for User with Curl
|
37
37
|
|
38
38
|
We'll be using [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]()
|
@@ -52,19 +52,20 @@ You should get back a response that looks like this
|
|
52
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.
|
53
53
|
|
54
54
|
|
55
|
-
Step 4: Use the access token
|
55
|
+
## Step 4: Use the access token
|
56
56
|
|
57
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.
|
58
58
|
|
59
|
-
|
60
59
|
Try it out for yourself open up a browser and go to
|
61
60
|
|
61
|
+
<%= "#{request.base_url}/oauth_test/show_me_the_money?access_token=9693accessTokena7ca570bbaf" %>
|
62
62
|
|
63
|
-
<%= "#{request.base_url}/oauth/access_token?" %>
|
64
63
|
|
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.
|
65
65
|
|
66
66
|
## Security
|
67
67
|
|
68
|
-
|
69
68
|
Don't share your client application's secret or any user's access_token with unknown or untrusted parties. Always use https when available and don't write any of these values to your application's logs.
|
70
69
|
|
70
|
+
|
71
|
+
<%= view_context.link_to ' ← back', oauth_docs_path %>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<h2>Oauth Test</h2>
|
2
|
+
|
3
|
+
<p>Use this url scheme to test your OAuth application</p>
|
4
|
+
|
5
|
+
<h2>Test OAuth Allow</h2>
|
6
|
+
|
7
|
+
<p>
|
8
|
+
If you send a valid OAuth request to any oauth_test url such as <%= link_to oauth_test_path(:show_me_the_money), oauth_test_path(:show_me_the_money) %> you should see a response like this
|
9
|
+
</p>
|
10
|
+
<pre>
|
11
|
+
<code>
|
12
|
+
<%= {:status => 200, :message => 'Oauth Worked!! ', :params => {:id => 'show_me_the_money', :access_token => '3948fuAlo10gnsu'} }.to_json %>
|
13
|
+
</code>
|
14
|
+
</pre>
|
15
|
+
<p>
|
16
|
+
If the request is not valid you will receive a message detailing the errors.
|
17
|
+
</p>
|
18
|
+
|
19
|
+
<h2>Test OAuth Disallow</h2>
|
20
|
+
<p>
|
21
|
+
If you send a valid OAuth request using the 'DELETE' HTTP method to <%= oauth_test_path(:show_me_the_money) %> you should see a response like below.</p>
|
22
|
+
<%= button_to oauth_test_path(:show_me_the_money), oauth_test_path(:show_me_the_money), :method => :delete %>
|
23
|
+
<pre>
|
24
|
+
<code>
|
25
|
+
<%= {:status => 401, :message => 'Oauth is Disabled on this Action, this is the correct result!', :params => {:id => 'show_me_the_money', :access_token => '3948fuAlo10gnsu'}}.to_json %>
|
26
|
+
</code>
|
27
|
+
</pre>
|
28
|
+
|
29
|
+
<p>
|
30
|
+
If you get a 200 result, then there is something configured incorrectly on the server, please contact the administrator.
|
31
|
+
</p>
|
data/config/routes.rb
CHANGED
@@ -5,5 +5,6 @@ Rails.application.routes.draw do
|
|
5
5
|
match '/oauth/access_token' => 'oauth/auth#access_token', :as => 'oauth_token'
|
6
6
|
|
7
7
|
resources :oauth_docs, :controller => 'oauth/docs'
|
8
|
+
resources :oauth_tests, :controller => 'oauth/tests'
|
8
9
|
resources :oauth_client_applications, :controller => 'oauth/client_application'
|
9
10
|
end
|
@@ -4,7 +4,7 @@ module Opro
|
|
4
4
|
module Controllers
|
5
5
|
module ApplicationControllerHelper
|
6
6
|
extend ActiveSupport::Concern
|
7
|
-
|
7
|
+
|
8
8
|
included do
|
9
9
|
around_filter :oauth_auth!
|
10
10
|
skip_before_filter :verify_authenticity_token, :if => :valid_oauth?
|
@@ -14,9 +14,33 @@ module Opro
|
|
14
14
|
Opro.authenticate_user_method.call(self)
|
15
15
|
end
|
16
16
|
|
17
|
+
module ClassMethods
|
18
|
+
def allow_oauth!(options = {})
|
19
|
+
prepend_before_filter :allow_oauth, options
|
20
|
+
end
|
21
|
+
|
22
|
+
def disallow_oauth!(options = {})
|
23
|
+
prepend_before_filter :disallow_oauth, options
|
24
|
+
skip_before_filter :allow_oauth, options
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
17
28
|
protected
|
29
|
+
|
30
|
+
def allow_oauth?
|
31
|
+
@use_oauth ||= false
|
32
|
+
end
|
33
|
+
|
34
|
+
def disallow_oauth
|
35
|
+
@use_oauth = false
|
36
|
+
end
|
37
|
+
|
38
|
+
def allow_oauth
|
39
|
+
@use_oauth = true
|
40
|
+
end
|
41
|
+
|
18
42
|
def oauth?
|
19
|
-
params[:access_token].present?
|
43
|
+
allow_oauth? && params[:access_token].present?
|
20
44
|
end
|
21
45
|
|
22
46
|
def oauth_user
|
data/opro.gemspec
CHANGED
@@ -5,12 +5,12 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "opro"
|
8
|
-
s.version = "0.0.1.
|
8
|
+
s.version = "0.0.1.pre1.0.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["schneems"]
|
12
12
|
s.date = "2012-04-10"
|
13
|
-
s.description = " Enable
|
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 = [
|
16
16
|
"README.md"
|
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
|
|
26
26
|
"app/controllers/oauth/auth_controller.rb",
|
27
27
|
"app/controllers/oauth/client_application_controller.rb",
|
28
28
|
"app/controllers/oauth/docs_controller.rb",
|
29
|
+
"app/controllers/oauth/tests_controller.rb",
|
29
30
|
"app/controllers/opro_application_controller.rb",
|
30
31
|
"app/models/oauth/access_grant.rb",
|
31
32
|
"app/models/oauth/client_application.rb",
|
@@ -38,6 +39,7 @@ Gem::Specification.new do |s|
|
|
38
39
|
"app/views/oauth/docs/markdown/oauth.md.erb",
|
39
40
|
"app/views/oauth/docs/markdown/quick_start.md.erb",
|
40
41
|
"app/views/oauth/docs/show.html.erb",
|
42
|
+
"app/views/oauth/tests/index.html.erb",
|
41
43
|
"config/routes.rb",
|
42
44
|
"lib/generators/active_record/opro_generator.rb",
|
43
45
|
"lib/generators/active_record/templates/access_grants.rb",
|
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.0.1.
|
4
|
+
version: 0.0.1.pre1.0.1
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-04-10 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement: &
|
16
|
+
requirement: &70203502493160 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.0.7
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70203502493160
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rails
|
27
|
-
requirement: &
|
27
|
+
requirement: &70203502491540 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 3.0.7
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70203502491540
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: bluecloth
|
38
|
-
requirement: &
|
38
|
+
requirement: &70203502490520 !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: *70203502490520
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: jeweler
|
49
|
-
requirement: &
|
49
|
+
requirement: &70203502489320 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.6.4
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70203502489320
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: bundler
|
60
|
-
requirement: &
|
60
|
+
requirement: &70203502488240 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.1.3
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70203502488240
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: capybara
|
71
|
-
requirement: &
|
71
|
+
requirement: &70203502486620 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 0.4.0
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70203502486620
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: sqlite3
|
82
|
-
requirement: &
|
82
|
+
requirement: &70203502485440 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70203502485440
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: launchy
|
93
|
-
requirement: &
|
93
|
+
requirement: &70203502466260 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70203502466260
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: devise
|
104
|
-
requirement: &
|
104
|
+
requirement: &70203502464720 !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: *70203502464720
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: rcov
|
115
|
-
requirement: &
|
115
|
+
requirement: &70203502462100 !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: *70203502462100
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: simplecov
|
126
|
-
requirement: &
|
126
|
+
requirement: &70203502460760 !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
129
129
|
- - ! '>='
|
@@ -131,8 +131,8 @@ dependencies:
|
|
131
131
|
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
|
-
version_requirements: *
|
135
|
-
description: ! ' Enable
|
134
|
+
version_requirements: *70203502460760
|
135
|
+
description: ! ' Enable OAuth clients (iphone, android, web sites, etc.) to access
|
136
136
|
and use your Rails application, what you do with it is up to you'
|
137
137
|
email: richard.schneeman@gmail.com
|
138
138
|
executables: []
|
@@ -150,6 +150,7 @@ files:
|
|
150
150
|
- app/controllers/oauth/auth_controller.rb
|
151
151
|
- app/controllers/oauth/client_application_controller.rb
|
152
152
|
- app/controllers/oauth/docs_controller.rb
|
153
|
+
- app/controllers/oauth/tests_controller.rb
|
153
154
|
- app/controllers/opro_application_controller.rb
|
154
155
|
- app/models/oauth/access_grant.rb
|
155
156
|
- app/models/oauth/client_application.rb
|
@@ -162,6 +163,7 @@ files:
|
|
162
163
|
- app/views/oauth/docs/markdown/oauth.md.erb
|
163
164
|
- app/views/oauth/docs/markdown/quick_start.md.erb
|
164
165
|
- app/views/oauth/docs/show.html.erb
|
166
|
+
- app/views/oauth/tests/index.html.erb
|
165
167
|
- config/routes.rb
|
166
168
|
- lib/generators/active_record/opro_generator.rb
|
167
169
|
- lib/generators/active_record/templates/access_grants.rb
|
@@ -235,7 +237,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
235
237
|
version: '0'
|
236
238
|
segments:
|
237
239
|
- 0
|
238
|
-
hash:
|
240
|
+
hash: -607479715438649741
|
239
241
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
240
242
|
none: false
|
241
243
|
requirements:
|