grape_session 0.0.2 → 0.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7e7d06bb6b8284a27df8bfb896abe49a456f64f2
4
- data.tar.gz: f27a92fcce4b9c191133a033da00186d08d32b50
3
+ metadata.gz: 858265d4420dd157f8c933b293aa97b90ac784eb
4
+ data.tar.gz: 9c6fa6d502dd7890d3965ff466104974ada96219
5
5
  SHA512:
6
- metadata.gz: 1b3ec0ef90c5cf13f77a262b87904b9857b4587add4dd5a59626e7ebb9b87b7252c34b4787ce88a4aeb0acd41ee2875aa2fb39b00e98a1f8be0c8d439e2bd701
7
- data.tar.gz: c04593f25a502070d6773cd3f5f4ad183c276b20fb0967662e58215583be24ad8eb328c575a4054a84c8b8269fc01c9728b22a5c9caa0e5b7f93ff4044200d8f
6
+ metadata.gz: 8efbefeb86b221f395f250eeb2dbcf06535e480a69043f7b3ea9a0929789aa8d351631cae2053fe02ed43a0b6dd46db49381132d61b47684d2f4490e5b8eb833
7
+ data.tar.gz: 3dcde22738396fbd66b3842d77db28b1c6e6f1130514bbb7dcb715f5741469f257b43ff850986776a0bf103b0c1dfd5984f7654ee07954909ec95137f4e837fa
data/README.md CHANGED
@@ -1,9 +1,7 @@
1
1
  # GrapeSession (Project-State: Proposal)
2
2
 
3
- Make Rails session and cookie handling available for grape. `cookies` method
4
- will return an `ActionDispatch::Cookies::CookieJar` instead of `Grape::Cookie`.
5
-
6
- A method `session` is added.
3
+ Make Rails cookies based session handling available for grape. `session` method
4
+ is added to the Endpoint classes.
7
5
 
8
6
  The following classes will be monkey patched:
9
7
 
@@ -33,32 +31,32 @@ Or install it yourself as:
33
31
  class API < Grape::API
34
32
  include GrapeSession::Ext::API
35
33
 
36
- GrapeSession::Middleware::EnvSetup.settings {
37
- signed_cookie_salt: 'signed cookie',
38
- encrypted_cookie_salt: 'encrypted cookie',
39
- encrypted_signed_cookie_salt: 'signed encrypted cookie',
40
- secret_token: 'secret_token',
41
- secret_key_base: 'secret base',
42
- cookies_serializer: :json
43
-
44
- session_options: {
45
- # Rails specific ActionDispatch::Compatibility
46
- key: '_grape_session_id'
47
- # Rack::Session::Abstract::ID specific
48
- domain: 'foo.com',
49
- path: '/',
50
- expire_after: 2592000,
51
- secure: false,
52
- httponly: true,
53
- defer: false,
54
- renew: false,
55
- }
56
- }
34
+ # Setup cookie settings
35
+ GrapeCookies::Middleware::EnvSetup.configure do
36
+ signed_cookie_salt 'signed cookie'
37
+ encrypted_cookie_salt 'encrypted cookie'
38
+ encrypted_signed_cookie_salt 'signed encrypted cookie'
39
+ secret_token 'secret_token'
40
+ secret_key_base 'secret base'
41
+ cookies_serializer :json
42
+ end
43
+
44
+ # Setup session settings
45
+ GrapeSession::Configuration.configure do
46
+ # Rails specific ActionDispatch::Compatibility
47
+ key '_grape_session_id'
48
+ # Rack::Session::Abstract::ID specific
49
+ domain 'foo.com'
50
+ path '/'
51
+ expire_after 2592000
52
+ secure false
53
+ httponly true
54
+ defer false
55
+ renew false
56
+ end
57
57
 
58
58
 
59
59
  get '/test' do
60
- cookies.signed['test_signed'] = '1234'
61
- cookies['test_unsigned_signed'] = 'unsigned_1234'
62
60
  session['session_test'] = 'session_test_value'
63
61
  end
64
62
 
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.version = GrapeSession::VERSION
9
9
  spec.authors = ['Dieter Späth']
10
10
  spec.email = ['d.spaeth@faber.de']
11
- spec.summary = 'Adds Rails like session and cookie support to grape api'
12
- spec.description = 'Adds Rails like session and cookie support to grape api'
11
+ spec.summary = 'Adds Rails like session support to grape api'
12
+ spec.description = 'Adds Rails like session support to grape api'
13
13
  spec.homepage = 'https://github.com/faber-lotto/grape_session'
14
14
  spec.license = 'MIT'
15
15
 
@@ -24,6 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.add_runtime_dependency 'rack-accept'
25
25
  spec.add_runtime_dependency 'activesupport', '>=4.1.0'
26
26
  spec.add_runtime_dependency 'actionpack', '>=4.1.0'
27
+ spec.add_runtime_dependency 'grape_cookies'
27
28
 
28
29
  spec.add_development_dependency 'grape'
29
30
 
@@ -1,13 +1,12 @@
1
1
  require 'rack'
2
2
  require 'grape_session/version'
3
3
  require 'active_support/concern'
4
+ require 'grape_cookies'
4
5
 
5
6
  module GrapeSession
6
- require 'grape_session/middleware/env_setup'
7
+ require 'grape_session/configuration'
7
8
  require 'grape_session/ext/endpoint'
8
- require 'grape_session/ext/request'
9
9
  require 'grape_session/ext/api'
10
- require 'grape_session/ext/cookie_jar'
11
10
  end
12
11
 
13
12
  require 'grape'
@@ -15,9 +14,3 @@ require 'grape/api'
15
14
  require 'grape/endpoint'
16
15
 
17
16
  Grape::Endpoint.send(:include, GrapeSession::Ext::Endpoint)
18
- Grape::Request.send(:include, GrapeSession::Ext::Request)
19
- # Grape::API.send(:include, GrapeSession::Ext::API)
20
-
21
- unless ActionDispatch::Cookies::CookieJar.instance_methods.include? :read
22
- ActionDispatch::Cookies::CookieJar.send(:include, GrapeSession::Ext::CookieJar)
23
- end
@@ -0,0 +1,10 @@
1
+ module GrapeSession
2
+ class Configuration
3
+ include GrapeCookies::Configuration.module(:key, :domain, :path, :expire_after, :secure, :httponly, :defer, :renew)
4
+
5
+ # setup defaults
6
+ configure do
7
+ key '_grape_session_id'
8
+ end
9
+ end
10
+ end
@@ -6,11 +6,11 @@ module GrapeSession
6
6
  module API
7
7
  extend ActiveSupport::Concern
8
8
 
9
+ include GrapeCookies::Ext::API
10
+
9
11
  included do
10
12
 
11
- use GrapeSession::Middleware::EnvSetup
12
- use ActionDispatch::Cookies
13
- use ActionDispatch::Session::CookieStore, GrapeSession::Middleware::EnvSetup.settings[:session_options]
13
+ use ActionDispatch::Session::CookieStore, GrapeSession::Configuration.settings.dup
14
14
 
15
15
  end
16
16
 
@@ -6,10 +6,6 @@ module GrapeSession
6
6
  included do
7
7
  end
8
8
 
9
- def cookies
10
- request.cookie_jar
11
- end
12
-
13
9
  def session
14
10
  request.session
15
11
  end
@@ -1,3 +1,3 @@
1
1
  module GrapeSession
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
@@ -50,6 +50,12 @@ feature 'Use an encrypted session' do
50
50
  scenario 'Get session' do
51
51
  get '/test'
52
52
 
53
+ memo_session = response_cookies['_grape_session_id']
54
+
55
+ clear_cookies
56
+
57
+ set_cookie "_grape_session_id=#{memo_session}"
58
+
53
59
  get '/return'
54
60
 
55
61
  expect(last_response.body).to include('"session_test"=>"session_test_value"')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape_session
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dieter Späth
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-13 00:00:00.000000000 Z
11
+ date: 2014-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: 4.1.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: grape_cookies
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: grape
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -262,7 +276,7 @@ dependencies:
262
276
  - - '>='
263
277
  - !ruby/object:Gem::Version
264
278
  version: '0'
265
- description: Adds Rails like session and cookie support to grape api
279
+ description: Adds Rails like session support to grape api
266
280
  email:
267
281
  - d.spaeth@faber.de
268
282
  executables: []
@@ -282,14 +296,11 @@ files:
282
296
  - Rakefile
283
297
  - grape_session.gemspec
284
298
  - lib/grape_session.rb
299
+ - lib/grape_session/configuration.rb
285
300
  - lib/grape_session/ext/api.rb
286
- - lib/grape_session/ext/cookie_jar.rb
287
301
  - lib/grape_session/ext/endpoint.rb
288
- - lib/grape_session/ext/request.rb
289
- - lib/grape_session/middleware/env_setup.rb
290
302
  - lib/grape_session/version.rb
291
303
  - spec/acceptance/.gitkeep
292
- - spec/acceptance/cookie_spec.rb
293
304
  - spec/acceptance/session_spec.rb
294
305
  - spec/acceptance/support/.keep
295
306
  - spec/acceptance/support/feature.rb
@@ -325,10 +336,9 @@ rubyforge_project:
325
336
  rubygems_version: 2.2.2
326
337
  signing_key:
327
338
  specification_version: 4
328
- summary: Adds Rails like session and cookie support to grape api
339
+ summary: Adds Rails like session support to grape api
329
340
  test_files:
330
341
  - spec/acceptance/.gitkeep
331
- - spec/acceptance/cookie_spec.rb
332
342
  - spec/acceptance/session_spec.rb
333
343
  - spec/acceptance/support/.keep
334
344
  - spec/acceptance/support/feature.rb
@@ -1,19 +0,0 @@
1
- require 'action_dispatch/middleware/cookies'
2
-
3
- module GrapeSession
4
- module Ext
5
- module CookieJar
6
- extend ActiveSupport::Concern
7
-
8
- included do
9
-
10
- end
11
-
12
- def read(*)
13
- end
14
-
15
- module ClassMethods
16
- end
17
- end
18
- end
19
- end
@@ -1,20 +0,0 @@
1
- require 'action_dispatch/middleware/cookies'
2
-
3
- module GrapeSession
4
- module Ext
5
- module Request
6
- extend ActiveSupport::Concern
7
-
8
- included do
9
-
10
- end
11
-
12
- def cookie_jar
13
- env['action_dispatch.cookies'] ||= ActionDispatch::Cookies::CookieJar.build(self)
14
- end
15
-
16
- module ClassMethods
17
- end
18
- end
19
- end
20
- end
@@ -1,56 +0,0 @@
1
- module GrapeSession
2
- module Middleware
3
- class EnvSetup
4
- def self.default_settings
5
- {
6
- signed_cookie_salt: 'signed cookie',
7
- encrypted_cookie_salt: 'encrypted cookie',
8
- encrypted_signed_cookie_salt: 'signed encrypted cookie',
9
- secret_token: 'secret_token',
10
- secret_key_base: 'secret base',
11
- cookies_serializer: :json,
12
- session_options: { key: '_grape_session_id' }
13
- }.freeze
14
- end
15
-
16
- def self.settings(new_settings = nil)
17
- if new_settings
18
- @settings_for_env = nil
19
- @caching_key_generator = nil
20
- @settings = default_settings.merge new_settings
21
- else
22
- @settings ||= default_settings
23
- end
24
- end
25
-
26
- def self.key_generator
27
- @caching_key_generator ||= begin
28
- key_generator = ActiveSupport::KeyGenerator.new(@settings[:secret_key_base], iterations: 1000)
29
- ActiveSupport::CachingKeyGenerator.new(key_generator)
30
- end
31
- end
32
-
33
- def self.settings_for_env
34
- @settings_for_env ||= {
35
- ActionDispatch::Cookies::GENERATOR_KEY => key_generator,
36
- ActionDispatch::Cookies::SIGNED_COOKIE_SALT => settings[:signed_cookie_salt],
37
- ActionDispatch::Cookies::ENCRYPTED_COOKIE_SALT => settings[:encrypted_cookie_salt],
38
- ActionDispatch::Cookies::ENCRYPTED_SIGNED_COOKIE_SALT => settings[:encrypted_signed_cookie_salt],
39
- ActionDispatch::Cookies::SECRET_TOKEN => settings[:secret_token],
40
- ActionDispatch::Cookies::SECRET_KEY_BASE => settings[:secret_key_base],
41
- ActionDispatch::Cookies::COOKIES_SERIALIZER => settings[:cookies_serializer]
42
- }.freeze
43
- end
44
-
45
- def initialize(app)
46
- @app = app
47
- end
48
-
49
- def call(env)
50
- env.merge!(self.class.settings_for_env)
51
-
52
- @app.call(env)
53
- end
54
- end
55
- end
56
- end
@@ -1,62 +0,0 @@
1
- require 'acceptance_spec_helper'
2
- require 'grape'
3
- require 'rack/test'
4
-
5
- feature 'Encrypt a cookie session' do
6
- include Rack::Test::Methods
7
-
8
- let(:app) do
9
-
10
- Class.new(Grape::API) do
11
- include GrapeSession::Ext::API
12
-
13
- get '/test' do
14
- cookies.signed['test_signed'] = '1234'
15
- cookies['test_unsigned_signed'] = 'unsigned_1234'
16
- end
17
-
18
- get '/return' do
19
- {
20
- cookies: [cookies.signed['test_signed'], cookies['test_unsigned_signed']]
21
- }
22
- end
23
- end
24
- end
25
-
26
- let(:hostname) { Rack::Test::DEFAULT_HOST }
27
- let(:port) { 80 }
28
- let(:host) { "#{hostname}:#{port}" }
29
-
30
- let(:response_cookies) { rack_mock_session.cookie_jar }
31
-
32
- let(:verifier) do
33
- key_generator = last_request.env[ActionDispatch::Cookies::GENERATOR_KEY]
34
- signed_cookie_salt = last_request.env[ActionDispatch::Cookies::SIGNED_COOKIE_SALT]
35
- secret = key_generator.generate_key(signed_cookie_salt)
36
- ActiveSupport::MessageVerifier.new(secret, serializer: JSON)
37
- end
38
-
39
- def https?
40
- port == 443
41
- end
42
-
43
- scenario 'Cookie set signed' do
44
- get '/test'
45
-
46
- expect(last_response.status).to eq 200
47
-
48
- expect(response_cookies['test_signed']).not_to eq '1234'
49
- expect(verifier.verify(response_cookies['test_signed'])).to eq '1234'
50
-
51
- expect(response_cookies['test_unsigned_signed']).to eq 'unsigned_1234'
52
-
53
- end
54
-
55
- scenario 'Get signed cookie' do
56
- get '/test'
57
-
58
- get '/return'
59
-
60
- expect(last_response.body).to eq '{:cookies=>["1234", "unsigned_1234"]}'
61
- end
62
- end