module DoorkeeperSsoClient::Mixins::Devise::ControllerHelpers::ClassMethods

Public Instance Methods

activate_sso(scope, options = {}) click to toggle source
# File lib/doorkeeper_sso_client/mixins/devise/controller_helpers.rb, line 8
          def activate_sso(scope, options = {})
            class_eval <<-METHODS, __FILE__, __LINE__ + 1
              def validate_passport!
                if #{scope}_signed_in? and !current_#{scope}.passports.find_by_uid(session['passport_id']).try(:active?)
                  sign_out(current_#{scope})
                end
                return true
              end

              def after_sign_out_path_for(resource_or_scope)
                return File.join( DoorkeeperSsoClient::Config.base_uri, "logout?app_id=" + DoorkeeperSsoClient::Config.oauth_client_id.to_s ) if scope_match? resource_or_scope, :#{scope}
                super
              end

              def after_sign_in_path_for(resource_or_scope)
                if scope_match? resource_or_scope, :#{scope}
                  request.env['omniauth.origin'] || super
                else
                  super
                end
              end

              def after_omniauth_failure_path_for(scope)
                return File.join( DoorkeeperSsoClient::Config.base_uri, "logout?app_id=" + DoorkeeperSsoClient::Config.oauth_client_id.to_s )
              end

              def sign_out(resource_or_scope=nil)
                return sign_out_all_scopes unless resource_or_scope
                if scope_match? resource_or_scope, :#{scope}
                  session['passport_id'] = nil
                end
                super
              end

              def sign_out_all_scopes(lock=true)
                session['passport_id'] = nil
                super
              end

              def scope_match?(resource_or_scope, scope_sym)
                scope = ::Devise::Mapping.find_scope!(resource_or_scope)
                return scope == scope_sym
              end

              def authenticate_#{scope}!
                store_location_for(:#{scope}, request.original_url)
                validate_passport!
                redirect_to DoorkeeperSsoClient::Config.oauth_login_path + "?origin=" + URI.encode(request.original_url) unless #{scope}_signed_in?
              end
            METHODS
          end