Files
codeocean/lib/middleware/websocket_sentry_headers.rb
Sebastian Serth f6278b27cf Determine WebSocket connection without Upgrade header
The HTTP Upgrade header is hop-by-hop only and therefore removed by a reverse proxy.
Read more: http://nginx.org/en/docs/http/websocket.html
2023-05-10 00:26:27 +02:00

28 lines
594 B
Ruby

# frozen_string_literal: true
module Middleware
class WebSocketSentryHeaders
def initialize(app)
@app = app
end
def call(env)
request = Rack::Request.new(env)
extract_sentry_parameters(request) if websocket_upgrade?(request)
@app.call(env)
end
private
def websocket_upgrade?(request)
request.has_header?('HTTP_SEC_WEBSOCKET_VERSION')
end
def extract_sentry_parameters(request)
%w[HTTP_SENTRY_TRACE HTTP_BAGGAGE].each do |param|
request.add_header(param, request.delete_param(param))
end
end
end
end