73 lines
1.9 KiB
Ruby
73 lines
1.9 KiB
Ruby
module Travis::API::V3
|
|
class AccessControl::Generic
|
|
DEFAULT_LIMIT = 25
|
|
MAX_LIMT = 100
|
|
NO_LIMIT = 2 ** 62 - 1 # larges Fixnum on MRI
|
|
|
|
def self.for_request(type, payload, env)
|
|
end
|
|
|
|
def self.auth_type(*list)
|
|
list.each { |e| (AccessControl::REGISTER[e] ||= []) << self }
|
|
end
|
|
|
|
def visible?(object)
|
|
full_access? or dispatch(object)
|
|
end
|
|
|
|
def user
|
|
end
|
|
|
|
def logged_in?
|
|
false
|
|
end
|
|
|
|
# def limit(resource_type, value = nil)
|
|
# case value
|
|
# when ''.freeze, 'true'.freeze, true, nil then DEFAULT_LIMIT
|
|
# when 'false'.freeze, false then NO_LIMIT
|
|
# when /^\d+$/ then limit(resource_type, Integer(value))
|
|
# when 0..MAX_LIMIT then value
|
|
# end
|
|
# # # TODO move to config
|
|
# # value = Time.now.to_i if value == false or value == 'false'.freeze
|
|
# # value = 25 if value.nil? or value == ''.freezee or value ==
|
|
# # value = Integer(value)
|
|
# # value = 100 if value > 100 and not full_access?
|
|
# # value = 0 if value < 0
|
|
# rescue TypeError
|
|
# raise WrongParams, 'limit must be a positive integer'.freeze, resource_type: resource_type
|
|
# end
|
|
|
|
protected
|
|
|
|
def repository_visible?(repository)
|
|
return true if unrestricted_api? and not repository.private?
|
|
private_repository_visible?(repository)
|
|
end
|
|
|
|
def private_repository_visible?(repository)
|
|
false
|
|
end
|
|
|
|
def full_access?
|
|
false
|
|
end
|
|
|
|
def public_api?
|
|
!Travis.config.private_api
|
|
end
|
|
|
|
def unrestricted_api?
|
|
full_access? or logged_in? or public_api?
|
|
end
|
|
|
|
private
|
|
|
|
def dispatch(object, method = caller_locations.first.base_label)
|
|
method = object.class.name.underscore + ?_.freeze + method
|
|
send(method, object) if respond_to?(method, true)
|
|
end
|
|
end
|
|
end
|