jbox-web/redmine_git_hosting

View on GitHub
lib/redmine_git_hosting/gitolite_wrappers/global/enable_rw_access.rb

Summary

Maintainability
A
25 mins
Test Coverage
# frozen_string_literal: true

module RedmineGitHosting
  module GitoliteWrappers
    module Global
      class EnableRwAccess < GitoliteWrappers::Base
        include Common

        def call
          if all_repository_config.nil?
            admin.transaction do
              gitolite_config.add_repo rw_access_config
              gitolite_admin_repo_commit 'Enable RW access on all Gitolite repositories'
            end
          else
            logger.info "#{context} : '@all' repository already configured, check for RedmineGitHosting key presence"
            admin.transaction do
              add_redmine_key
              gitolite_admin_repo_commit 'Enable RW access on all Gitolite repositories'
            end
          end
        end

        def add_redmine_key
          # RedmineGitHosting key must be in RW+ group
          # If not create the RW+ group and add the key
          if perms.empty?
            logger.info "#{context} : No permissions set for '@all' repository, add RedmineGitHosting key"
            repo_conf.permissions = rw_access_perms
          elsif users.nil?
            logger.info "#{context} : RedmineGitHosting key is not present, add it !"
            repo_conf.permissions[0]['RW+'][''] = [redmine_gitolite_key]
          elsif users.exclude? redmine_gitolite_key
            logger.info "#{context} : RedmineGitHosting key is not present, add it !"
            repo_conf.permissions[0]['RW+'][''].push redmine_gitolite_key
          else
            logger.info "#{context} : RedmineGitHosting key is present, nothing to do."
          end

          # Delete DUMMY_REDMINE_KEY if present
          return unless repo_conf.permissions[0]['RW+'][''].include? 'DUMMY_REDMINE_KEY'

          repo_conf.permissions[0]['RW+'][''].delete 'DUMMY_REDMINE_KEY'
        end
      end
    end
  end
end