omniauth-colorgy-oauth2 0.1.0 → 0.1.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 +4 -4
- data/README.md +6 -3
- data/{lib → app/controllers/concerns}/colorgy_devise_sso_manager.rb +13 -9
- data/{lib → app/controllers/concerns}/flash_message_reporter.rb +0 -0
- data/lib/omniauth/colorgy_oauth2/version.rb +2 -2
- data/lib/omniauth/colorgy_oauth2.rb +3 -1
- data/lib/omniauth-colorgy-oauth2.rb +5 -2
- data/omniauth-colorgy-oauth2.gemspec +2 -1
- metadata +17 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 761943b85e3233140e27f0c47719fed1a005337f
         | 
| 4 | 
            +
              data.tar.gz: 6e267348560e44db0f5964d78d8ac6fe22d99272
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 49b05775dd6c8e0d83d43301f4e0f7784c3c59872fd8241c400be2e3cbdd5915b18b54f09aa2b1889cec508e425944aa5167b10c79ff67ea73e0d680c4d7da86
         | 
| 7 | 
            +
              data.tar.gz: 182a6b13b5c534772d2b45fca99418bc86155e37ba4fa2f3288b4883cc94d06e374dfe922b55a089f9c4083dd7cccdbee2703efc5ddf1f38a7bdc966d71f4c3f
         | 
    
        data/README.md
    CHANGED
    
    | @@ -129,13 +129,14 @@ _(Optional)_ | |
| 129 129 |  | 
| 130 130 | 
             
            The Colorgy SSO system is implemented using **OAuth 2.0** as the authorization protocol and **Sign-on Status Tokens (SST)** as credential of the sign-on status of the user, achieving sign in and out seamlessly controlled by a central server.
         | 
| 131 131 |  | 
| 132 | 
            -
            The **Sign-on Status Token (SST)** is stored in an cross-domain cookie (`_sst`) to represent the sign on status of the current user.  | 
| 132 | 
            +
            The **Sign-on Status Token (SST)** is stored in an cross-domain cookie (`_sst`) to represent the sign on status of the current user. **SST**s are trully [JSON Web Tokens (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token) containing identification information, signed by a RSA private key. Clients (other services under this SSO system) will be able to decode and verify the infomation using a corresponding RSA public key, and make reasonable reactions (signs in or out the user, reauthorize from the server... etc.) according to the infomation it provided.
         | 
| 133 133 |  | 
| 134 134 | 
             
            This gem has implemented some solutions to cover certain use cases.
         | 
| 135 135 |  | 
| 136 | 
            -
             | 
| 137 136 | 
             
            ### Using Devise With Rails: `ColorgyDeviseSSOManager`
         | 
| 138 137 |  | 
| 138 | 
            +
            _An `ActiveSupport::Concern` to drop into your `ActionController` directly without any configurations to enable SSO support, if you're using devise and omniauth already._
         | 
| 139 | 
            +
             | 
| 139 140 | 
             
            > Limitations: since this tactic relys on sharing a cookie accross Colorgy core and your app, your app should be running on a subdomain of Colorgy core to make this work.
         | 
| 140 141 |  | 
| 141 142 | 
             
            First, make sure Devise is setup properly to OmniAuth with Colorgy - clicking the 'Sign in with Colorgy' link will sign you in with no doubts.
         | 
| @@ -177,7 +178,9 @@ end | |
| 177 178 |  | 
| 178 179 | 
             
            _`FlashMessageReporter` is optional, include it if you want to relay flash messages from core to your app ._
         | 
| 179 180 |  | 
| 180 | 
            -
             | 
| 181 | 
            +
            > This `ActiveSupport::Concern` is zero-configured since we can guess the URL of Core SSO by OmniAuth and Devise configurations, get the RSA public key automatically from the server, and use the User model's `uuid` (or `cid`, `sid`) and `refreshed_at` (or `synced_at`) by convention to perform certain actions like checking the user's identity or last refresh date.
         | 
| 182 | 
            +
             | 
| 183 | 
            +
            > You can also manually specify the RSA public key used to verify SSTs. Just pass it in using an environment variable called **`CORE_RSA_PUBLIC_KEY`**. Put it in your `.env` or export it like this: `export CORE_RSA_PUBLIC_KEY='-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3D ... P2QIDAQAB\n-----END PUBLIC KEY-----\n'`. Make sure it's accessible via `ENV['CORE_RSA_PUBLIC_KEY']` in your app.
         | 
| 181 184 |  | 
| 182 185 | 
             
            Now that users on your app will be signing in/out synchronizedly with Colorgy core, and is automatically reauthorized to get user's new data from core when updated.
         | 
| 183 186 |  | 
| @@ -17,26 +17,30 @@ module ColorgyDeviseSSOManager | |
| 17 17 | 
             
                sign_out_url
         | 
| 18 18 | 
             
              end
         | 
| 19 19 |  | 
| 20 | 
            -
              # Override the destroy_user_session_path to logout from core
         | 
| 21 | 
            -
              def destroy_user_session_path
         | 
| 22 | 
            -
                sign_out_url
         | 
| 23 | 
            -
              end
         | 
| 24 | 
            -
             | 
| 25 20 | 
             
              private
         | 
| 26 21 |  | 
| 27 22 | 
             
              # Getter of the core domain
         | 
| 28 23 | 
             
              def core_domain
         | 
| 29 | 
            -
                @@core_domain ||= URI.parse( | 
| 24 | 
            +
                @@core_domain ||= URI.parse(core_url).host
         | 
| 30 25 | 
             
              end
         | 
| 31 26 |  | 
| 32 27 | 
             
              # Getter of the core url
         | 
| 33 28 | 
             
              def core_url
         | 
| 34 | 
            -
                @@core_url ||= Devise.omniauth_configs[:colorgy].options[:client_options] | 
| 29 | 
            +
                @@core_url ||= if Devise.omniauth_configs[:colorgy].options[:client_options].is_a?(Hash)
         | 
| 30 | 
            +
                  Devise.omniauth_configs[:colorgy].options[:client_options][:site]
         | 
| 31 | 
            +
                else
         | 
| 32 | 
            +
                  OmniAuth::Strategies::Colorgy.new(0).options.client_options.site
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              # Getter of the core rsa public key string
         | 
| 37 | 
            +
              def core_rsa_public_key_string
         | 
| 38 | 
            +
                @@core_rsa_public_key_string ||= (ENV['CORE_RSA_PUBLIC_KEY'] || Net::HTTP.get(core_domain, '/_rsa.pub')).gsub(/\\n/, "\n")
         | 
| 35 39 | 
             
              end
         | 
| 36 40 |  | 
| 37 41 | 
             
              # Getter of the core rsa public key
         | 
| 38 42 | 
             
              def core_rsa_public_key
         | 
| 39 | 
            -
                @@core_rsa_public_key ||= OpenSSL::PKey::RSA.new( | 
| 43 | 
            +
                @@core_rsa_public_key ||= OpenSSL::PKey::RSA.new(core_rsa_public_key_string)
         | 
| 40 44 | 
             
              end
         | 
| 41 45 |  | 
| 42 46 | 
             
              # Decode the sign-on status token (sst) string and return a hash
         | 
| @@ -107,7 +111,7 @@ module ColorgyDeviseSSOManager | |
| 107 111 |  | 
| 108 112 | 
             
                # if the user isn't signed in but the sst isn't blank,
         | 
| 109 113 | 
             
                # redirect to core authorize path
         | 
| 110 | 
            -
                elsif !sst.blank?
         | 
| 114 | 
            +
                elsif !sst.blank? && request.get? && is_navigational_format?
         | 
| 111 115 | 
             
                  redirect_to user_omniauth_authorize_path(:colorgy) and return
         | 
| 112 116 | 
             
                end
         | 
| 113 117 | 
             
              end
         | 
| 
            File without changes
         | 
| @@ -1,8 +1,10 @@ | |
| 1 1 | 
             
            require "omniauth/colorgy_oauth2/version"
         | 
| 2 2 | 
             
            require File.join('omniauth', 'strategies', 'colorgy')
         | 
| 3 | 
            +
            OmniAuth.config.add_camelization('colorgy_oauth', 'ColorgyOAuth')
         | 
| 4 | 
            +
            OmniAuth.config.add_camelization('colorgy_oauth2', 'ColorgyOAuth2')
         | 
| 3 5 |  | 
| 4 6 | 
             
            module OmniAuth
         | 
| 5 | 
            -
              module  | 
| 7 | 
            +
              module ColorgyOAuth2
         | 
| 6 8 | 
             
                CORE_URL = 'https://colorgy.io'
         | 
| 7 9 | 
             
              end
         | 
| 8 10 | 
             
            end
         | 
| @@ -1,3 +1,6 @@ | |
| 1 1 | 
             
            require File.join('omniauth', 'colorgy_oauth2')
         | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 2 | 
            +
            OmniAuth.config.add_camelization('colorgy_oauth', 'ColorgyOAuth')
         | 
| 3 | 
            +
            OmniAuth.config.add_camelization('colorgy_oauth2', 'ColorgyOAuth2')
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            require File.expand_path(File.join('..', '..', 'app', 'controllers', 'concerns', 'flash_message_reporter'), __FILE__) if defined? ActiveSupport::Concern
         | 
| 6 | 
            +
            require File.expand_path(File.join('..', '..', 'app', 'controllers', 'concerns', 'colorgy_devise_sso_manager'), __FILE__) if defined? Devise && defined? ActiveSupport::Concern
         | 
| @@ -5,7 +5,7 @@ require 'omniauth/colorgy_oauth2/version' | |
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |spec|
         | 
| 7 7 | 
             
              spec.name          = "omniauth-colorgy-oauth2"
         | 
| 8 | 
            -
              spec.version       = OmniAuth:: | 
| 8 | 
            +
              spec.version       = OmniAuth::ColorgyOAuth2::VERSION
         | 
| 9 9 | 
             
              spec.authors       = ["Neson"]
         | 
| 10 10 | 
             
              spec.email         = ["neson@dex.tw"]
         | 
| 11 11 |  | 
| @@ -29,6 +29,7 @@ Gem::Specification.new do |spec| | |
| 29 29 |  | 
| 30 30 | 
             
              spec.add_runtime_dependency 'omniauth', '>= 1.1.1'
         | 
| 31 31 | 
             
              spec.add_runtime_dependency 'omniauth-oauth2', '>= 1.1.1'
         | 
| 32 | 
            +
              spec.add_runtime_dependency 'jwt', '>= 1.0.0'
         | 
| 32 33 | 
             
              spec.add_development_dependency "bundler"
         | 
| 33 34 | 
             
              spec.add_development_dependency "rake"
         | 
| 34 35 | 
             
              spec.add_development_dependency "rspec"
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: omniauth-colorgy-oauth2
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Neson
         | 
| @@ -38,6 +38,20 @@ dependencies: | |
| 38 38 | 
             
                - - ">="
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 40 | 
             
                    version: 1.1.1
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: jwt
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - ">="
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: 1.0.0
         | 
| 48 | 
            +
              type: :runtime
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - ">="
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: 1.0.0
         | 
| 41 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 56 | 
             
              name: bundler
         | 
| 43 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -95,10 +109,10 @@ files: | |
| 95 109 | 
             
            - LICENSE.txt
         | 
| 96 110 | 
             
            - README.md
         | 
| 97 111 | 
             
            - Rakefile
         | 
| 112 | 
            +
            - app/controllers/concerns/colorgy_devise_sso_manager.rb
         | 
| 113 | 
            +
            - app/controllers/concerns/flash_message_reporter.rb
         | 
| 98 114 | 
             
            - bin/console
         | 
| 99 115 | 
             
            - bin/setup
         | 
| 100 | 
            -
            - lib/colorgy_devise_sso_manager.rb
         | 
| 101 | 
            -
            - lib/flash_message_reporter.rb
         | 
| 102 116 | 
             
            - lib/omniauth-colorgy-oauth2.rb
         | 
| 103 117 | 
             
            - lib/omniauth/colorgy_oauth2.rb
         | 
| 104 118 | 
             
            - lib/omniauth/colorgy_oauth2/version.rb
         |