panjiva-oauth-plugin 0.4.1
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 +15 -0
- data/.gitignore +12 -0
- data/CHANGELOG +178 -0
- data/Gemfile +27 -0
- data/Guardfile +8 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +531 -0
- data/Rakefile +2 -0
- data/UPGRADE.rdoc +21 -0
- data/generators/oauth_consumer/USAGE +10 -0
- data/generators/oauth_consumer/oauth_consumer_generator.rb +50 -0
- data/generators/oauth_consumer/templates/consumer_token.rb +11 -0
- data/generators/oauth_consumer/templates/controller.rb +27 -0
- data/generators/oauth_consumer/templates/index.html.erb +29 -0
- data/generators/oauth_consumer/templates/index.html.haml +18 -0
- data/generators/oauth_consumer/templates/migration.rb +20 -0
- data/generators/oauth_consumer/templates/oauth_config.rb +73 -0
- data/generators/oauth_consumer/templates/show.html.erb +7 -0
- data/generators/oauth_consumer/templates/show.html.haml +8 -0
- data/generators/oauth_provider/USAGE +20 -0
- data/generators/oauth_provider/lib/insert_routes.rb +67 -0
- data/generators/oauth_provider/oauth_provider_generator.rb +127 -0
- data/generators/oauth_provider/templates/_form.html.erb +17 -0
- data/generators/oauth_provider/templates/_form.html.haml +21 -0
- data/generators/oauth_provider/templates/access_token.rb +16 -0
- data/generators/oauth_provider/templates/authorize.html.erb +14 -0
- data/generators/oauth_provider/templates/authorize.html.haml +16 -0
- data/generators/oauth_provider/templates/authorize_failure.html.erb +1 -0
- data/generators/oauth_provider/templates/authorize_failure.html.haml +1 -0
- data/generators/oauth_provider/templates/authorize_success.html.erb +1 -0
- data/generators/oauth_provider/templates/authorize_success.html.haml +1 -0
- data/generators/oauth_provider/templates/client_application.rb +57 -0
- data/generators/oauth_provider/templates/client_application_spec.rb +29 -0
- data/generators/oauth_provider/templates/client_application_test.rb +42 -0
- data/generators/oauth_provider/templates/client_applications.yml +23 -0
- data/generators/oauth_provider/templates/clients_controller.rb +52 -0
- data/generators/oauth_provider/templates/clients_controller_spec.rb +176 -0
- data/generators/oauth_provider/templates/clients_controller_test.rb +280 -0
- data/generators/oauth_provider/templates/controller.rb +23 -0
- data/generators/oauth_provider/templates/edit.html.erb +7 -0
- data/generators/oauth_provider/templates/edit.html.haml +4 -0
- data/generators/oauth_provider/templates/index.html.erb +43 -0
- data/generators/oauth_provider/templates/index.html.haml +39 -0
- data/generators/oauth_provider/templates/migration.rb +47 -0
- data/generators/oauth_provider/templates/new.html.erb +5 -0
- data/generators/oauth_provider/templates/new.html.haml +5 -0
- data/generators/oauth_provider/templates/oauth2_authorize.html.erb +16 -0
- data/generators/oauth_provider/templates/oauth2_authorize.html.haml +17 -0
- data/generators/oauth_provider/templates/oauth2_token.rb +20 -0
- data/generators/oauth_provider/templates/oauth2_token_spec.rb +52 -0
- data/generators/oauth_provider/templates/oauth2_verifier.rb +35 -0
- data/generators/oauth_provider/templates/oauth2_verifier_spec.rb +44 -0
- data/generators/oauth_provider/templates/oauth_nonce.rb +13 -0
- data/generators/oauth_provider/templates/oauth_nonce_spec.rb +24 -0
- data/generators/oauth_provider/templates/oauth_nonce_test.rb +26 -0
- data/generators/oauth_provider/templates/oauth_nonces.yml +13 -0
- data/generators/oauth_provider/templates/oauth_token.rb +30 -0
- data/generators/oauth_provider/templates/oauth_token_spec.rb +309 -0
- data/generators/oauth_provider/templates/oauth_token_test.rb +57 -0
- data/generators/oauth_provider/templates/oauth_tokens.yml +17 -0
- data/generators/oauth_provider/templates/request_token.rb +40 -0
- data/generators/oauth_provider/templates/show.html.erb +27 -0
- data/generators/oauth_provider/templates/show.html.haml +30 -0
- data/init.rb +1 -0
- data/install.rb +2 -0
- data/lib/generators/active_record/oauth_consumer_generator.rb +33 -0
- data/lib/generators/active_record/oauth_consumer_templates/consumer_token.rb +11 -0
- data/lib/generators/active_record/oauth_consumer_templates/migration.rb +20 -0
- data/lib/generators/active_record/oauth_provider_generator.rb +39 -0
- data/lib/generators/active_record/oauth_provider_templates/access_token.rb +16 -0
- data/lib/generators/active_record/oauth_provider_templates/client_application.rb +57 -0
- data/lib/generators/active_record/oauth_provider_templates/migration.rb +47 -0
- data/lib/generators/active_record/oauth_provider_templates/oauth2_token.rb +20 -0
- data/lib/generators/active_record/oauth_provider_templates/oauth2_verifier.rb +35 -0
- data/lib/generators/active_record/oauth_provider_templates/oauth_nonce.rb +13 -0
- data/lib/generators/active_record/oauth_provider_templates/oauth_token.rb +30 -0
- data/lib/generators/active_record/oauth_provider_templates/request_token.rb +40 -0
- data/lib/generators/erb/oauth_consumer_generator.rb +14 -0
- data/lib/generators/erb/oauth_consumer_templates/index.html.erb +29 -0
- data/lib/generators/erb/oauth_consumer_templates/show.html.erb +7 -0
- data/lib/generators/erb/oauth_provider_generator.rb +23 -0
- data/lib/generators/erb/oauth_provider_templates/_form.html.erb +17 -0
- data/lib/generators/erb/oauth_provider_templates/authorize.html.erb +14 -0
- data/lib/generators/erb/oauth_provider_templates/authorize_failure.html.erb +1 -0
- data/lib/generators/erb/oauth_provider_templates/authorize_success.html.erb +1 -0
- data/lib/generators/erb/oauth_provider_templates/edit.html.erb +7 -0
- data/lib/generators/erb/oauth_provider_templates/index.html.erb +43 -0
- data/lib/generators/erb/oauth_provider_templates/new.html.erb +5 -0
- data/lib/generators/erb/oauth_provider_templates/oauth2_authorize.html.erb +16 -0
- data/lib/generators/erb/oauth_provider_templates/show.html.erb +27 -0
- data/lib/generators/haml/oauth_consumer_generator.rb +21 -0
- data/lib/generators/haml/oauth_consumer_templates/index.html.haml +18 -0
- data/lib/generators/haml/oauth_consumer_templates/show.html.haml +8 -0
- data/lib/generators/haml/oauth_provider_generator.rb +28 -0
- data/lib/generators/haml/oauth_provider_templates/_form.html.haml +21 -0
- data/lib/generators/haml/oauth_provider_templates/authorize.html.haml +16 -0
- data/lib/generators/haml/oauth_provider_templates/authorize_failure.html.haml +1 -0
- data/lib/generators/haml/oauth_provider_templates/authorize_success.html.haml +1 -0
- data/lib/generators/haml/oauth_provider_templates/edit.html.haml +4 -0
- data/lib/generators/haml/oauth_provider_templates/index.html.haml +39 -0
- data/lib/generators/haml/oauth_provider_templates/new.html.haml +5 -0
- data/lib/generators/haml/oauth_provider_templates/oauth2_authorize.html.haml +17 -0
- data/lib/generators/haml/oauth_provider_templates/show.html.haml +30 -0
- data/lib/generators/mongoid/oauth_consumer_generator.rb +15 -0
- data/lib/generators/mongoid/oauth_consumer_templates/consumer_token.rb +41 -0
- data/lib/generators/mongoid/oauth_provider_generator.rb +21 -0
- data/lib/generators/mongoid/oauth_provider_templates/access_token.rb +16 -0
- data/lib/generators/mongoid/oauth_provider_templates/client_application.rb +71 -0
- data/lib/generators/mongoid/oauth_provider_templates/oauth2_token.rb +20 -0
- data/lib/generators/mongoid/oauth_provider_templates/oauth2_verifier.rb +35 -0
- data/lib/generators/mongoid/oauth_provider_templates/oauth_nonce.rb +24 -0
- data/lib/generators/mongoid/oauth_provider_templates/oauth_token.rb +44 -0
- data/lib/generators/mongoid/oauth_provider_templates/request_token.rb +36 -0
- data/lib/generators/oauth_consumer/USAGE +11 -0
- data/lib/generators/oauth_consumer/oauth_consumer_generator.rb +31 -0
- data/lib/generators/oauth_consumer/templates/controller.rb +59 -0
- data/lib/generators/oauth_consumer/templates/oauth_config.rb +68 -0
- data/lib/generators/oauth_inflections.rb +6 -0
- data/lib/generators/oauth_plugin.rb +0 -0
- data/lib/generators/oauth_provider/USAGE +18 -0
- data/lib/generators/oauth_provider/oauth_provider_generator.rb +37 -0
- data/lib/generators/oauth_provider/templates/clients_controller.rb +52 -0
- data/lib/generators/oauth_provider/templates/controller.rb +23 -0
- data/lib/generators/rspec/oauth_provider_generator.rb +35 -0
- data/lib/generators/rspec/templates/client_application_spec.rb +29 -0
- data/lib/generators/rspec/templates/client_applications.yml +23 -0
- data/lib/generators/rspec/templates/clients_controller_spec.rb +176 -0
- data/lib/generators/rspec/templates/oauth2_token_spec.rb +52 -0
- data/lib/generators/rspec/templates/oauth2_verifier_spec.rb +44 -0
- data/lib/generators/rspec/templates/oauth_nonce_spec.rb +24 -0
- data/lib/generators/rspec/templates/oauth_nonces.yml +13 -0
- data/lib/generators/rspec/templates/oauth_token_spec.rb +309 -0
- data/lib/generators/rspec/templates/oauth_tokens.yml +17 -0
- data/lib/generators/test_unit/oauth_provider_generator.rb +33 -0
- data/lib/generators/test_unit/templates/client_application_test.rb +42 -0
- data/lib/generators/test_unit/templates/client_applications.yml +23 -0
- data/lib/generators/test_unit/templates/clients_controller_test.rb +280 -0
- data/lib/generators/test_unit/templates/oauth_nonce_test.rb +26 -0
- data/lib/generators/test_unit/templates/oauth_nonces.yml +13 -0
- data/lib/generators/test_unit/templates/oauth_token_test.rb +57 -0
- data/lib/generators/test_unit/templates/oauth_tokens.yml +17 -0
- data/lib/oauth-plugin.rb +24 -0
- data/lib/oauth-plugin/version.rb +5 -0
- data/lib/oauth/controllers/application_controller_methods.rb +136 -0
- data/lib/oauth/controllers/consumer_controller.rb +150 -0
- data/lib/oauth/controllers/provider_controller.rb +181 -0
- data/lib/oauth/models/consumers/service_loader.rb +28 -0
- data/lib/oauth/models/consumers/services/agree2_token.rb +15 -0
- data/lib/oauth/models/consumers/services/fireeagle_token.rb +39 -0
- data/lib/oauth/models/consumers/services/google_token.rb +21 -0
- data/lib/oauth/models/consumers/services/oauth2_token.rb +27 -0
- data/lib/oauth/models/consumers/services/opentransact_token.rb +15 -0
- data/lib/oauth/models/consumers/services/picomoney_token.rb +17 -0
- data/lib/oauth/models/consumers/services/twitter_token.rb +24 -0
- data/lib/oauth/models/consumers/simple_client.rb +50 -0
- data/lib/oauth/models/consumers/token.rb +93 -0
- data/lib/oauth/provider/authorizer.rb +83 -0
- data/lib/oauth/rack/oauth_filter.rb +93 -0
- data/oauth-plugin.gemspec +39 -0
- data/rails/init.rb +1 -0
- data/spec/dummy_provider_models.rb +53 -0
- data/spec/oauth/provider/authorizer_spec.rb +202 -0
- data/spec/rack/oauth_filter_spec.rb +244 -0
- data/spec/spec_helper.rb +3 -0
- data/tasks/oauth_tasks.rake +4 -0
- data/uninstall.rb +1 -0
- metadata +362 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'rails/generators/migration'
|
|
2
|
+
require 'rails/generators/active_record'
|
|
3
|
+
|
|
4
|
+
class OauthConsumerGenerator < Rails::Generators::Base
|
|
5
|
+
source_root File.expand_path("../templates", __FILE__)
|
|
6
|
+
|
|
7
|
+
hook_for :orm
|
|
8
|
+
|
|
9
|
+
def copy_models
|
|
10
|
+
template 'oauth_config.rb', File.join('config', 'initializers', 'oauth_consumers.rb')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def copy_controller
|
|
14
|
+
template 'controller.rb', File.join('app', 'controllers', 'oauth_consumers_controller.rb')
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
hook_for :template_engine
|
|
18
|
+
|
|
19
|
+
def add_route
|
|
20
|
+
route <<-ROUTE.strip
|
|
21
|
+
resources :oauth_consumers do
|
|
22
|
+
member do
|
|
23
|
+
get :callback
|
|
24
|
+
get :callback2
|
|
25
|
+
match 'client/*endpoint' => 'oauth_consumers#client'
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
ROUTE
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require 'oauth/controllers/consumer_controller'
|
|
2
|
+
class OauthConsumersController < ApplicationController
|
|
3
|
+
include Oauth::Controllers::ConsumerController
|
|
4
|
+
# Replace this with the equivalent for your authentication framework
|
|
5
|
+
# Eg. for devise
|
|
6
|
+
#
|
|
7
|
+
# before_filter :authenticate_user!, :only=>:index
|
|
8
|
+
before_filter :login_required, :only=>:index
|
|
9
|
+
|
|
10
|
+
def index
|
|
11
|
+
@consumer_tokens=ConsumerToken.all :conditions=>{:user_id=>current_user.id}
|
|
12
|
+
@services=OAUTH_CREDENTIALS.keys-@consumer_tokens.collect{|c| c.class.service_name}
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def callback
|
|
16
|
+
super
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def client
|
|
20
|
+
super
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
protected
|
|
25
|
+
|
|
26
|
+
# Change this to decide where you want to redirect user to after callback is finished.
|
|
27
|
+
# params[:id] holds the service name so you could use this to redirect to various parts
|
|
28
|
+
# of your application depending on what service you're connecting to.
|
|
29
|
+
def go_back
|
|
30
|
+
redirect_to root_url
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# The plugin requires logged_in? to return true or false if the user is logged in. Uncomment and
|
|
34
|
+
# call your auth frameworks equivalent below if different. eg. for devise:
|
|
35
|
+
#
|
|
36
|
+
# def logged_in?
|
|
37
|
+
# user_signed_in?
|
|
38
|
+
# end
|
|
39
|
+
|
|
40
|
+
# The plugin requires current_user to return the current logged in user. Uncomment and
|
|
41
|
+
# call your auth frameworks equivalent below if different.
|
|
42
|
+
# def current_user
|
|
43
|
+
# current_person
|
|
44
|
+
# end
|
|
45
|
+
|
|
46
|
+
# The plugin requires a way to log a user in. Call your auth frameworks equivalent below
|
|
47
|
+
# if different. eg. for devise:
|
|
48
|
+
#
|
|
49
|
+
# def current_user=(user)
|
|
50
|
+
# sign_in(user)
|
|
51
|
+
# end
|
|
52
|
+
|
|
53
|
+
# Override this to deny the user or redirect to a login screen depending on your framework and app
|
|
54
|
+
# if different. eg. for devise:
|
|
55
|
+
#
|
|
56
|
+
# def deny_access!
|
|
57
|
+
# raise Acl9::AccessDenied
|
|
58
|
+
# end
|
|
59
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# edit this file to contain credentials for the OAuth services you support.
|
|
2
|
+
# each entry needs a corresponding token model.
|
|
3
|
+
#
|
|
4
|
+
# eg. :twitter => TwitterToken, :hour_feed => HourFeedToken etc.
|
|
5
|
+
#
|
|
6
|
+
# OAUTH_CREDENTIALS={
|
|
7
|
+
# :twitter=>{
|
|
8
|
+
# :key=>"",
|
|
9
|
+
# :secret=>"",
|
|
10
|
+
# :client=>:twitter_gem, # :twitter_gem or :oauth_gem (defaults to :twitter_gem)
|
|
11
|
+
# :expose => false, # expose client at /oauth_consumers/twitter/client see docs
|
|
12
|
+
# :allow_login => true # Use :allow_login => true to allow user to login to account
|
|
13
|
+
# },
|
|
14
|
+
# :google=>{
|
|
15
|
+
# :key=>"",
|
|
16
|
+
# :secret=>"",
|
|
17
|
+
# :expose => false, # expose client at /oauth_consumers/google/client see docs
|
|
18
|
+
# :scope=>"" # see http://code.google.com/apis/gdata/faq.html#AuthScopes
|
|
19
|
+
# },
|
|
20
|
+
# :github=>{
|
|
21
|
+
# :key => "",
|
|
22
|
+
# :secret => "",
|
|
23
|
+
# :expose => false, # expose client at /oauth_consumers/twitter/client see docs
|
|
24
|
+
#
|
|
25
|
+
# },
|
|
26
|
+
# :facebook=>{
|
|
27
|
+
# :key => "",
|
|
28
|
+
# :secret => ""
|
|
29
|
+
# },
|
|
30
|
+
# :agree2=>{
|
|
31
|
+
# :key=>"",
|
|
32
|
+
# :secret=>""
|
|
33
|
+
# },
|
|
34
|
+
# :fireeagle=>{
|
|
35
|
+
# :key=>"",
|
|
36
|
+
# :secret=>""
|
|
37
|
+
# },
|
|
38
|
+
# :oauth2_server => {
|
|
39
|
+
# :key=>"",
|
|
40
|
+
# :secret=>"",
|
|
41
|
+
# :oauth_version => 2
|
|
42
|
+
# :options=>{ # OAuth::Consumer options
|
|
43
|
+
# :site=>"http://hourfeed.com" # Remember to add a site for a generic OAuth site
|
|
44
|
+
# }
|
|
45
|
+
# },
|
|
46
|
+
# :hour_feed=>{
|
|
47
|
+
# :key=>"",
|
|
48
|
+
# :secret=>"",
|
|
49
|
+
# :options=>{ # OAuth::Consumer options
|
|
50
|
+
# :site=>"http://hourfeed.com" # Remember to add a site for a generic OAuth site
|
|
51
|
+
# }
|
|
52
|
+
# },
|
|
53
|
+
# :nu_bux=>{
|
|
54
|
+
# :key=>"",
|
|
55
|
+
# :secret=>"",
|
|
56
|
+
# :super_class=>"OpenTransactToken", # if a OAuth service follows a particular standard
|
|
57
|
+
# # with a token implementation you can set the superclass
|
|
58
|
+
# # to use
|
|
59
|
+
# :options=>{ # OAuth::Consumer options
|
|
60
|
+
# :site=>"http://nubux.heroku.com"
|
|
61
|
+
# }
|
|
62
|
+
# }
|
|
63
|
+
# }
|
|
64
|
+
#
|
|
65
|
+
OAUTH_CREDENTIALS={
|
|
66
|
+
} unless defined? OAUTH_CREDENTIALS
|
|
67
|
+
|
|
68
|
+
load 'oauth/models/consumers/service_loader.rb'
|
|
File without changes
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
This creates an OAuth Provider controller as well as the requisite models.
|
|
2
|
+
|
|
3
|
+
It requires an authentication framework such as acts_as_authenticated, restful_authentication or restful_open_id_authentication.
|
|
4
|
+
|
|
5
|
+
If you generated the migration file (true by default), make sure you run
|
|
6
|
+
|
|
7
|
+
rake db:migrate
|
|
8
|
+
|
|
9
|
+
include the following in your user.rb
|
|
10
|
+
|
|
11
|
+
has_many :client_applications
|
|
12
|
+
has_many :tokens, :class_name=>"OauthToken",:order=>"authorized_at desc",:include=>[:client_application]
|
|
13
|
+
|
|
14
|
+
For legacy OAUTH 1.0 support add the following constant in your environment.rb
|
|
15
|
+
|
|
16
|
+
OAUTH_10_SUPPORT = true
|
|
17
|
+
|
|
18
|
+
Note, you should only do this if you really positively require to support old OAuth1.0 clients. There is a serious security issue with this.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'generators/oauth_inflections'
|
|
2
|
+
|
|
3
|
+
class OauthProviderGenerator < Rails::Generators::NamedBase
|
|
4
|
+
source_root File.expand_path("../templates", __FILE__)
|
|
5
|
+
|
|
6
|
+
argument :name, :type => :string, :default => 'Oauth'
|
|
7
|
+
|
|
8
|
+
desc 'This creates an OAuth Provider controller as well as the requisite models.'
|
|
9
|
+
|
|
10
|
+
hook_for :orm
|
|
11
|
+
|
|
12
|
+
def check_class_collisions
|
|
13
|
+
# Check for class naming collisions.
|
|
14
|
+
class_collisions class_path, "#{class_name}Controller", # Oauth Controller
|
|
15
|
+
"#{class_name}Helper",
|
|
16
|
+
"#{class_name}ClientsController",
|
|
17
|
+
"#{class_name}ClientsHelper"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def copy_controller_files
|
|
21
|
+
template 'controller.rb', File.join('app/controllers', class_path, "#{file_name}_controller.rb")
|
|
22
|
+
template 'clients_controller.rb', File.join('app/controllers', class_path, "#{file_name}_clients_controller.rb")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
hook_for :test_framework, :template_engine
|
|
26
|
+
|
|
27
|
+
def add_routes
|
|
28
|
+
route "match '/oauth', :to => 'oauth#index', :as => :oauth"
|
|
29
|
+
route "match '/oauth/authorize', :to => 'oauth#authorize', :as => :authorize"
|
|
30
|
+
route "match '/oauth/request_token', :to => 'oauth#request_token', :as => :request_token"
|
|
31
|
+
route "match '/oauth/access_token', :to => 'oauth#access_token', :as => :access_token"
|
|
32
|
+
route "match '/oauth/token', :to => 'oauth#token', :as => :token"
|
|
33
|
+
route "match '/oauth/test_request', :to => 'oauth#test_request', :as => :test_request"
|
|
34
|
+
|
|
35
|
+
route "resources :#{file_name}_clients"
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
class OauthClientsController < ApplicationController
|
|
2
|
+
before_filter :login_required
|
|
3
|
+
before_filter :get_client_application, :only => [:show, :edit, :update, :destroy]
|
|
4
|
+
|
|
5
|
+
def index
|
|
6
|
+
@client_applications = current_user.client_applications
|
|
7
|
+
@tokens = current_user.tokens.find :all, :conditions => 'oauth_tokens.invalidated_at is null and oauth_tokens.authorized_at is not null'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def new
|
|
11
|
+
@client_application = ClientApplication.new
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def create
|
|
15
|
+
@client_application = current_user.client_applications.build(params[:client_application])
|
|
16
|
+
if @client_application.save
|
|
17
|
+
flash[:notice] = "Registered the information successfully"
|
|
18
|
+
redirect_to :action => "show", :id => @client_application.id
|
|
19
|
+
else
|
|
20
|
+
render :action => "new"
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def show
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def edit
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def update
|
|
31
|
+
if @client_application.update_attributes(params[:client_application])
|
|
32
|
+
flash[:notice] = "Updated the client information successfully"
|
|
33
|
+
redirect_to :action => "show", :id => @client_application.id
|
|
34
|
+
else
|
|
35
|
+
render :action => "edit"
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def destroy
|
|
40
|
+
@client_application.destroy
|
|
41
|
+
flash[:notice] = "Destroyed the client application registration"
|
|
42
|
+
redirect_to :action => "index"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
def get_client_application
|
|
47
|
+
unless @client_application = current_user.client_applications.find(params[:id])
|
|
48
|
+
flash.now[:error] = "Wrong application id"
|
|
49
|
+
raise ActiveRecord::RecordNotFound
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'oauth/controllers/provider_controller'
|
|
2
|
+
class OauthController < ApplicationController
|
|
3
|
+
include OAuth::Controllers::ProviderController
|
|
4
|
+
|
|
5
|
+
protected
|
|
6
|
+
# Override this to match your authorization page form
|
|
7
|
+
# It currently expects a checkbox called authorize
|
|
8
|
+
# def user_authorizes_token?
|
|
9
|
+
# params[:authorize] == '1'
|
|
10
|
+
# end
|
|
11
|
+
|
|
12
|
+
# should authenticate and return a user if valid password.
|
|
13
|
+
# This example should work with most Authlogic or Devise. Uncomment it
|
|
14
|
+
# def authenticate_user(username,password)
|
|
15
|
+
# user = User.find_by_email params[:username]
|
|
16
|
+
# if user && user.valid_password?(params[:password])
|
|
17
|
+
# user
|
|
18
|
+
# else
|
|
19
|
+
# nil
|
|
20
|
+
# end
|
|
21
|
+
# end
|
|
22
|
+
|
|
23
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'generators/rspec'
|
|
2
|
+
|
|
3
|
+
module Rspec
|
|
4
|
+
module Generators
|
|
5
|
+
class OauthProviderGenerator < Rails::Generators::NamedBase
|
|
6
|
+
source_root File.expand_path('../templates', __FILE__)
|
|
7
|
+
|
|
8
|
+
argument :name, :type => :string, :default => 'Oauth'
|
|
9
|
+
class_option :fixture, :type => :boolean
|
|
10
|
+
|
|
11
|
+
def copy_controller_spec_files
|
|
12
|
+
template 'clients_controller_spec.rb',
|
|
13
|
+
File.join('spec/controllers', class_path, "#{file_name}_clients_controller_spec.rb")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def copy_models_spec_files
|
|
17
|
+
template 'client_application_spec.rb', File.join('spec/models', 'client_application_spec.rb')
|
|
18
|
+
template 'oauth_token_spec.rb', File.join('spec/models', 'oauth_token_spec.rb')
|
|
19
|
+
template 'oauth2_token_spec.rb', File.join('spec/models', 'oauth2_token_spec.rb')
|
|
20
|
+
template 'oauth2_verifier_spec.rb', File.join('spec/models', 'oauth2_verifier_spec.rb')
|
|
21
|
+
template 'oauth_nonce_spec.rb', File.join('spec/models', 'oauth_nonce_spec.rb')
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
hook_for :fixture_replacement
|
|
25
|
+
|
|
26
|
+
def create_fixture_file
|
|
27
|
+
if options[:fixtures] && options[:fixture_replacement].nil?
|
|
28
|
+
template 'client_applications.yml', File.join('test/fixtures', 'client_applications.yml')
|
|
29
|
+
template 'oauth_tokens.yml', File.join('test/fixtures', 'oauth_tokens.yml')
|
|
30
|
+
template 'oauth_nonces.yml', File.join('test/fixtures', 'oauth_nonces.yml')
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
2
|
+
describe ClientApplication do
|
|
3
|
+
fixtures :users, :client_applications, :oauth_tokens
|
|
4
|
+
before(:each) do
|
|
5
|
+
@application = ClientApplication.create :name => "Agree2", :url => "http://agree2.com", :user => users(:quentin)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "should be valid" do
|
|
9
|
+
@application.should be_valid
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
it "should not have errors" do
|
|
14
|
+
@application.errors.full_messages.should == []
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should have key and secret" do
|
|
18
|
+
@application.key.should_not be_nil
|
|
19
|
+
@application.secret.should_not be_nil
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should have credentials" do
|
|
23
|
+
@application.credentials.should_not be_nil
|
|
24
|
+
@application.credentials.key.should == @application.key
|
|
25
|
+
@application.credentials.secret.should == @application.secret
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
|
|
2
|
+
one:
|
|
3
|
+
id: 1
|
|
4
|
+
name: MyString
|
|
5
|
+
url: http://test.com
|
|
6
|
+
support_url: http://test.com/support
|
|
7
|
+
callback_url: http://test.com/callback
|
|
8
|
+
key: one_key
|
|
9
|
+
secret: MyString
|
|
10
|
+
user_id: 1
|
|
11
|
+
created_at: 2007-11-17 16:56:51
|
|
12
|
+
updated_at: 2007-11-17 16:56:51
|
|
13
|
+
two:
|
|
14
|
+
id: 2
|
|
15
|
+
name: MyString
|
|
16
|
+
url: http://test.com
|
|
17
|
+
support_url: http://test.com/support
|
|
18
|
+
callback_url: http://test.com/callback
|
|
19
|
+
key: two_key
|
|
20
|
+
secret: MyString
|
|
21
|
+
user_id: 1
|
|
22
|
+
created_at: 2007-11-17 16:56:51
|
|
23
|
+
updated_at: 2007-11-17 16:56:51
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
2
|
+
require File.dirname(__FILE__) + '/oauth_controller_spec_helper'
|
|
3
|
+
require 'oauth/client/action_controller_request'
|
|
4
|
+
|
|
5
|
+
describe OauthClientsController do
|
|
6
|
+
if defined?(Devise)
|
|
7
|
+
include Devise::TestHelpers
|
|
8
|
+
end
|
|
9
|
+
include OAuthControllerSpecHelper
|
|
10
|
+
fixtures :client_applications, :oauth_tokens, :users
|
|
11
|
+
before(:each) do
|
|
12
|
+
login_as_application_owner
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
describe "index" do
|
|
16
|
+
before do
|
|
17
|
+
@client_applications = @user.client_applications
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def do_get
|
|
21
|
+
get :index
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should be successful" do
|
|
25
|
+
do_get
|
|
26
|
+
response.should be_success
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should assign client_applications" do
|
|
30
|
+
do_get
|
|
31
|
+
assigns[:client_applications].should==@client_applications
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "should render index template" do
|
|
35
|
+
do_get
|
|
36
|
+
response.should render_template('index')
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe "show" do
|
|
41
|
+
|
|
42
|
+
def do_get
|
|
43
|
+
get :show, :id => '1'
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "should be successful" do
|
|
47
|
+
do_get
|
|
48
|
+
response.should be_success
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should assign client_applications" do
|
|
52
|
+
do_get
|
|
53
|
+
assigns[:client_application].should==current_client_application
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "should render show template" do
|
|
57
|
+
do_get
|
|
58
|
+
response.should render_template('show')
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
describe "new" do
|
|
64
|
+
|
|
65
|
+
def do_get
|
|
66
|
+
get :new
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "should be successful" do
|
|
70
|
+
do_get
|
|
71
|
+
response.should be_success
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it "should assign client_applications" do
|
|
75
|
+
do_get
|
|
76
|
+
assigns[:client_application].class.should==ClientApplication
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "should render show template" do
|
|
80
|
+
do_get
|
|
81
|
+
response.should render_template('new')
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
describe "edit" do
|
|
87
|
+
def do_get
|
|
88
|
+
get :edit, :id => '1'
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it "should be successful" do
|
|
92
|
+
do_get
|
|
93
|
+
response.should be_success
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it "should assign client_applications" do
|
|
97
|
+
do_get
|
|
98
|
+
assigns[:client_application].should==current_client_application
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it "should render edit template" do
|
|
102
|
+
do_get
|
|
103
|
+
response.should render_template('edit')
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
describe "create" do
|
|
109
|
+
|
|
110
|
+
def do_valid_post
|
|
111
|
+
post :create, 'client_application'=>{'name' => 'my site', :url=>"http://test.com"}
|
|
112
|
+
@client_application = ClientApplication.last
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def do_invalid_post
|
|
116
|
+
post :create
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it "should redirect to new client_application" do
|
|
120
|
+
do_valid_post
|
|
121
|
+
response.should be_redirect
|
|
122
|
+
response.should redirect_to(:action => "show", :id => @client_application.id)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it "should render show template" do
|
|
126
|
+
do_invalid_post
|
|
127
|
+
response.should render_template('new')
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
describe "destroy" do
|
|
132
|
+
|
|
133
|
+
def do_delete
|
|
134
|
+
delete :destroy, :id => '1'
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
it "should destroy client applications" do
|
|
138
|
+
do_delete
|
|
139
|
+
ClientApplication.should_not be_exists(1)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
it "should redirect to list" do
|
|
143
|
+
do_delete
|
|
144
|
+
response.should be_redirect
|
|
145
|
+
response.should redirect_to(:action => 'index')
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
describe "update" do
|
|
151
|
+
|
|
152
|
+
def do_valid_update
|
|
153
|
+
put :update, :id => '1', 'client_application'=>{'name' => 'updated site'}
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def do_invalid_update
|
|
157
|
+
put :update, :id => '1', 'client_application'=>{'name' => nil}
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
it "should redirect to show client_application" do
|
|
161
|
+
do_valid_update
|
|
162
|
+
response.should be_redirect
|
|
163
|
+
response.should redirect_to(:action => "show", :id => 1)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
it "should assign client_applications" do
|
|
167
|
+
do_invalid_update
|
|
168
|
+
assigns[:client_application].should == ClientApplication.find(1)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
it "should render show template" do
|
|
172
|
+
do_invalid_update
|
|
173
|
+
response.should render_template('edit')
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
end
|