travis-api/lib/travis/api/v3/access_control.rb
2015-01-13 15:22:20 +01:00

16 lines
603 B
Ruby

module Travis::API::V3
module AccessControl
REGISTER = {}
def self.new(env)
type, payload = env['HTTP_AUTHORIZATION'.freeze].to_s.split(" ", 2)
payload &&= payload.unpack(?m.freeze).first if type == 'basic'.freeze
payload &&= type == 'token'.freeze ? payload.gsub(/^"(.+)"$/, '\1'.freeze) : payload.split(?:.freeze)
modes = REGISTER.fetch(type, [])
access_control = modes.inject(nil) { |current, mode| current || mode.for_request(type, payload, env) }
raise WrongCredentials unless access_control
access_control
end
end
end