rack-tctp 0.9.2 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rack/tctp.rb +37 -4
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a4f9169ee893ce7ec93d3281ab553dc87d248a13
4
- data.tar.gz: 859a75131bf2d42e00dc0e6f7b1782b40cfa8cd5
3
+ metadata.gz: 17cccfc0313d0b15542c44517be5bd7623f43e15
4
+ data.tar.gz: eb14d908fbea866b4f6055c5f7765a74ad90f7a0
5
5
  SHA512:
6
- metadata.gz: c0238554483fb138f7e2e7b2cbbdef0d2fa90530d8a71ba3b233d7922a3e5629f2071cb8eb65910fb451ebf0d667bcd6ae50d4364206bb425baf4fbd7ef7f1ac
7
- data.tar.gz: 75184f63c4a40b9728cfa1351c82ffbfdb80d88cd1bbfd8dfc85d538c3a470a98be61d3e701d5b40282691714e0b3e0de64b6a82061e5a592e79d499d457154d
6
+ metadata.gz: dffa225c693158dfe7074ac791e1217114adbf39d595b81704435708039a77e9013d70e288ec40953015bbd18887be00eb352ef5281152aa13eb8c594bb41fa6
7
+ data.tar.gz: 318bcf6bb47b818320f70970f2ee27f60fd28d083f7c01b191d826438b69375ff300351177b6a6db19cde6e7515e4a4ea60475ce450247c8d3f7d9c2e983cd17
data/lib/rack/tctp.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'radix'
2
+ require 'logger'
2
3
 
3
4
  require_relative 'tctp/halec'
4
5
 
@@ -23,7 +24,14 @@ module Rack
23
24
  attr_reader :sessions
24
25
 
25
26
  # Initializes TCTP middleware
26
- def initialize(app)
27
+ def initialize(app, logger = nil)
28
+ unless logger
29
+ @logger = Kernel::Logger.new(STDOUT)
30
+ @logger.level = Logger::FATAL
31
+ else
32
+ @logger = logger
33
+ end
34
+
27
35
  @app = app
28
36
  @sessions = {}
29
37
  end
@@ -35,10 +43,11 @@ module Rack
35
43
  # * Decrypting TCTP secured entity-bodies
36
44
  # * Encrypting entity-bodies using TCTP
37
45
  def call(env)
46
+ status, headers, body = nil, nil, nil
47
+
38
48
  begin
39
49
  req = Rack::Request.new(env)
40
50
 
41
- # Switch through TCTP use cases
42
51
  case
43
52
  when is_tctp_discovery?(req)
44
53
  # TCTP discovery
@@ -100,7 +109,17 @@ module Rack
100
109
  if is_tctp_response_requested?(req)
101
110
  # Gets the first free server HALEC for encryption
102
111
  # TODO Send error if cookie is missing
103
- halec = @sessions[req.cookies['tctp_session_cookie']].free_halec
112
+ session = @sessions[req.cookies['tctp_session_cookie']]
113
+
114
+ unless session
115
+ return no_usable_halec_error
116
+ end
117
+
118
+ halec = session.free_halec
119
+
120
+ unless halec
121
+ return no_usable_halec_error
122
+ end
104
123
 
105
124
  # The length of the content body
106
125
  content_body_length = 0
@@ -136,11 +155,25 @@ module Rack
136
155
  end
137
156
  end
138
157
  rescue Exception => e
139
- puts e
158
+ @logger.fatal e
159
+
160
+ error "Error in TCTP middleware. #{e} #{e.backtrace.inspect}"
140
161
  end
141
162
  end
142
163
 
143
164
  private
165
+ def log_key
166
+ 'TCTP Middleware'
167
+ end
168
+
169
+ def no_usable_halec_error
170
+ error 'No useable HALEC for encryption. Please perform Handshake.'
171
+ end
172
+
173
+ def error(message)
174
+ [500, {'Content-Type' => 'text/plain', 'Content-Length' => message.length.to_s}, [message]]
175
+ end
176
+
144
177
  def is_tctp_discovery?(req)
145
178
  req.options? && !req.env['HTTP_ACCEPT'].nil? && req.env['HTTP_ACCEPT'].eql?(TCTP_DISCOVERY_MEDIA_TYPE)
146
179
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-tctp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mathias Slawik