109 lines
2.4 KiB
Ruby
109 lines
2.4 KiB
Ruby
module Gitolitable
|
|
module Users
|
|
extend ActiveSupport::Concern
|
|
|
|
def gitolite_users
|
|
if project.active?
|
|
users_for_active_project
|
|
elsif project.archived?
|
|
users_for_archived_project
|
|
else
|
|
users_for_closed_project
|
|
end
|
|
end
|
|
|
|
|
|
def users_for_active_project
|
|
data = {}
|
|
data[:rewind_users] = rewind_users + rewind_deploy_users
|
|
data[:write_users] = write_users
|
|
data[:read_users] = read_users + read_deploy_users
|
|
data[:developer_team] = developer_team
|
|
data[:all_read] = all_users
|
|
|
|
# Add other users
|
|
data[:read_users] << 'DUMMY_REDMINE_KEY' if read_users.empty? && write_users.empty? && rewind_users.empty?
|
|
data[:read_users] << 'gitweb' if git_web_available?
|
|
data[:read_users] << 'daemon' if git_daemon_available?
|
|
|
|
# Return users
|
|
data
|
|
end
|
|
|
|
|
|
def users_for_archived_project
|
|
data = {}
|
|
data[:read_users] = ['REDMINE_ARCHIVED_PROJECT']
|
|
data
|
|
end
|
|
|
|
|
|
def users_for_closed_project
|
|
data = {}
|
|
data[:read_users] = all_users
|
|
data[:read_users] << 'REDMINE_CLOSED_PROJECT'
|
|
data
|
|
end
|
|
|
|
|
|
def users
|
|
project.users_available
|
|
end
|
|
|
|
|
|
def rewind_users
|
|
@rewind_users ||= users.select { |u| u.allowed_to?(:manage_repository, project) }.map { |u| u.gitolite_identifier }.sort
|
|
end
|
|
|
|
|
|
def write_users
|
|
@write_users ||= users.select { |u| u.allowed_to?(:commit_access, project) }.map { |u| u.gitolite_identifier }.sort - rewind_users
|
|
end
|
|
|
|
|
|
def read_users
|
|
@read_users ||= users.select { |u| u.allowed_to?(:view_changesets, project) }.map { |u| u.gitolite_identifier }.sort - rewind_users - write_users
|
|
end
|
|
|
|
|
|
def developer_team
|
|
@developer_team ||= (rewind_users + write_users).sort
|
|
end
|
|
|
|
|
|
def all_users
|
|
@all_users ||= (rewind_users + write_users + read_users).sort
|
|
end
|
|
|
|
|
|
def rewind_deploy_users
|
|
deploy_users_for_keys(rewind_deploy_keys)
|
|
end
|
|
|
|
|
|
def read_deploy_users
|
|
deploy_users_for_keys(read_deploy_keys)
|
|
end
|
|
|
|
|
|
def rewind_deploy_keys
|
|
deploy_keys_by_perm('RW+')
|
|
end
|
|
|
|
|
|
def read_deploy_keys
|
|
deploy_keys_by_perm('R')
|
|
end
|
|
|
|
|
|
def deploy_keys_by_perm(perm)
|
|
deployment_credentials.active.select { |cred| cred.perm == perm }
|
|
end
|
|
|
|
|
|
def deploy_users_for_keys(keys)
|
|
keys.map { |cred| cred.gitolite_public_key.owner }
|
|
end
|
|
|
|
end
|
|
end
|