32 lines
1.1 KiB
Ruby
32 lines
1.1 KiB
Ruby
require 'travis/api/v3/access_control/generic'
|
|
|
|
module Travis::API::V3
|
|
class AccessControl::Application < AccessControl::Generic
|
|
attr_reader :application_name, :config, :user, :user_control
|
|
|
|
def initialize(application_name, user: nil)
|
|
@application_name = application_name
|
|
@config = Travis.config.applications[application_name]
|
|
@user = user
|
|
@user_control = user ? AccessControl::User.new(user) : AccessControl::Generic.new
|
|
raise ArgumentError, 'unknown application %p' % application_name unless config
|
|
raise ArgumentError, 'cannot use %p without a user' % application_name if config.requires_user and not user
|
|
end
|
|
|
|
def logged_in?
|
|
full_access? or !!user
|
|
end
|
|
|
|
def full_access?
|
|
config.full_access
|
|
end
|
|
|
|
def admin_for(repository)
|
|
return user_control.admin_for(repository) unless full_access?
|
|
admin = repository.users.where('permissions.admin = true'.freeze).order('users.synced_at DESC'.freeze).first
|
|
raise AdminAccessRequired, "no admin found for #{repository.slug}" unless admin
|
|
admin
|
|
end
|
|
end
|
|
end
|