grape_session 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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