class AnyCable::Rack::BroadcastSubscribers::HTTPSubscriber

HTTP Pub/Sub subscriber

Attributes

path[R]
token[R]

Public Class Methods

new(**options) click to toggle source
# File lib/anycable/rack/broadcast_subscribers/http_subscriber.rb, line 12
def initialize(**options)
  super
  @token = options[:token]
  @path = options[:path]
end

Public Instance Methods

call(env) click to toggle source
# File lib/anycable/rack/broadcast_subscribers/http_subscriber.rb, line 22
def call(env)
  req = ::Rack::Request.new(env)

  return invalid_request unless req.post?

  if token && req.get_header("HTTP_AUTHORIZATION") != "Bearer #{token}"
    return invalid_request(401)
  end

  handle_message req.body.read

  [201, {"Content-Type" => "text/plain"}, ["OK"]]
end
start() click to toggle source
# File lib/anycable/rack/broadcast_subscribers/http_subscriber.rb, line 18
def start
  log(:info) { "Accepting pub/sub request at #{path}" }
end

Private Instance Methods

invalid_request(code = 422) click to toggle source
# File lib/anycable/rack/broadcast_subscribers/http_subscriber.rb, line 38
def invalid_request(code = 422)
  [code, {"Content-Type" => "text/plain"}, ["Invalid request"]]
end