sbsm 1.5.2 → 1.5.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: 97b5380c3233416078670d095b29e76843a7476b
4
- data.tar.gz: 2f4f64aaf4eab500ff12dc698d1fc6249b3990af
3
+ metadata.gz: fc9f5d89b19d63cc1e535df21aeb118e6b701b94
4
+ data.tar.gz: f938b3e39401c6edce02fac8fbbc50aa92fcf91c
5
5
  SHA512:
6
- metadata.gz: '08d78ff9c24108e41163516ed78e2a90f1697b311f00c409aec9480d7f694be12bcf3b95b73589bd84eccf982201ef5b0801fd2d7fb89656dde83d4d3ec559fc'
7
- data.tar.gz: 1897c958748d506cf989c0057a3f86f386c8172d04855e507f8126ec38731284d8c37ad4a7b0466fb7c779a7e3e3f6c72a4446925ec0eb1d03e70e102ac8f5f2
6
+ metadata.gz: d3053e25db4359a6e37239361a402dc39b137742adc082002c0834633be846e064b0e6724f1e9e549cac0c23fb298bbb7e3aa473d658263cf8a9976d8434993b
7
+ data.tar.gz: 79952026cd9423c00d419e9bd6731fd6550f99c97dd288345e1c357f224577aaa2a85cea9370ae08fcfb850a10c07f137b1577ce1847b86d6a3d5a33a2a9b1a6
data/History.txt CHANGED
@@ -1,3 +1,9 @@
1
+ === 1.5.3 / 05.07.2017
2
+
3
+ * Add process_late for ODDB.org limit_request
4
+ * Fix clearing/cap_max_state in sessionstore
5
+ * Delete some variable to save space in session_store
6
+
1
7
  === 1.5.2 / 04.07.2017
2
8
 
3
9
  * Fix handling true/false values in cookie
data/lib/sbsm/app.rb CHANGED
@@ -152,6 +152,8 @@ module SBSM
152
152
  :path => "/",
153
153
  :expires => (Time.now + (60 * 60 * 24 * 365 * 10))})
154
154
  response.set_cookie(SESSION_ID, { :value => session_id, :path => '/' , :expires => (Time.now + (60 * 60 * 24 * 365 * 10)) })
155
+ request = nil
156
+ session.rack_request = nil
155
157
  @@last_session = session
156
158
  if response.headers['Set-Cookie'].to_s.index(session_id)
157
159
  SBSM.debug "finish session_id.1 #{session_id}: matches response.headers['Set-Cookie'] #{response.headers['Set-Cookie']}"
data/lib/sbsm/session.rb CHANGED
@@ -38,9 +38,9 @@ module SBSM
38
38
  class Session
39
39
 
40
40
  attr_reader :user, :active_thread, :key, :cookie_input, :persistent_cookie_name, :post_content,
41
- :server_name, :server_port, :request_params, :request_method, :request_origin,
41
+ :server_name, :server_port, :user_agent, :request_params, :request_method, :request_origin,
42
42
  :unsafe_input, :valid_input, :request_path, :request_post, :cgi, :attended_states
43
- attr_accessor :validator, :trans_handler, :app
43
+ attr_accessor :validator, :trans_handler, :app, :rack_request
44
44
  PERSISTENT_COOKIE_NAME = "sbsm-persistent-cookie"
45
45
  DEFAULT_FLAVOR = 'sbsm'
46
46
  DEFAULT_LANGUAGE = 'en'
@@ -161,6 +161,9 @@ module SBSM
161
161
  @attended_states.size
162
162
  end
163
163
  end
164
+ def key=(key)
165
+ @key = key
166
+ end
164
167
  def __checkout
165
168
  @attended_states.each_value { |state| state.__checkout }
166
169
  @attended_states.clear
@@ -203,36 +206,36 @@ module SBSM
203
206
  end
204
207
  def process_rack(rack_request:)
205
208
  start = Time.now
206
- @passthru = false
207
- @disposition = false
208
- @request_path ||= rack_request.path
209
- @rack_request = rack_request
210
- @post_content = nil
209
+ html = @mutex.synchronize do
210
+ begin
211
+ @passthru = false
212
+ @disposition = false
213
+ @request_path ||= rack_request.path
214
+ @rack_request = rack_request
215
+ @post_content = nil
211
216
 
212
- if rack_request.request_method.eql?('POST')
213
- rack_request.params.each do |k, v|
214
- # needed to test POST requests generated by curl (first parameter) or ARC (second parameter)
215
- if /xml/i.match(k)
216
- @post_content = "#{k} #{v}"
217
- break
217
+ if rack_request.request_method.eql?('POST')
218
+ rack_request.params.each do |k, v|
219
+ # needed to test POST requests generated by curl (first parameter) or ARC (second parameter)
220
+ if /xml/i.match(k)
221
+ @post_content = "#{k} #{v}"
222
+ break
223
+ end
224
+ end
225
+ begin
226
+ # needed for request generated by https://github.com/wiztools/rest-client
227
+ rack_request.body.rewind # just to be sure
228
+ @post_content = rack_request.body.read
229
+ end unless @post_content
230
+ if @post_content
231
+ SBSM.debug "@post_content is #{@post_content}"
232
+ else
233
+ SBSM.debug "rack_request is #{rack_request}"
234
+ end
218
235
  end
219
- end
220
- begin
221
- # needed for request generated by https://github.com/wiztools/rest-client
222
- rack_request.body.rewind # just to be sure
223
- @post_content = rack_request.body.read
224
- end unless @post_content
225
- if @post_content
226
- SBSM.debug "@post_content is #{@post_content}"
227
- else
228
- SBSM.debug "rack_request is #{rack_request}"
229
- end
230
- end
231
236
 
232
- rack_request.params.each { |key, val| @cgi.params.store(key, val) }
233
- @trans_handler.translate_uri(rack_request)
234
- html = @mutex.synchronize do
235
- begin
237
+ rack_request.params.each { |key, val| @cgi.params.store(key, val) }
238
+ @trans_handler.translate_uri(rack_request)
236
239
  @request_method =rack_request.request_method
237
240
  @request_path = rack_request.path
238
241
  if rack_request.env
@@ -270,6 +273,7 @@ module SBSM
270
273
  @zone = @active_state.zone
271
274
  @active_state.touch
272
275
  cap_max_states
276
+ self.process_late() if self.respond_to?(:process_late) # needed for ODDB.org limit_request
273
277
  ensure
274
278
  @user_input_imported = false
275
279
  end
@@ -277,9 +281,6 @@ module SBSM
277
281
  end
278
282
  (@@stats[@request_path] ||= []).push(Time.now - start)
279
283
  html
280
- rescue => err
281
- SBSM.info "Error in process_rack #{err.backtrace[0..5].join("\n")}"
282
- raise err
283
284
  end
284
285
  def error(key)
285
286
  @state.error(key) if @state.respond_to?(:error)
@@ -454,8 +455,6 @@ module SBSM
454
455
  "#{key}="
455
456
  end
456
457
  end.join(';')
457
- rescue => error
458
- binding.pry
459
458
  end
460
459
  def http_headers
461
460
  @state.http_headers
@@ -61,6 +61,7 @@ module SBSM
61
61
  unknown_user: UNKNOWN_USER.new,
62
62
  multi_threaded: nil)
63
63
  fail "You must specify an app!" unless app
64
+ @@sessions = {}
64
65
  @cleaner = run_cleaner if(self.class.const_get(:RUN_CLEANER))
65
66
  @app = app
66
67
  @system = persistence_layer
@@ -75,23 +76,25 @@ module SBSM
75
76
  @validator = validator
76
77
  end
77
78
  def cap_max_sessions(now = Time.now)
78
- if(@@sessions.size > self::class::CAP_MAX_THRESHOLD)
79
- SBSM.info "too many sessions! Keeping only #{self::class::MAX_SESSIONS}"
80
- sess = nil
81
- sorted = @@sessions.values.sort
82
- sorted[0...(-self::class::MAX_SESSIONS)].each { |sess|
83
- sess.__checkout
84
- @@sessions.delete(sess.key)
85
- }
86
- if(sess)
87
- age = sess.age(now)
88
- SBSM.info sprintf("deleted all sessions that had not been accessed for more than %im %is", age / 60, age % 60)
79
+ if(@@sessions.size > self::class::CAP_MAX_THRESHOLD)
80
+ SBSM.info "too many sessions! Keeping only #{self::class::MAX_SESSIONS}"
81
+ sess = nil
82
+ @@sessions.values.sort[0...(-self::class::MAX_SESSIONS)].each { |sess|
83
+ sess.__checkout
84
+ @@sessions.delete(sess.key)
85
+ }
86
+ if(sess)
87
+ age = sess.age(now)
88
+ SBSM.info sprintf("deleted all sessions that had not been accessed for more than %im %is", age / 60, age % 60)
89
+ end
89
90
  end
90
- end
91
+ seconds = (Time.now.to_i - now.to_i)
92
+ SBSM.warn sprintf("cap_max_sessions to #{self::class::CAP_MAX_THRESHOLD}. took %d seconds", seconds)
91
93
  end
92
94
  def clean
93
95
  now = Time.now
94
- @@sessions.delete_if { |key, s|
96
+ old_size = @@sessions.size
97
+ @@sessions.delete_if do |key, s|
95
98
  begin
96
99
  if s.respond_to?(:expired?)
97
100
  if s.expired?(now)
@@ -107,8 +110,9 @@ module SBSM
107
110
  rescue
108
111
  true
109
112
  end
110
- }
111
- #cap_max_sessions(now)
113
+ end
114
+ seconds = (Time.now.to_i - now.to_i)
115
+ SBSM.warn sprintf("Cleaned #{old_size - @@sessions.size} sessions. Took %d seconds", seconds)
112
116
  end
113
117
  def SessionStore.sessions
114
118
  @@sessions
@@ -148,6 +152,7 @@ module SBSM
148
152
  unless((s = @@sessions[key]) && !s.expired?)
149
153
  s = @@sessions[key] = @session_class.new(app: @app, cookie_name: @cookie_name, trans_handler: @trans_handler, validator: @validator, unknown_user: @unknown_user)
150
154
  end
155
+ s.key=key
151
156
  s.reset()
152
157
  s.touch()
153
158
  s
data/lib/sbsm/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module SBSM
2
- VERSION = '1.5.2'
2
+ VERSION = '1.5.3'
3
3
  end
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ #--
4
+ #
5
+ # State Based Session Management
6
+ # Copyright (C) 2004 Hannes Wyss
7
+ #
8
+ # This library is free software; you can redistribute it and/or
9
+ # modify it under the terms of the GNU Lesser General Public
10
+ # License as published by the Free Software Foundation; either
11
+ # version 2.1 of the License, or (at your option) any later version.
12
+ #
13
+ # This library is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
+ # Lesser General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU Lesser General Public
19
+ # License along with this library; if not, write to the Free Software
20
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
+ #
22
+ # ywesee - intellectual capital connected, Winterthurerstrasse 52, CH-8006 Zürich, Switzerland
23
+ # hwyss@ywesee.com
24
+ #
25
+ # TestSession -- sbsm -- 22.10.2002 -- hwyss@ywesee.com
26
+ #++
27
+
28
+ require 'minitest/autorun'
29
+ require 'sbsm/session_store'
30
+ require 'sbsm/validator'
31
+ require 'sbsm/trans_handler'
32
+ require 'sbsm/app'
33
+ require 'rack'
34
+ require 'rack/test'
35
+
36
+ begin
37
+ require 'pry'
38
+ rescue LoadError
39
+ end
40
+
41
+ class SBSM::Session
42
+ attr_accessor :mtime
43
+ end
44
+ class SBSM::SessionStore
45
+ CAP_MAX_THRESHOLD = 2
46
+ MAX_SESSIONS = 3
47
+ end
48
+ class TestSessionStore < Minitest::Test
49
+ include Rack::Test::Methods
50
+ def setup
51
+ @app = SBSM::App.new()
52
+ @session = SBSM::Session.new(app: @app)
53
+ @session_store = SBSM::SessionStore.new(app: @app)
54
+ end
55
+
56
+ def app
57
+ @app
58
+ end
59
+
60
+ IDS = ['1', '2', '3', '4', '5', '6', '7']
61
+ NR_SESSIONS = IDS.size
62
+ def test_clean
63
+ assert_equal(0, SBSM::SessionStore.sessions.size)
64
+ IDS.each do |session_id|
65
+ @session_store[session_id].mtime = Time.now - (SBSM::Session::EXPIRES+2)
66
+ end
67
+ assert_equal(NR_SESSIONS, SBSM::SessionStore.sessions.size)
68
+ @session_store.clean
69
+ assert_equal(0, SBSM::SessionStore.sessions.size)
70
+ end
71
+ def test_session_store_clear
72
+ IDS.each do |session_id|
73
+ @session_store[session_id]
74
+ end
75
+ assert_equal(NR_SESSIONS, SBSM::SessionStore.sessions.size)
76
+ SBSM::SessionStore.clear
77
+ assert_equal(0, SBSM::SessionStore.sessions.size)
78
+ end
79
+ def test_session_cap_max_session
80
+ IDS.each do |session_id|
81
+ @session_store[session_id]
82
+ end
83
+ assert_equal(NR_SESSIONS, SBSM::SessionStore.sessions.size)
84
+ @session_store.cap_max_sessions
85
+ assert_equal(2, NR_SESSIONS - SBSM::SessionStore::CAP_MAX_THRESHOLD - SBSM::SessionStore::MAX_SESSIONS)
86
+ assert_equal(2+1, SBSM::SessionStore.sessions.size)
87
+ end
88
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sbsm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.2
4
+ version: 1.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masaomi Hatakeyama, Zeno R.R. Davatz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-04 00:00:00.000000000 Z
11
+ date: 2017-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -305,6 +305,7 @@ files:
305
305
  - test/test_rack_app.rb
306
306
  - test/test_redirect.rb
307
307
  - test/test_session.rb
308
+ - test/test_session_store.rb
308
309
  - test/test_state.rb
309
310
  - test/test_trans_handler.rb
310
311
  - test/test_user.rb
@@ -350,6 +351,7 @@ test_files:
350
351
  - test/test_rack_app.rb
351
352
  - test/test_redirect.rb
352
353
  - test/test_session.rb
354
+ - test/test_session_store.rb
353
355
  - test/test_state.rb
354
356
  - test/test_trans_handler.rb
355
357
  - test/test_user.rb