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 +4 -4
- data/README.md +25 -27
- data/grape_session.gemspec +3 -2
- data/lib/grape_session.rb +2 -9
- data/lib/grape_session/configuration.rb +10 -0
- data/lib/grape_session/ext/api.rb +3 -3
- data/lib/grape_session/ext/endpoint.rb +0 -4
- data/lib/grape_session/version.rb +1 -1
- data/spec/acceptance/session_spec.rb +6 -0
- metadata +19 -9
- data/lib/grape_session/ext/cookie_jar.rb +0 -19
- data/lib/grape_session/ext/request.rb +0 -20
- data/lib/grape_session/middleware/env_setup.rb +0 -56
- data/spec/acceptance/cookie_spec.rb +0 -62
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 858265d4420dd157f8c933b293aa97b90ac784eb
|
4
|
+
data.tar.gz: 9c6fa6d502dd7890d3965ff466104974ada96219
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
4
|
-
|
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
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
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
|
|
data/grape_session.gemspec
CHANGED
@@ -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
|
12
|
-
spec.description = 'Adds Rails like session
|
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
|
|
data/lib/grape_session.rb
CHANGED
@@ -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/
|
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
|
@@ -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::
|
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
|
|
@@ -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.
|
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-
|
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
|
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
|
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,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
|