sso-auth 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (26) hide show
  1. checksums.yaml +7 -0
  2. data/README.rdoc +5 -11
  3. data/app/controllers/{sso_auth → sso/auth}/omniauth_callbacks_controller.rb +1 -1
  4. data/app/controllers/{sso_auth → sso/auth}/sessions_controller.rb +1 -1
  5. data/config/initializers/devise.rb +62 -24
  6. data/lib/generators/sso/auth/install_generator.rb +49 -0
  7. data/lib/generators/{sso-auth/install → sso/auth}/templates/app/controllers/manage/application_controller.rb +0 -0
  8. data/lib/generators/{sso-auth/install → sso/auth}/templates/app/models/ability.rb +0 -0
  9. data/lib/generators/{sso-auth/install → sso/auth}/templates/app/models/permission.rb +1 -0
  10. data/lib/generators/{sso-auth/install → sso/auth}/templates/app/models/user.rb +0 -0
  11. data/lib/generators/{sso-auth/install → sso/auth}/templates/db/migrate/create_permissions.rb +5 -0
  12. data/lib/generators/{sso-auth/install → sso/auth}/templates/db/migrate/create_users.rb +0 -0
  13. data/lib/generators/sso/auth/templates/public/403.html +26 -0
  14. data/lib/generators/{sso-auth/install → sso/auth}/templates/spec/models/ability_spec.rb +0 -0
  15. data/lib/sso/auth.rb +10 -0
  16. data/lib/sso/auth/engine.rb +103 -0
  17. data/lib/sso/auth/spec_helper.rb +50 -0
  18. data/lib/sso/auth/version.rb +5 -0
  19. metadata +56 -71
  20. data/config/routes.rb +0 -11
  21. data/lib/generators/sso-auth/install/install_generator.rb +0 -40
  22. data/lib/generators/sso-auth/install/templates/db/seeds.rb +0 -4
  23. data/lib/sso-auth.rb +0 -7
  24. data/lib/sso-auth/engine.rb +0 -100
  25. data/lib/sso-auth/spec_helper.rb +0 -48
  26. data/lib/sso-auth/version.rb +0 -3
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: adf457dcf0eac446e4be9b4019d8944c0abf1732
4
+ data.tar.gz: 628575cfab94a454fc20fbcd9d5c5ec7137cd0df
5
+ SHA512:
6
+ metadata.gz: bca87b39ca118375066f7797f82a718d3b06d8e3d3898777f9fe41b9366de39c10d6558a4d425e40a624b6320523d888c92e1eb73a9a05503cffe148707a1aaf
7
+ data.tar.gz: d00ae8083fec8f2465c8db79795af519aa6eda801d83c4c5b415930a4c001c4474042a1755ce3ff2a9bd35ee6e40dbf2325d349052ff8b7daf310f9b7deab031
data/README.rdoc CHANGED
@@ -6,23 +6,17 @@ Gemfile
6
6
 
7
7
  gem 'sso-auth'
8
8
 
9
+ Run
10
+ bin/rails g sso:auth:install
11
+
9
12
  Layout
10
13
 
11
14
  <body>
12
- <%= render :partial => "sso_auth/shared/header" %>
15
+ <%= render :partial => "sso-auth/shared/user_box" %>
13
16
  ...
14
17
  <%= yield %>
15
- ...
16
- <%= render :partial => "sso_auth/shared/footer" %>
17
18
  </body>
18
19
 
19
- Stylesheet
20
-
21
- *= require ...
22
- *= require sso_auth/shared // common styles
23
- *= require custom_sso_auth // customize styles
24
- */
25
-
26
20
  == License
27
21
 
28
- This project rocks and uses MIT-LICENSE.
22
+ This project rocks and uses MIT-LICENSE.
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
 
3
- class SsoAuth::OmniauthCallbacksController < Devise::OmniauthCallbacksController
3
+ class Sso::Auth::OmniauthCallbacksController < Devise::OmniauthCallbacksController
4
4
  def identity
5
5
  sign_in User.find_or_create_by_omniauth_hash(request.env['omniauth.auth']), :event => :authentication
6
6
  flash[:notice] = I18n.t('devise.omniauth_callbacks.success', :kind => I18n.t('sso-auth.provider.title'))
@@ -1,4 +1,4 @@
1
- class SsoAuth::SessionsController < ApplicationController
1
+ class Sso::Auth::SessionsController < ApplicationController
2
2
  def destroy
3
3
  reset_session
4
4
  redirect_to "#{Settings['sso.url']}/users/sign_out?redirect_uri=#{CGI.escape(redirect_uri)}"
@@ -1,13 +1,19 @@
1
1
  # Use this hook to configure devise mailer, warden hooks and so forth.
2
2
  # Many of these configuration options can be set straight in your model.
3
3
  Devise.setup do |config|
4
+ # The secret key used by Devise. Devise uses this key to generate
5
+ # random tokens. Changing this key will render invalid all existing
6
+ # confirmation, reset password and unlock tokens in the database.
7
+ config.secret_key = Settings['devise.secret']
8
+
4
9
  # ==> Mailer Configuration
5
10
  # Configure the e-mail address which will be shown in Devise::Mailer,
6
- # note that it will be overwritten if you use your own mailer class with default "from" parameter.
7
- # config.mailer_sender = "please-change-me-at-config-initializers-devise@example.com"
11
+ # note that it will be overwritten if you use your own mailer class
12
+ # with default "from" parameter.
13
+ config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com'
8
14
 
9
15
  # Configure the class responsible to send e-mails.
10
- # config.mailer = "Devise::Mailer"
16
+ # config.mailer = 'Devise::Mailer'
11
17
 
12
18
  # ==> ORM configuration
13
19
  # Load and configure the ORM. Supports :active_record (default) and
@@ -35,12 +41,12 @@ Devise.setup do |config|
35
41
  # Configure which authentication keys should be case-insensitive.
36
42
  # These keys will be downcased upon creating or modifying a user and when used
37
43
  # to authenticate or find a user. Default is :email.
38
- config.case_insensitive_keys = []
44
+ config.case_insensitive_keys = [ :email ]
39
45
 
40
46
  # Configure which authentication keys should have whitespace stripped.
41
47
  # These keys will have whitespace before and after removed upon creating or
42
48
  # modifying a user and when used to authenticate or find a user. Default is :email.
43
- config.strip_whitespace_keys = []
49
+ config.strip_whitespace_keys = [ :email ]
44
50
 
45
51
  # Tell if authentication through request.params is enabled. True by default.
46
52
  # It can be set to an array that will enable params authentication only for the
@@ -48,17 +54,18 @@ Devise.setup do |config|
48
54
  # enable it only for database (email + password) authentication.
49
55
  # config.params_authenticatable = true
50
56
 
51
- # Tell if authentication through HTTP Basic Auth is enabled. False by default.
57
+ # Tell if authentication through HTTP Auth is enabled. False by default.
52
58
  # It can be set to an array that will enable http authentication only for the
53
- # given strategies, for example, `config.http_authenticatable = [:token]` will
54
- # enable it only for token authentication.
59
+ # given strategies, for example, `config.http_authenticatable = [:database]` will
60
+ # enable it only for database authentication. The supported strategies are:
61
+ # :database = Support basic authentication with authentication key + password
55
62
  # config.http_authenticatable = false
56
63
 
57
64
  # If http headers should be returned for AJAX requests. True by default.
58
65
  # config.http_authenticatable_on_xhr = true
59
66
 
60
- # The realm used in Http Basic Authentication. "Application" by default.
61
- # config.http_authentication_realm = "Application"
67
+ # The realm used in Http Basic Authentication. 'Application' by default.
68
+ # config.http_authentication_realm = 'Application'
62
69
 
63
70
  # It will change confirmation, password recovery and other workflows
64
71
  # to behave the same regardless if the e-mail provided was right or wrong.
@@ -66,12 +73,18 @@ Devise.setup do |config|
66
73
  # config.paranoid = true
67
74
 
68
75
  # By default Devise will store the user in session. You can skip storage for
69
- # :http_auth and :token_auth by adding those symbols to the array below.
76
+ # particular strategies by setting this option.
70
77
  # Notice that if you are skipping storage for all authentication paths, you
71
78
  # may want to disable generating routes to Devise's sessions controller by
72
79
  # passing :skip => :sessions to `devise_for` in your config/routes.rb
73
80
  config.skip_session_storage = [:http_auth]
74
81
 
82
+ # By default, Devise cleans up the CSRF token on authentication to
83
+ # avoid CSRF token fixation attacks. This means that, when using AJAX
84
+ # requests for sign in and sign up, you need to get a new CSRF token
85
+ # from the server. You can disable this option at your own risk.
86
+ # config.clean_up_csrf_token_on_authentication = true
87
+
75
88
  # ==> Configuration for :database_authenticatable
76
89
  # For bcrypt, this is the cost for hashing the password and defaults to 10. If
77
90
  # using other encryptors, it sets how many times you want the password re-encrypted.
@@ -82,7 +95,7 @@ Devise.setup do |config|
82
95
  config.stretches = Rails.env.test? ? 1 : 10
83
96
 
84
97
  # Setup a pepper to generate the encrypted password.
85
- # config.pepper = "d38daf1ff1526d1a6df451bc2a0cea2e2eb02dafa36d59b4852177ad91e8e3e5948a04c6f68302740e2187fc75cb84c5cf8a1aceaef6b9278df7b407546ddea1"
98
+ # config.pepper = '<%= SecureRandom.hex(64) %>'
86
99
 
87
100
  # ==> Configuration for :confirmable
88
101
  # A period that the user is allowed to access the website even without
@@ -92,6 +105,14 @@ Devise.setup do |config|
92
105
  # the user cannot access the website without confirming his account.
93
106
  # config.allow_unconfirmed_access_for = 2.days
94
107
 
108
+ # A period that the user is allowed to confirm their account before their
109
+ # token becomes invalid. For example, if set to 3.days, the user can confirm
110
+ # their account within 3 days after the mail was sent, but on the fourth day
111
+ # their account can't be confirmed with the token any more.
112
+ # Default is nil, meaning there is no restriction on how long a user can take
113
+ # before confirming their account.
114
+ # config.confirm_within = 3.days
115
+
95
116
  # If true, requires any email changes to be confirmed (exactly the same way as
96
117
  # initial account confirmation) to be applied. Requires additional unconfirmed_email
97
118
  # db field (see migrations). Until confirmed new email is stored in
@@ -113,11 +134,11 @@ Devise.setup do |config|
113
134
  # config.rememberable_options = {}
114
135
 
115
136
  # ==> Configuration for :validatable
116
- # Range for password length. Default is 6..128.
117
- # config.password_length = 6..128
137
+ # Range for password length. Default is 8..128.
138
+ config.password_length = 8..128
118
139
 
119
140
  # Email regex used to validate email formats. It simply asserts that
120
- # an one (and only one) @ exists in the given string. This is mainly
141
+ # one (and only one) @ exists in the given string. This is mainly
121
142
  # to give user feedback and not to assert the e-mail validity.
122
143
  # config.email_regexp = /\A[^@]+@[^@]+\z/
123
144
 
@@ -126,6 +147,9 @@ Devise.setup do |config|
126
147
  # time the user will be asked for credentials again. Default is 30 minutes.
127
148
  # config.timeout_in = 30.minutes
128
149
 
150
+ # If true, expires auth token on session timeout.
151
+ # config.expire_auth_token_on_timeout = false
152
+
129
153
  # ==> Configuration for :lockable
130
154
  # Defines which strategy will be used to lock an account.
131
155
  # :failed_attempts = Locks an account after a number of failed attempts to sign in.
@@ -149,6 +173,9 @@ Devise.setup do |config|
149
173
  # Time interval to unlock the account if :time is enabled as unlock_strategy.
150
174
  # config.unlock_in = 1.hour
151
175
 
176
+ # Warn on the last attempt before the account is locked.
177
+ # config.last_attempt_warning = false
178
+
152
179
  # ==> Configuration for :recoverable
153
180
  #
154
181
  # Defines which key will be used when recovering the password for an account
@@ -164,13 +191,11 @@ Devise.setup do |config|
164
191
  # :sha1, :sha512 or encryptors from others authentication tools as :clearance_sha1,
165
192
  # :authlogic_sha512 (then you should set stretches above to 20 for default behavior)
166
193
  # and :restful_authentication_sha1 (then you should set stretches to 10, and copy
167
- # REST_AUTH_SITE_KEY to pepper)
194
+ # REST_AUTH_SITE_KEY to pepper).
195
+ #
196
+ # Require the `devise-encryptable` gem when using anything other than bcrypt
168
197
  # config.encryptor = :sha512
169
198
 
170
- # ==> Configuration for :token_authenticatable
171
- # Defines name of the authentication token params key
172
- # config.token_authentication_key = :auth_token
173
-
174
199
  # ==> Scopes configuration
175
200
  # Turn scoped views on. Before rendering "sessions/new", it will first check for
176
201
  # "users/sessions/new". It's turned off by default because it's slower if you
@@ -181,9 +206,8 @@ Devise.setup do |config|
181
206
  # devise role declared in your routes (usually :user).
182
207
  # config.default_scope = :user
183
208
 
184
- # Configure sign_out behavior.
185
- # Sign_out action can be scoped (i.e. /users/sign_out affects only :user scope).
186
- # The default is true, which means any logout action will sign out all active scopes.
209
+ # Set this configuration to false if you want /users/sign_out to sign out
210
+ # only the current scope. By default, Devise signs out all scopes.
187
211
  # config.sign_out_all_scopes = true
188
212
 
189
213
  # ==> Navigation configuration
@@ -195,7 +219,7 @@ Devise.setup do |config|
195
219
  # should add them to the navigational formats lists.
196
220
  #
197
221
  # The "*/*" below is required to match Internet Explorer requests.
198
- # config.navigational_formats = ["*/*", :html]
222
+ # config.navigational_formats = ['*/*', :html]
199
223
 
200
224
  # The default HTTP method used to sign out a resource. Default is :delete.
201
225
  config.sign_out_via = :delete
@@ -213,4 +237,18 @@ Devise.setup do |config|
213
237
  # manager.intercept_401 = false
214
238
  # manager.default_strategies(:scope => :user).unshift :some_external_strategy
215
239
  # end
240
+
241
+ # ==> Mountable engine configurations
242
+ # When using Devise inside an engine, let's call it `MyEngine`, and this engine
243
+ # is mountable, there are some extra configurations to be taken into account.
244
+ # The following options are available, assuming the engine is mounted as:
245
+ #
246
+ # mount MyEngine, at: '/my_engine'
247
+ #
248
+ # The router that invoked `devise_for`, in the example above, would be:
249
+ # config.router_name = :my_engine
250
+ #
251
+ # When using omniauth, Devise cannot automatically set Omniauth path,
252
+ # so you need to do it manually. For the users scope, it would be:
253
+ # config.omniauth_path_prefix = '/my_engine/users/auth'
216
254
  end
@@ -0,0 +1,49 @@
1
+ require 'rails/generators/migration'
2
+
3
+ module Sso
4
+ module Auth
5
+ module Generators
6
+ class InstallGenerator < Rails::Generators::Base
7
+ include Rails::Generators::Migration
8
+
9
+ source_root File.expand_path('../templates', __FILE__)
10
+
11
+ def self.next_migration_number(dirname)
12
+ @number ||= Time.now.strftime('%Y%m%d%H%M%S').to_i
13
+ @number += 1
14
+ end
15
+
16
+ def create_models
17
+ template 'app/models/ability.rb'
18
+ template 'app/models/user.rb'
19
+ template 'app/models/permission.rb'
20
+ end
21
+
22
+ def create_controllers
23
+ template 'app/controllers/manage/application_controller.rb'
24
+ end
25
+
26
+ def add_routes
27
+ route "devise_scope :users do
28
+ get 'sign_out' => 'sso/auth/sessions#destroy', :as => :destroy_user_session
29
+ get 'sign_in' => redirect('/auth/auth/identity'), :as => :new_user_session
30
+ end"
31
+ route "devise_for :users, :path => 'auth', :controllers => {:omniauth_callbacks => 'sso/auth/omniauth_callbacks'}, :skip => [:sessions]"
32
+ end
33
+
34
+ def create_specs
35
+ template 'spec/models/ability_spec.rb'
36
+ end
37
+
38
+ def create_migrations
39
+ migration_template 'db/migrate/create_users.rb'
40
+ migration_template 'db/migrate/create_permissions.rb'
41
+ end
42
+
43
+ def create_403_page
44
+ copy_file 'public/403.html', 'public/403.html'
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -12,5 +12,6 @@
12
12
  #
13
13
 
14
14
  class Permission < ActiveRecord::Base
15
+ attr_accessible :role
15
16
  sso_auth_permission :roles => [:manager, :operator]
16
17
  end
@@ -7,5 +7,10 @@ class CreatePermissions < ActiveRecord::Migration
7
7
  t.timestamps
8
8
  end
9
9
  add_index :permissions, [:user_id, :role, :context_id, :context_type], :name => 'by_user_and_role_and_context', :uniq => true
10
+
11
+ User.find_or_initialize_by_uid('1').tap do | user |
12
+ user.save(:validate => false)
13
+ user.permissions.create! :role => :manager if user.permissions.empty?
14
+ end
10
15
  end
11
16
  end
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Access Denied (403)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/403.html -->
21
+ <div class="dialog">
22
+ <h1>Access Denied</h1>
23
+ <p>You don't have permission to access this page.</p>
24
+ </div>
25
+ </body>
26
+ </html>
data/lib/sso/auth.rb ADDED
@@ -0,0 +1,10 @@
1
+ require "sso/auth/engine"
2
+
3
+ require 'cancan'
4
+ require 'devise'
5
+ require 'devise-russian'
6
+
7
+ module Sso
8
+ module Auth
9
+ end
10
+ end
@@ -0,0 +1,103 @@
1
+ module Sso
2
+ module Auth
3
+ class Engine < ::Rails::Engine
4
+ isolate_namespace Sso::Auth
5
+
6
+ config.after_initialize do
7
+ begin
8
+ Settings.define 'sso.url', :env_var => 'SSO_URL', :require => true
9
+ Settings.define 'sso.key', :env_var => 'SSO_KEY', :require => true
10
+ Settings.define 'sso.secret', :env_var => 'SSO_SECRET', :require => true
11
+ Settings.define 'devise.secret', :env_var => 'DEVISE_SECRET', :require => true
12
+
13
+ Settings.resolve!
14
+ rescue => e
15
+ puts "WARNING! #{e.message}"
16
+ end
17
+ end
18
+
19
+ initializer "sso_client.devise", :before => 'devise.omniauth' do |app|
20
+ require File.expand_path("../../../omniauth/strategies/identity", __FILE__)
21
+ Devise.setup do |config|
22
+ config.omniauth :identity, Settings['sso.key'], Settings['sso.secret'], :client_options => { :site => Settings['sso.url'] }
23
+ end
24
+ end
25
+
26
+ config.to_prepare do
27
+ ActionController::Base.class_eval do
28
+ define_singleton_method :sso_authenticate_and_authorize do
29
+ before_filter :authenticate_user!
30
+ before_filter :authorize_manage_application!
31
+ rescue_from CanCan::AccessDenied do |exception|
32
+ render :file => "#{Rails.root}/public/403", :formats => [:html], :status => 403, :layout => false
33
+ end
34
+ end
35
+
36
+ define_singleton_method :sso_load_and_authorize_resource do
37
+ sso_authenticate_and_authorize
38
+ inherit_resources
39
+ load_and_authorize_resource
40
+ end
41
+
42
+ protected
43
+
44
+ define_method :authorize_manage_application! do
45
+ authorize! :manage, :application
46
+ end
47
+ end
48
+ ActiveRecord::Base.class_eval do
49
+ def self.sso_auth_user
50
+ has_many :permissions, :dependent => :destroy
51
+
52
+ devise :omniauthable, :trackable, :timeoutable
53
+
54
+ Permission.available_roles.each do |role|
55
+ define_method "#{role}_of?" do |context|
56
+ permissions.for_role(role).for_context(context).exists?
57
+ end
58
+ define_method "#{role}?" do
59
+ permissions.for_role(role).exists?
60
+ end
61
+ end
62
+
63
+ define_method :sso_auth_name do
64
+ email? ? "#{name} <#{email}>" : name
65
+ end
66
+
67
+ define_singleton_method :find_or_create_by_omniauth_hash do |omniauth_hash|
68
+ user = User.find_by_uid(omniauth_hash[:uid])
69
+ user ||= User.find_by_email(omniauth_hash[:info][:email]) if omniauth_hash[:info][:email].present?
70
+ user ||= User.new
71
+ user.uid = omniauth_hash[:uid]
72
+ attributes = omniauth_hash[:extra][:raw_info][:user].dup || {}
73
+ attributes.delete(:uid)
74
+ attributes = attributes.merge(omniauth_hash[:info])
75
+ attributes[:raw_info] = omniauth_hash[:extra][:raw_info].to_json
76
+ attributes.each do |attribute, value|
77
+ user.send("#{attribute}=", value) if user.respond_to?("#{attribute}=")
78
+ end
79
+ user.save(:validate => false)
80
+ user
81
+ end
82
+ end
83
+
84
+ def self.sso_auth_permission(options)
85
+ define_singleton_method :available_roles do
86
+ options[:roles].map(&:to_s)
87
+ end
88
+
89
+ belongs_to :context, :polymorphic => true
90
+ belongs_to :user
91
+
92
+ validates_inclusion_of :role, :in => available_roles + available_roles.map(&:to_sym)
93
+ validates_presence_of :role, :user
94
+ validates_uniqueness_of :role, :scope => [:user_id, :context_id, :context_type]
95
+
96
+ scope :for_role, ->(role) { where(:role => role) }
97
+ scope :for_context, ->(context) { where(:context_id => context.try(:id), :context_type => context.try(:class)) }
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,50 @@
1
+ module Sso
2
+ module Auth
3
+ module SpecHelper
4
+
5
+ def ability_for(user)
6
+ Ability.new(user)
7
+ end
8
+
9
+ def create_user
10
+ @sequence ||= 0
11
+ @sequence += 1
12
+ User.new.tap do |user|
13
+ user.uid = @sequence
14
+ user.save(:validate => false)
15
+ end
16
+ end
17
+
18
+ def user_with_role(role, context=nil, prefix=nil, user=nil)
19
+ @roles ||= {}
20
+ @roles["#{prefix}_#{role}"] ||= {}
21
+ @roles["#{prefix}_#{role}"][context] ||= (user || create_user).tap do |user|
22
+ user.permissions.create!({:context => context, :role => role}, :without_protection => true)
23
+ end
24
+ end
25
+
26
+ def user
27
+ @user ||= create_user
28
+ end
29
+
30
+ def another_user
31
+ @another_user ||= create_user
32
+ end
33
+
34
+ Permission.available_roles.each do | role |
35
+ define_method "#{role}_of" do |context, params={}|
36
+ user_with_role role, context, nil, params[:user]
37
+ end
38
+ define_method "#{role}" do
39
+ self.send("#{role}_of", nil)
40
+ end
41
+ define_method "another_#{role}_of" do |context, params={}|
42
+ user_with_role role, context, "another", params[:user]
43
+ end
44
+ define_method "another_#{role}" do
45
+ self.send("another_#{role}_of", nil)
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,5 @@
1
+ module Sso
2
+ module Auth
3
+ VERSION = "0.0.7"
4
+ end
5
+ end
metadata CHANGED
@@ -1,174 +1,167 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sso-auth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
5
- prerelease:
4
+ version: 0.0.7
6
5
  platform: ruby
7
6
  authors:
8
7
  - http://openteam.ru
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-03-15 00:00:00.000000000 Z
11
+ date: 2013-11-29 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: cancan
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: configliere
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: devise
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: devise-russian
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
60
67
  - !ruby/object:Gem::Version
61
68
  version: '0'
62
69
  - !ruby/object:Gem::Dependency
63
70
  name: omniauth
64
71
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
72
  requirements:
67
- - - ! '>='
73
+ - - '>='
68
74
  - !ruby/object:Gem::Version
69
75
  version: '0'
70
76
  type: :runtime
71
77
  prerelease: false
72
78
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
79
  requirements:
75
- - - ! '>='
80
+ - - '>='
76
81
  - !ruby/object:Gem::Version
77
82
  version: '0'
78
83
  - !ruby/object:Gem::Dependency
79
84
  name: omniauth-oauth2
80
85
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
86
  requirements:
83
- - - ! '>='
87
+ - - '>='
84
88
  - !ruby/object:Gem::Version
85
89
  version: '0'
86
90
  type: :runtime
87
91
  prerelease: false
88
92
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
93
  requirements:
91
- - - ! '>='
94
+ - - '>='
92
95
  - !ruby/object:Gem::Version
93
96
  version: '0'
94
97
  - !ruby/object:Gem::Dependency
95
98
  name: annotate
96
99
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
100
  requirements:
99
- - - ! '>='
101
+ - - '>='
100
102
  - !ruby/object:Gem::Version
101
103
  version: '0'
102
104
  type: :development
103
105
  prerelease: false
104
106
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
107
  requirements:
107
- - - ! '>='
108
+ - - '>='
108
109
  - !ruby/object:Gem::Version
109
110
  version: '0'
110
111
  - !ruby/object:Gem::Dependency
111
112
  name: rails
112
113
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
114
  requirements:
115
- - - ! '>='
115
+ - - '>='
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
121
  requirements:
123
- - - ! '>='
122
+ - - '>='
124
123
  - !ruby/object:Gem::Version
125
124
  version: '0'
126
125
  - !ruby/object:Gem::Dependency
127
126
  name: rspec-rails
128
127
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
128
  requirements:
131
- - - ! '>='
129
+ - - '>='
132
130
  - !ruby/object:Gem::Version
133
131
  version: '0'
134
132
  type: :development
135
133
  prerelease: false
136
134
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
135
  requirements:
139
- - - ! '>='
136
+ - - '>='
140
137
  - !ruby/object:Gem::Version
141
138
  version: '0'
142
139
  - !ruby/object:Gem::Dependency
143
140
  name: shoulda-matchers
144
141
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
142
  requirements:
147
- - - ! '>='
143
+ - - '>='
148
144
  - !ruby/object:Gem::Version
149
145
  version: '0'
150
146
  type: :development
151
147
  prerelease: false
152
148
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
149
  requirements:
155
- - - ! '>='
150
+ - - '>='
156
151
  - !ruby/object:Gem::Version
157
152
  version: '0'
158
153
  - !ruby/object:Gem::Dependency
159
154
  name: sqlite3
160
155
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
156
  requirements:
163
- - - ! '>='
157
+ - - '>='
164
158
  - !ruby/object:Gem::Version
165
159
  version: '0'
166
160
  type: :development
167
161
  prerelease: false
168
162
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
163
  requirements:
171
- - - ! '>='
164
+ - - '>='
172
165
  - !ruby/object:Gem::Version
173
166
  version: '0'
174
167
  description: Description of SsoAuth.
@@ -178,58 +171,50 @@ executables: []
178
171
  extensions: []
179
172
  extra_rdoc_files: []
180
173
  files:
181
- - app/controllers/sso_auth/omniauth_callbacks_controller.rb
182
- - app/controllers/sso_auth/sessions_controller.rb
174
+ - app/controllers/sso/auth/omniauth_callbacks_controller.rb
175
+ - app/controllers/sso/auth/sessions_controller.rb
183
176
  - app/views/sso-auth/shared/_user_box.html.erb
184
177
  - config/initializers/devise.rb
185
178
  - config/locales/en.yml
186
179
  - config/locales/ru.yml
187
- - config/routes.rb
188
- - lib/generators/sso-auth/install/install_generator.rb
189
- - lib/generators/sso-auth/install/templates/app/controllers/manage/application_controller.rb
190
- - lib/generators/sso-auth/install/templates/app/models/ability.rb
191
- - lib/generators/sso-auth/install/templates/app/models/permission.rb
192
- - lib/generators/sso-auth/install/templates/app/models/user.rb
193
- - lib/generators/sso-auth/install/templates/db/migrate/create_permissions.rb
194
- - lib/generators/sso-auth/install/templates/db/migrate/create_users.rb
195
- - lib/generators/sso-auth/install/templates/db/seeds.rb
196
- - lib/generators/sso-auth/install/templates/spec/models/ability_spec.rb
180
+ - lib/generators/sso/auth/install_generator.rb
181
+ - lib/generators/sso/auth/templates/app/controllers/manage/application_controller.rb
182
+ - lib/generators/sso/auth/templates/app/models/ability.rb
183
+ - lib/generators/sso/auth/templates/app/models/permission.rb
184
+ - lib/generators/sso/auth/templates/app/models/user.rb
185
+ - lib/generators/sso/auth/templates/db/migrate/create_permissions.rb
186
+ - lib/generators/sso/auth/templates/db/migrate/create_users.rb
187
+ - lib/generators/sso/auth/templates/public/403.html
188
+ - lib/generators/sso/auth/templates/spec/models/ability_spec.rb
197
189
  - lib/omniauth/strategies/identity.rb
198
- - lib/sso-auth/engine.rb
199
- - lib/sso-auth/spec_helper.rb
200
- - lib/sso-auth/version.rb
201
- - lib/sso-auth.rb
190
+ - lib/sso/auth/engine.rb
191
+ - lib/sso/auth/spec_helper.rb
192
+ - lib/sso/auth/version.rb
193
+ - lib/sso/auth.rb
202
194
  - MIT-LICENSE
203
195
  - Rakefile
204
196
  - README.rdoc
205
197
  homepage:
206
198
  licenses: []
199
+ metadata: {}
207
200
  post_install_message:
208
201
  rdoc_options: []
209
202
  require_paths:
210
203
  - lib
211
204
  required_ruby_version: !ruby/object:Gem::Requirement
212
- none: false
213
205
  requirements:
214
- - - ! '>='
206
+ - - '>='
215
207
  - !ruby/object:Gem::Version
216
208
  version: '0'
217
- segments:
218
- - 0
219
- hash: -4140832109074497253
220
209
  required_rubygems_version: !ruby/object:Gem::Requirement
221
- none: false
222
210
  requirements:
223
- - - ! '>='
211
+ - - '>='
224
212
  - !ruby/object:Gem::Version
225
213
  version: '0'
226
- segments:
227
- - 0
228
- hash: -4140832109074497253
229
214
  requirements: []
230
215
  rubyforge_project:
231
- rubygems_version: 1.8.24
216
+ rubygems_version: 2.1.11
232
217
  signing_key:
233
- specification_version: 3
218
+ specification_version: 4
234
219
  summary: Summary of SsoAuth.
235
220
  test_files: []
data/config/routes.rb DELETED
@@ -1,11 +0,0 @@
1
- Rails.application.routes.draw do
2
- devise_for :users, :path => 'auth',
3
- :controllers => {:omniauth_callbacks => 'sso_auth/omniauth_callbacks'},
4
- :skip => [:sessions]
5
-
6
- devise_scope :users do
7
- get 'sign_out' => 'sso-auth/sessions#destroy', :as => :destroy_user_session
8
- get 'sign_in' => redirect('/auth/auth/identity'), :as => :new_user_session
9
- end
10
- end
11
-
@@ -1,40 +0,0 @@
1
- require 'rails/generators/migration'
2
-
3
- module SsoAuth
4
- module Generators
5
- class InstallGenerator < Rails::Generators::Base
6
- include Rails::Generators::Migration
7
-
8
- source_root File.expand_path('../templates', __FILE__)
9
-
10
- def self.next_migration_number(dirname)
11
- @number ||= Time.now.strftime('%Y%m%d%H%M%S').to_i
12
- @number += 1
13
- end
14
-
15
- def create_models
16
- template 'app/models/ability.rb'
17
- template 'app/models/user.rb'
18
- template 'app/models/permission.rb'
19
- end
20
-
21
- def create_controllers
22
- template 'app/controllers/manage/application_controller.rb'
23
- end
24
-
25
- def create_seeds
26
- template 'db/seeds.rb'
27
- end
28
-
29
- def create_specs
30
- template 'spec/models/ability_spec.rb'
31
- end
32
-
33
- def create_migrations
34
- migration_template 'db/migrate/create_users.rb'
35
- migration_template 'db/migrate/create_permissions.rb'
36
- end
37
-
38
- end
39
- end
40
- end
@@ -1,4 +0,0 @@
1
- User.find_or_initialize_by_uid('1').tap do | user |
2
- user.save(:validate => false)
3
- user.permissions.create! :role => :manager if user.permissions.empty?
4
- end
data/lib/sso-auth.rb DELETED
@@ -1,7 +0,0 @@
1
- require "sso-auth/engine"
2
-
3
- require 'cancan'
4
- require 'devise'
5
-
6
- module SsoAuth
7
- end
@@ -1,100 +0,0 @@
1
- module SsoAuth
2
- class Engine < ::Rails::Engine
3
- isolate_namespace SsoAuth
4
-
5
- config.after_initialize do
6
- begin
7
- Settings.define 'sso.url', :env_var => 'SSO_URL', :require => true
8
- Settings.define 'sso.key', :env_var => 'SSO_KEY', :require => true
9
- Settings.define 'sso.secret', :env_var => 'SSO_SECRET', :require => true
10
-
11
- Settings.resolve!
12
- rescue => e
13
- puts "WARNING! #{e.message}"
14
- end
15
- end
16
-
17
- initializer "sso_client.devise", :before => 'devise.omniauth' do |app|
18
- require File.expand_path("../../../lib/omniauth/strategies/identity", __FILE__)
19
- Devise.setup do |config|
20
- config.omniauth :identity, Settings['sso.key'], Settings['sso.secret'], :client_options => { :site => Settings['sso.url'] }
21
- end
22
- end
23
-
24
- config.to_prepare do
25
- ActionController::Base.class_eval do
26
- define_singleton_method :sso_authenticate_and_authorize do
27
- before_filter :authenticate_user!
28
- before_filter :authorize_manage_application!
29
- rescue_from CanCan::AccessDenied do |exception|
30
- render :file => "#{Rails.root}/public/403", :formats => [:html], :status => 403, :layout => false
31
- end
32
- end
33
-
34
- define_singleton_method :sso_load_and_authorize_resource do
35
- sso_authenticate_and_authorize
36
- inherit_resources
37
- load_and_authorize_resource
38
- end
39
-
40
- protected
41
-
42
- define_method :authorize_manage_application! do
43
- authorize! :manage, :application
44
- end
45
- end
46
- ActiveRecord::Base.class_eval do
47
- def self.sso_auth_user
48
- has_many :permissions, :dependent => :destroy
49
-
50
- devise :omniauthable, :trackable, :timeoutable
51
-
52
- Permission.available_roles.each do |role|
53
- define_method "#{role}_of?" do |context|
54
- permissions.for_role(role).for_context(context).exists?
55
- end
56
- define_method "#{role}?" do
57
- permissions.for_role(role).exists?
58
- end
59
- end
60
-
61
- define_method :sso_auth_name do
62
- email? ? "#{name} <#{email}>" : name
63
- end
64
-
65
- define_singleton_method :find_or_create_by_omniauth_hash do |omniauth_hash|
66
- user = User.find_by_uid(omniauth_hash[:uid])
67
- user ||= User.find_by_email(omniauth_hash[:info][:email]) if omniauth_hash[:info][:email].present?
68
- user ||= User.new
69
- user.uid = omniauth_hash[:uid]
70
- attributes = omniauth_hash[:extra][:raw_info][:user].dup || {}
71
- attributes.delete(:uid)
72
- attributes = attributes.merge(omniauth_hash[:info])
73
- attributes[:raw_info] = omniauth_hash[:extra][:raw_info].to_json
74
- attributes.each do |attribute, value|
75
- user.send("#{attribute}=", value) if user.respond_to?("#{attribute}=")
76
- end
77
- user.save(:validate => false)
78
- user
79
- end
80
- end
81
-
82
- def self.sso_auth_permission(options)
83
- define_singleton_method :available_roles do
84
- options[:roles].map(&:to_s)
85
- end
86
-
87
- belongs_to :context, :polymorphic => true
88
- belongs_to :user
89
-
90
- validates_inclusion_of :role, :in => available_roles + available_roles.map(&:to_sym)
91
- validates_presence_of :role, :user
92
- validates_uniqueness_of :role, :scope => [:user_id, :context_id, :context_type]
93
-
94
- scope :for_role, ->(role) { where(:role => role) }
95
- scope :for_context, ->(context) { where(:context_id => context.try(:id), :context_type => context.try(:class)) }
96
- end
97
- end
98
- end
99
- end
100
- end
@@ -1,48 +0,0 @@
1
- module SsoAuth
2
- module SpecHelper
3
-
4
- def ability_for(user)
5
- Ability.new(user)
6
- end
7
-
8
- def create_user
9
- @sequence ||= 0
10
- @sequence += 1
11
- User.new.tap do |user|
12
- user.uid = @sequence
13
- user.save(:validate => false)
14
- end
15
- end
16
-
17
- def user_with_role(role, context=nil, prefix=nil, user=nil)
18
- @roles ||= {}
19
- @roles["#{prefix}_#{role}"] ||= {}
20
- @roles["#{prefix}_#{role}"][context] ||= (user || create_user).tap do |user|
21
- user.permissions.create!({:context => context, :role => role}, :without_protection => true)
22
- end
23
- end
24
-
25
- def user
26
- @user ||= create_user
27
- end
28
-
29
- def another_user
30
- @another_user ||= create_user
31
- end
32
-
33
- Permission.available_roles.each do | role |
34
- define_method "#{role}_of" do |context, params={}|
35
- user_with_role role, context, nil, params[:user]
36
- end
37
- define_method "#{role}" do
38
- self.send("#{role}_of", nil)
39
- end
40
- define_method "another_#{role}_of" do |context, params={}|
41
- user_with_role role, context, "another", params[:user]
42
- end
43
- define_method "another_#{role}" do
44
- self.send("another_#{role}_of", nil)
45
- end
46
- end
47
- end
48
- end
@@ -1,3 +0,0 @@
1
- module SsoAuth
2
- VERSION = "0.0.6"
3
- end