rack-tctp 0.9.2 → 0.9.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.
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