databasedotcom-oauth2 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,76 +1,145 @@
1
- # databasedotcom-oauth2
1
+ What is databasedotcom-oauth2?
2
+ ------------------------------
3
+ * an extension of the [databasedotcom](https://rubygems.org/gems/databasedotcom) gem that simplifies authentication and authorization with [salesforce.com](http://salesforce.com/) for Ruby web apps via OAuth 2.0
4
+ * a Ruby gem intended to run as Rack Middleware
5
+ * an alternative to using [OmniAuth](http://www.omniauth.org/) and the corresponding [omniauth-salesforce](https://rubygems.org/gems/omniauth-salesforce) gem.
2
6
 
3
- Rack Middleware for OAuth2 authentication against, and interaction with salesforce.com via the databasedotcom gem.
7
+ When and why should I use it instead of OmniAuth?
8
+ ---------------------------------------------------------------
9
+ Many Ruby web apps integrated with [salesforce.com](http://salesforce.com/) need more than just identification, they also need to _interact_ with [salesforce.com](http://salesforce.com/) via the [databasedotcom](https://rubygems.org/gems/databasedotcom) gem. Both OmniAuth and databasedotcom-oauth2 provide identification; however, databasedotcom-oauth2 makes the interaction part easier.
4
10
 
5
- ### Who's it for?
11
+ Specifically, databasedotcom-oauth2:
6
12
 
7
- RubyDevelopers of
8
- Whereas OmniAuth only provides authentication, this Rack Middleware assumes you lso instantiates a Databasedotcom::Client while providing an
13
+ * allows multiple saleforce.com endpoints (production, sandbox, etc.)
14
+ * supports configuration of scope, display, and immediate OAuth 2.0 parameters
15
+ * supports My Domain
16
+ * maintains an encrypted OAuth 2.0 token in whatever session store you choose (Cookie, Pool, etc)
17
+ * materializes a [databasedotcom](https://rubygems.org/gems/databasedotcom) client upon each request (using the token in session)
18
+ * provides a mixin for your app containing utility methods like unauthenticated?, client, etc.
9
19
 
10
- authentication and you need to query or manipulate salesforce.com data in addition to authentication.
20
+ Demos
21
+ -------
11
22
 
12
- ### Benefits:
23
+ **<a href="https://db-oauth2-sinatra-basic.herokuapp.com" target="_blank">Simple example using Sinatra</a>**&nbsp;&nbsp;<a href="https://github.com/richardvanhook/databasedotcom-oauth2-sinatra-basic" target="_blank">view source on github</a>
13
24
 
14
- * Hides OAuth2 hand-shake complexity against multiple salesforce.com endpoints (prod vs sandbox) including support for My Domain.
15
- * Configurable/override-able options for scope, display, immediate
16
- * OAuth2 Token encrypted and stored in session, supports any Rack:Session type - Cookie, Pool, etc.
17
- * Materializes Databasedotcom::Client from token upon each request
18
- * Databasedotcom::OAuth2::Helpers mixin provides convenience methods client, me, etc.
25
+ **<a href="https://db-oauth2-sinatra-jqm.herokuapp.com" target="_blank">In-depth configuration with JQuery Mobile</a>**&nbsp;&nbsp;<a href="https://github.com/richardvanhook/databasedotcom-oauth2-sinatra-jqm" target="_blank">view source on github</a>
19
26
 
20
- ## Demos
27
+ Usage
28
+ -------
21
29
 
22
- <a href="https://db-oauth2-sinatra-basic.herokuapp.com" target="_blank">Sinatra Basic</a><a href="https://github.com/richardvanhook/databasedotcom-oauth2-sinatra-basic" target="_blank">(source)</a>
30
+ ### Minimal
23
31
 
24
- <a href="https://db-oauth2-sinatra-jqm.herokuapp.com" target="_blank">Sinatra showing authentication options along with JQuery Mobile</a><a href="https://github.com/richardvanhook/databasedotcom-oauth2-sinatra-jqm" target="_blank">(source)</a>
25
-
26
- ## Usage
32
+ ```ruby
33
+ require "databasedotcom-oauth"
34
+ use Databasedotcom::OAuth2::WebServerFlow,
35
+ :token_encryption_key => "replace me",
36
+ :endpoints => {"login.salesforce.com" => {:key => "replace me", :secret => "replace me"}}
37
+ ```
27
38
 
28
- ### Required
39
+ Insert above code wherever your [Rack](http://rack.github.com/) Stack is defined. See [Required Configuration Parameters](#required-configuration-parameters) for more information on parameters.
29
40
 
30
- `:token_encryption_key` & `:endpoints` are required. databasedotcom-oauth2 encrypts oauth2 token using `:token_encryption_key` and stores it in rack.session for further use. `:endpoints` defines the server endpoints to be available; multiple can be specified but at least one is required.
41
+ ### Multiple Endpoints
31
42
 
32
43
  ```ruby
33
44
  use Databasedotcom::OAuth2::WebServerFlow,
34
- :token_encryption_key => TOKEN_ENCRYPTION_KEY,
35
- :endpoints => {"login.salesforce.com" => {:keys => CLIENT_ID, :secret => CLIENT_SECRET}}
45
+ :endpoints => {"login.salesforce.com" => {:key => "replace me", :secret => "replace me"},
46
+ "test.salesforce.com" => {:key => "replace me", :secret => "replace me"}}
36
47
  ```
37
48
 
38
- ### Multiple Endpoints
39
-
49
+ ### Authentication
40
50
  ```ruby
41
51
  use Databasedotcom::OAuth2::WebServerFlow,
42
- :endpoints => {"login.salesforce.com" => {:keys => CLIENT_ID1, :secret => CLIENT_SECRET1},
43
- "test.salesforce.com" => {:keys => CLIENT_ID2, :secret => CLIENT_SECRET2}}
52
+ :display => "touch" , #default is "page"
53
+ :immediate => true , #default is false
54
+ :prompt => "login consent", #default is nil
55
+ :scope => "full" #default is "id api refresh_token"
44
56
  ```
45
- ### Authentication Options
57
+
58
+ ### Miscellaneous
46
59
  ```ruby
47
60
  use Databasedotcom::OAuth2::WebServerFlow,
48
- :scope => "full", #default is "id api refresh_token"
49
- :display => "touch", #default is "page"
50
- :immediate => true #default is false
51
- :scope_override => true, #default is false
52
- :display_override => true, #default is false
53
- :immediate_override => true, #default is false
61
+ :api_version => "24.0" , #default is 25.0
62
+ :debugging => "true" , #default is false
63
+ :path_prefix => "/auth/sfdc" #default is /auth/salesforce
54
64
  ```
55
65
 
56
- ## Parameters
66
+ Required Configuration Parameters
67
+ -----------------------------------
57
68
 
58
- ### `:endpoints`
69
+ * **`:endpoints`**
59
70
 
71
+ Hash of remote access applications; at least one is required. Values must be generated via [salesforce.com](http://salesforce.com/) at Setup > App Setup > Develop > Remote Access. Only one remote access application is needed for production, sandbox, or pre-release; separate entries are not necessary for My Domain.
60
72
 
73
+ Example:
74
+ ```ruby
75
+ :endpoints => {"login.salesforce.com" => {:key => "replace me", :secret => "replace me"}
76
+ "test.salesforce.com" => {:key => "replace me", :secret => "replace me"}}
77
+ ```
61
78
 
62
- ### `:token_encryption_key`
79
+ *Default:* nil
63
80
 
64
- It's uber important that `:token_encryption_key` is sufficiently strong. To generate a sufficiently strong key, run following:
81
+ * **`:token_encryption_key`**
65
82
 
66
- $ ruby -ropenssl -rbase64 -e "puts Base64.strict_encode64(OpenSSL::Random.random_bytes(16).to_str)"
83
+ Encrypts OAuth 2.0 token prior to persistence in session store. Any Rack session store can be used: Rack:Session:Cookie, Rack:Session:Pool, etc. A sufficiently strong key **must** be generated. It's recommended you use the following command to generate a random key value.
67
84
 
68
- Then, in your code, decrypt prior using:
85
+ ```
86
+ ruby -ropenssl -rbase64 -e "puts Base64.strict_encode64(OpenSSL::Random.random_bytes(16).to_str)"
87
+ ```
69
88
 
70
- ```ruby
71
- Base64.strict_decode64(TOKEN_ENCRYPTION_KEY)
72
- ```
89
+ It's also recommended you store the key value as an environment variable as opposed to a string literal in your code. To both create the key value and store as an environment variable, use this command:
90
+
91
+ ```
92
+ export TOKEN=`ruby -ropenssl -rbase64 -e "puts Base64.strict_encode64(OpenSSL::Random.random_bytes(16).to_str)"`
93
+ ```
94
+
95
+ Then, in your code, decrypt prior to use:
73
96
 
74
- ## Resources
97
+ ```ruby
98
+ require "base64"
99
+ Base64.strict_decode64(ENV['TOKEN'])
100
+ ```
101
+
102
+ *Default:* nil
103
+
104
+ Optional Configuration Parameters
105
+ -----------------------------------
106
+
107
+ * **`:display`, `:immediate`, `:prompt`, `:scope`**
108
+
109
+ Values passed directly to [salesforce.com](http://salesforce.com/) which control authentication behavior. See [OAuth 2.0 Web Server Authentication Flow](http://na12.salesforce.com/help/doc/en/remoteaccess_oauth_web_server_flow.htm#heading_2_1) for detailed explanation as well as valid and default values.
110
+
111
+ *Default:* see [OAuth 2.0 Web Server Authentication Flow](http://na12.salesforce.com/help/doc/en/remoteaccess_oauth_web_server_flow.htm#heading_2_1)
112
+
113
+ * **`:display_override`,`:immediate_override`, `:prompt_override`,`:scope_override`**
75
114
 
115
+ Allow correspondingly named parameter to be overridden at runtime via http parameter of same name. For example, if your app is capable of detecting the client device type, set **`:display_override`** to true and pass a display http parameter to `/auth/salesforce`.
116
+
117
+ *Default:* false
118
+
119
+ * **`:api_version`**
120
+
121
+ For explanation of api versions, see [What's New in Version XX.X](http://www.salesforce.com/us/developer/docs/api/Content/whats_new.htm)
122
+
123
+ *Default:* 25.0
124
+
125
+ * **`:debugging`**
126
+
127
+ Will enable debug output for both this gem and [databasedotcom](https://rubygems.org/gems/databasedotcom).
128
+
129
+ *Default:* false
130
+
131
+ * **`:on_failure`**
132
+
133
+ A lambda block to be executed upon authentication failure.
134
+
135
+ *Default:* redirect to `/auth/salesforce/failure` with error message passed via message http parameter.
136
+
137
+ * **`:path_prefix`**
138
+
139
+ The path that signals databasedotcom-oauth2 to initiate authentication with [salesforce.com](http://salesforce.com/).
140
+
141
+ *Default:* /auth/salesforce
142
+
143
+ ## Resources
144
+ * [OAuth 2.0 Web Server Authentication Flow](http://na12.salesforce.com/help/doc/en/remoteaccess_oauth_web_server_flow.htm)
76
145
  * [Article: Digging Deeper into OAuth 2.0 on Force.com](http://wiki.developerforce.com/index.php/Digging_Deeper_into_OAuth_2.0_on_Force.com)
@@ -1,5 +1,5 @@
1
1
  module Databasedotcom
2
2
  module OAuth2
3
- VERSION = "0.1.8"
3
+ VERSION = "0.1.9"
4
4
  end
5
5
  end
@@ -50,11 +50,6 @@ module Databasedotcom
50
50
  client
51
51
  end
52
52
 
53
- #def set_org_and_user_id(orgid, userid)
54
- # @org_id = orgid
55
- # @user_id = userid
56
- #end
57
-
58
53
  def org_id=(val)
59
54
  @org_id = val
60
55
  end
@@ -101,13 +96,15 @@ module Databasedotcom
101
96
  @token_encryption_key = options[:token_encryption_key]
102
97
  @path_prefix = options[:path_prefix]
103
98
  @on_failure = options[:on_failure]
104
- @scope = options[:scope]
105
99
  @display = options[:display]
106
100
  @immediate = options[:immediate]
107
- @scope_override = options[:scope_override] || false
101
+ @prompt = options[:prompt]
102
+ @scope = options[:scope]
108
103
  @display_override = options[:display_override] || false
109
104
  @immediate_override = options[:immediate_override] || false
110
- @api_version = options[:api_version] || "24.0"
105
+ @prompt_override = options[:prompt_override] || false
106
+ @scope_override = options[:scope_override] || false
107
+ @api_version = options[:api_version] || "25.0"
111
108
  @debugging = options[:debugging] || false
112
109
  end
113
110
 
@@ -180,18 +177,20 @@ module Databasedotcom
180
177
  :redirect_uri => "#{full_host}#{@path_prefix}/callback",
181
178
  :state => state.to_str
182
179
  }
183
- auth_params[:scope] = @scope unless @scope.nil? || @scope.strip.empty?
184
180
  auth_params[:display] = @display unless @display.nil?
185
181
  auth_params[:immediate] = @immediate unless @immediate.nil?
186
-
182
+ auth_params[:prompt] = @prompt unless @prompt.nil?
183
+ auth_params[:scope] = @scope unless @scope.nil? || @scope.strip.empty?
184
+
187
185
  #overrides
188
186
  overrides = {}
187
+ overrides[:display] = request.params["display"] unless !@display_override || request.params["display"].nil?
188
+ overrides[:immediate] = request.params["immediate"] unless !@immediate_override || request.params["immediate"].nil?
189
+ overrides[:prompt] = request.params["prompt"] unless !@prompt_override || request.params["prompt"].nil?
189
190
  if @scope_override
190
191
  scope = (self.class.param_repeated(request.url, :scope) || []).join(" ")
191
192
  overrides[:scope] = scope unless scope.nil? || scope.strip.empty?
192
193
  end
193
- overrides[:display] = request.params["display"] unless !@display_override || request.params["display"].nil?
194
- overrides[:immediate] = request.params["immediate"] unless !@immediate_override || request.params["immediate"].nil?
195
194
  auth_params.merge!(overrides)
196
195
 
197
196
  #do redirect
@@ -319,7 +318,6 @@ module Databasedotcom
319
318
  full_host = URI.parse(request.url.gsub(/\?.*$/,''))
320
319
  full_host.path = ''
321
320
  full_host.query = nil
322
- #sometimes the url is actually showing http inside rails because the other layers (like nginx) have handled the ssl termination.
323
321
  full_host.scheme = 'https' if(request.env['HTTP_X_FORWARDED_PROTO'] == 'https')
324
322
  full_host = full_host.to_s
325
323
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: databasedotcom-oauth2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-27 00:00:00.000000000 Z
12
+ date: 2012-07-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: addressable