sbsm 1.5.2 → 1.5.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: 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