class Camo::Server
Constants
- ALLOWED_REMOTE_HEADERS
Attributes
key[R]
request[R]
Public Class Methods
new(key)
click to toggle source
# File lib/camo/server.rb, line 21 def initialize(key) @key = String(key) raise Errors::UndefinedKeyError if @key.empty? end
Public Instance Methods
call(env)
click to toggle source
# File lib/camo/server.rb, line 26 def call(env) build_request(env) return [404, default_response_headers, []] unless request.method == "GET" unless request.valid_digest? logger.error("Invalid digest") return [401, default_response_headers, ["Invalid digest"]] end unless request.valid_request? logger.error(request.errors) return [422, default_response_headers, request.errors.join(", ")] end logger.debug "Request", { type: request.digest_type, url: request.url, headers: request.headers, destination: request.destination_url, digest: request.digest } status, headers, body = client.get(request.destination_url, request.headers) headers = build_response_headers(headers) logger.debug "Response", {status: status, headers: headers, body_bytesize: body.bytesize} [status, headers, [body]] rescue Errors::ClientError => e logger.error(e.message) [422, default_response_headers, e.message] end
Private Instance Methods
build_request(env)
click to toggle source
# File lib/camo/server.rb, line 65 def build_request(env) @request ||= Request.new(env, key) end
build_response_headers(headers)
click to toggle source
# File lib/camo/server.rb, line 73 def build_response_headers(headers) headers .select { |k, _| ALLOWED_REMOTE_HEADERS.include?(k.downcase) } .merge(default_response_headers) end
client()
click to toggle source
# File lib/camo/server.rb, line 69 def client @client ||= Client.new end
logger()
click to toggle source
# File lib/camo/server.rb, line 61 def logger @logger ||= Logger.stdio end