sbsm 1.4.4 → 1.4.5
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/History.txt +6 -0
 - data/lib/sbsm/app.rb +18 -3
 - data/lib/sbsm/session.rb +39 -7
 - data/lib/sbsm/session_store.rb +3 -3
 - data/lib/sbsm/user.rb +1 -1
 - data/lib/sbsm/version.rb +1 -1
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: c931f28d24233cb0c46c2f1e6341a8a451037918
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: abfdbcc5d3464f7ae2eeab161eaf02319f70e568
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: c7f94a54e9f0e73fd5ad64747720302448c12717665a94f8c769f041a987b8a86ef1ce9967ef9932f1a758aedfec4d30fea6a3d1bff94cd93b18d378469fc918
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 57e179ccda3ea1eb5053992b71311f939aee63a72db164d761ff128ac13823d1d1c90140461454974399e00f1ddad4734cfc1533bbc145ea95ab82321a5a7b36
         
     | 
    
        data/History.txt
    CHANGED
    
    
    
        data/lib/sbsm/app.rb
    CHANGED
    
    | 
         @@ -117,9 +117,24 @@ module SBSM 
     | 
|
| 
       117 
117 
     | 
    
         
             
                  session = Thread.current.thread_variable_get(:session)
         
     | 
| 
       118 
118 
     | 
    
         
             
                  SBSM.debug "starting session_id #{session_id}  session #{session.class} #{request.path}: cookies #{@cookie_name} are #{request.cookies} @cgi #{@cgi.class}"
         
     | 
| 
       119 
119 
     | 
    
         
             
                  res = session.process_rack(rack_request: request)
         
     | 
| 
       120 
     | 
    
         
            -
                   
     | 
| 
       121 
     | 
    
         
            -
                   
     | 
| 
       122 
     | 
    
         
            -
             
     | 
| 
      
 120 
     | 
    
         
            +
                  thru = session.get_passthru
         
     | 
| 
      
 121 
     | 
    
         
            +
                  if thru.size > 0
         
     | 
| 
      
 122 
     | 
    
         
            +
                    file_name = thru.first.untaint
         
     | 
| 
      
 123 
     | 
    
         
            +
                    response.set_header('Content-Type', MimeMagic.by_extension(File.extname(file_name)).type)
         
     | 
| 
      
 124 
     | 
    
         
            +
                    response.headers['Content-Disposition'] = "#{thru.last}; filename=#{File.basename(file_name)}"
         
     | 
| 
      
 125 
     | 
    
         
            +
                    response.headers['Content-Length'] =  File.size(file_name).to_s
         
     | 
| 
      
 126 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 127 
     | 
    
         
            +
                      response.write(File.open(file_name, File::RDONLY){|file| file.read})
         
     | 
| 
      
 128 
     | 
    
         
            +
                    rescue Errno::ENOENT, IOError => err
         
     | 
| 
      
 129 
     | 
    
         
            +
                      SBSM.error("#{err.message} #{thru.first}")
         
     | 
| 
      
 130 
     | 
    
         
            +
                      return [404, {}, []]
         
     | 
| 
      
 131 
     | 
    
         
            +
                    end
         
     | 
| 
      
 132 
     | 
    
         
            +
                  else
         
     | 
| 
      
 133 
     | 
    
         
            +
                    response.write res
         
     | 
| 
      
 134 
     | 
    
         
            +
                    response.headers['Content-Type'] ||= 'text/html; charset=utf-8'
         
     | 
| 
      
 135 
     | 
    
         
            +
                    response.headers.merge!(session.http_headers)
         
     | 
| 
      
 136 
     | 
    
         
            +
                  end
         
     | 
| 
      
 137 
     | 
    
         
            +
             
     | 
| 
       123 
138 
     | 
    
         
             
                  if (result = response.headers.find { |k,v| /status/i.match(k) })
         
     | 
| 
       124 
139 
     | 
    
         
             
                    response.status = result.last.to_i
         
     | 
| 
       125 
140 
     | 
    
         
             
                    response.headers.delete(result.first)
         
     | 
    
        data/lib/sbsm/session.rb
    CHANGED
    
    | 
         @@ -36,7 +36,7 @@ require 'delegate' 
     | 
|
| 
       36 
36 
     | 
    
         
             
            module SBSM
         
     | 
| 
       37 
37 
     | 
    
         
             
              class	Session
         
     | 
| 
       38 
38 
     | 
    
         | 
| 
       39 
     | 
    
         
            -
            		attr_reader :user, :active_thread, :key, :cookie_input, :cookie_name,
         
     | 
| 
      
 39 
     | 
    
         
            +
            		attr_reader :user, :active_thread, :key, :cookie_input, :cookie_name, :post_content,
         
     | 
| 
       40 
40 
     | 
    
         
             
                    :server_name, :server_port, :request_params, :request_method, :request_origin,
         
     | 
| 
       41 
41 
     | 
    
         
             
            			:unsafe_input, :valid_input, :request_path, :request_post, :cgi, :attended_states
         
     | 
| 
       42 
42 
     | 
    
         
             
                attr_accessor :validator, :trans_handler, :app
         
     | 
| 
         @@ -108,12 +108,12 @@ module SBSM 
     | 
|
| 
       108 
108 
     | 
    
         
             
                def initialize(app:,
         
     | 
| 
       109 
109 
     | 
    
         
             
                               trans_handler: nil,
         
     | 
| 
       110 
110 
     | 
    
         
             
                               validator: nil,
         
     | 
| 
       111 
     | 
    
         
            -
                                unknown_user:  
     | 
| 
      
 111 
     | 
    
         
            +
                                unknown_user: SBSM::UnknownUser.new,
         
     | 
| 
       112 
112 
     | 
    
         
             
                              cookie_name: nil,
         
     | 
| 
       113 
113 
     | 
    
         
             
                               multi_threaded: false)
         
     | 
| 
       114 
     | 
    
         
            -
                  SBSM.info "initialize th #{trans_handler} validator #{validator} app #{app.class}"
         
     | 
| 
      
 114 
     | 
    
         
            +
                  SBSM.info "initialize th #{trans_handler} validator #{validator} app #{app.class} multi_threaded #{multi_threaded}"
         
     | 
| 
       115 
115 
     | 
    
         
             
                  @app = app
         
     | 
| 
       116 
     | 
    
         
            -
                  @unknown_user =  
     | 
| 
      
 116 
     | 
    
         
            +
                  @unknown_user = unknown_user.is_a?(Class) ? unknown_user.new : unknown_user
         
     | 
| 
       117 
117 
     | 
    
         
             
                  @validator = validator if validator.is_a?(SBSM::Validator)
         
     | 
| 
       118 
118 
     | 
    
         
             
                  @validator ||= (validator && validator.new) || Validator.new
         
     | 
| 
       119 
119 
     | 
    
         
             
                  fail "invalid validator #{@validator}" unless @validator.is_a?(SBSM::Validator)
         
     | 
| 
         @@ -146,6 +146,8 @@ module SBSM 
     | 
|
| 
       146 
146 
     | 
    
         
             
                end
         
     | 
| 
       147 
147 
     | 
    
         
             
                def unknown_user
         
     | 
| 
       148 
148 
     | 
    
         
             
                  @unknown_user || SBSM::UnknownUser.new
         
     | 
| 
      
 149 
     | 
    
         
            +
                  puts "unknown_user set to #{@unknown_user} class #{ @unknown_user.is_a?(Class)}"
         
     | 
| 
      
 150 
     | 
    
         
            +
                  @unknown_user = @unknown_user.new if @unknown_user.is_a?(Class)
         
     | 
| 
       149 
151 
     | 
    
         
             
                end
         
     | 
| 
       150 
152 
     | 
    
         
             
                def age(now=Time.now)
         
     | 
| 
       151 
153 
     | 
    
         
             
                  now - @mtime
         
     | 
| 
         @@ -203,7 +205,31 @@ module SBSM 
     | 
|
| 
       203 
205 
     | 
    
         
             
            		end
         
     | 
| 
       204 
206 
     | 
    
         
             
                def process_rack(rack_request:)
         
     | 
| 
       205 
207 
     | 
    
         
             
                  start = Time.now
         
     | 
| 
      
 208 
     | 
    
         
            +
                  @passthru = false
         
     | 
| 
      
 209 
     | 
    
         
            +
                  @disposition = false
         
     | 
| 
       206 
210 
     | 
    
         
             
                  @request_path ||= rack_request.path
         
     | 
| 
      
 211 
     | 
    
         
            +
                  @rack_request = rack_request
         
     | 
| 
      
 212 
     | 
    
         
            +
                  @post_content = nil
         
     | 
| 
      
 213 
     | 
    
         
            +
                  if rack_request.request_method.eql?('POST')
         
     | 
| 
      
 214 
     | 
    
         
            +
                     rack_request.params.each do |k, v|
         
     | 
| 
      
 215 
     | 
    
         
            +
                       # needed to test POST requests generated by curl (first parameter) or ARC (second parameter)
         
     | 
| 
      
 216 
     | 
    
         
            +
                      if /xml/i.match(k)
         
     | 
| 
      
 217 
     | 
    
         
            +
                        @post_content = "#{k} #{v}"
         
     | 
| 
      
 218 
     | 
    
         
            +
                        break
         
     | 
| 
      
 219 
     | 
    
         
            +
                      end
         
     | 
| 
      
 220 
     | 
    
         
            +
                    end
         
     | 
| 
      
 221 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 222 
     | 
    
         
            +
                      # needed for request generated by https://github.com/wiztools/rest-client
         
     | 
| 
      
 223 
     | 
    
         
            +
                      rack_request.body.rewind # just to be sure
         
     | 
| 
      
 224 
     | 
    
         
            +
                      @post_content = rack_request.body.read
         
     | 
| 
      
 225 
     | 
    
         
            +
                    end unless @post_content
         
     | 
| 
      
 226 
     | 
    
         
            +
                    if @post_content
         
     | 
| 
      
 227 
     | 
    
         
            +
                      SBSM.debug "@post_content is #{@post_content}"
         
     | 
| 
      
 228 
     | 
    
         
            +
                    else
         
     | 
| 
      
 229 
     | 
    
         
            +
                      SBSM.debug "rack_request is #{rack_request}"
         
     | 
| 
      
 230 
     | 
    
         
            +
                    end
         
     | 
| 
      
 231 
     | 
    
         
            +
                  end
         
     | 
| 
      
 232 
     | 
    
         
            +
             
     | 
| 
       207 
233 
     | 
    
         
             
                  rack_request.params.each { |key, val| @cgi.params.store(key, val) }
         
     | 
| 
       208 
234 
     | 
    
         
             
                  @trans_handler.translate_uri(rack_request)
         
     | 
| 
       209 
235 
     | 
    
         
             
                  html = @mutex.synchronize do
         
     | 
| 
         @@ -381,7 +407,7 @@ module SBSM 
     | 
|
| 
       381 
407 
     | 
    
         
             
            		end
         
     | 
| 
       382 
408 
     | 
    
         
             
            		def logout
         
     | 
| 
       383 
409 
     | 
    
         
             
            			__checkout
         
     | 
| 
       384 
     | 
    
         
            -
                  @user =  
     | 
| 
      
 410 
     | 
    
         
            +
                  @user = @unknown_user
         
     | 
| 
       385 
411 
     | 
    
         
             
                  @active_state = @state = self::class::DEFAULT_STATE.new(self, @user)
         
     | 
| 
       386 
412 
     | 
    
         
             
                  SBSM.debug "logout #{request_path.inspect} setting @state #{@state.object_id} #{@state.class} remember #{persistent_user_input(:remember).inspect} #{@user.class}"
         
     | 
| 
       387 
413 
     | 
    
         
             
                  @state.init
         
     | 
| 
         @@ -430,8 +456,14 @@ module SBSM 
     | 
|
| 
       430 
456 
     | 
    
         
             
            		def navigation
         
     | 
| 
       431 
457 
     | 
    
         
             
            			@user.navigation
         
     | 
| 
       432 
458 
     | 
    
         
             
            		end
         
     | 
| 
       433 
     | 
    
         
            -
             
     | 
| 
       434 
     | 
    
         
            -
             
     | 
| 
      
 459 
     | 
    
         
            +
                def get_passthru
         
     | 
| 
      
 460 
     | 
    
         
            +
                  @passthru ? [@passthru, @disposition] : []
         
     | 
| 
      
 461 
     | 
    
         
            +
                end
         
     | 
| 
      
 462 
     | 
    
         
            +
            		def passthru(path, disposition='attachment')
         
     | 
| 
      
 463 
     | 
    
         
            +
                  # the variable @passthru is set by a trusted source
         
     | 
| 
      
 464 
     | 
    
         
            +
                  @passthru    = path.untaint
         
     | 
| 
      
 465 
     | 
    
         
            +
                  @disposition = disposition
         
     | 
| 
      
 466 
     | 
    
         
            +
                  ''
         
     | 
| 
       435 
467 
     | 
    
         
             
            		end
         
     | 
| 
       436 
468 
     | 
    
         
             
            		def persistent_user_input(key)
         
     | 
| 
       437 
469 
     | 
    
         
             
            			if(value = user_input(key))
         
     | 
    
        data/lib/sbsm/session_store.rb
    CHANGED
    
    | 
         @@ -55,7 +55,7 @@ module SBSM 
     | 
|
| 
       55 
55 
     | 
    
         
             
                               session_class: nil,
         
     | 
| 
       56 
56 
     | 
    
         
             
                               validator: nil,
         
     | 
| 
       57 
57 
     | 
    
         
             
                               cookie_name: nil,
         
     | 
| 
       58 
     | 
    
         
            -
                               unknown_user:  
     | 
| 
      
 58 
     | 
    
         
            +
                               unknown_user: UNKNOWN_USER.new,
         
     | 
| 
       59 
59 
     | 
    
         
             
                               multi_threaded: nil)
         
     | 
| 
       60 
60 
     | 
    
         
             
                  fail "You must specify an app!" unless app
         
     | 
| 
       61 
61 
     | 
    
         
             
                  @sessions = {}
         
     | 
| 
         @@ -69,8 +69,8 @@ module SBSM 
     | 
|
| 
       69 
69 
     | 
    
         
             
                  @trans_handler ||= TransHandler.instance
         
     | 
| 
       70 
70 
     | 
    
         
             
                  @session_class = session_class
         
     | 
| 
       71 
71 
     | 
    
         
             
                  @session_class ||= SBSM::Session
         
     | 
| 
       72 
     | 
    
         
            -
                  @unknown_user = unknown_user
         
     | 
| 
       73 
     | 
    
         
            -
                  @unknown_user ||=  
     | 
| 
      
 72 
     | 
    
         
            +
                  @unknown_user = unknown_user.is_a?(Class) ? unknown_user.new : unknown_user
         
     | 
| 
      
 73 
     | 
    
         
            +
                  @unknown_user ||= UnknownUser.new
         
     | 
| 
       74 
74 
     | 
    
         
             
                  @validator = validator
         
     | 
| 
       75 
75 
     | 
    
         
             
                end
         
     | 
| 
       76 
76 
     | 
    
         
             
                def cap_max_sessions(now = Time.now)
         
     | 
    
        data/lib/sbsm/user.rb
    CHANGED
    
    
    
        data/lib/sbsm/version.rb
    CHANGED
    
    
    
        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.4. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.4.5
         
     | 
| 
       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-06- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2017-06-19 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: rack
         
     |