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.
- checksums.yaml +4 -4
- data/lib/rack/tctp.rb +37 -4
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 17cccfc0313d0b15542c44517be5bd7623f43e15
|
4
|
+
data.tar.gz: eb14d908fbea866b4f6055c5f7765a74ad90f7a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
-
|
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
|