jbox-web/redmine_git_hosting

View on GitHub
lib/redmine_git_hosting/config/gitolite_base.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

require 'etc'

module RedmineGitHosting
  module Config
    module GitoliteBase
      extend self

      def check_cache
        @gitolite_home_dir        = nil
        @mirroring_keys_installed = nil
        @mirroring_public_key     = nil
        @gitolite_ssh_fingerprint = nil
      end

      def redmine_user
        @redmine_user ||= `whoami`.chomp.strip
      end

      def gitolite_use_sudo?
        redmine_user != gitolite_user
      end

      def gitolite_home_dir
        @gitolite_home_dir ||= begin
          Etc.getpwnam(gitolite_user).dir
        rescue StandardError
          nil
        end
      end

      def gitolite_bin_dir
        @gitolite_bin_dir ||= RedmineGitHosting::Commands.sudo_gitolite_query_rc 'GL_BINDIR'
      end

      def gitolite_lib_dir
        @gitolite_lib_dir ||= RedmineGitHosting::Commands.sudo_gitolite_query_rc 'GL_LIBDIR'
      end

      def gitolite_user
        get_setting :gitolite_user
      end

      def gitolite_server_host
        get_setting :gitolite_server_host
      end

      def gitolite_server_port
        get_setting :gitolite_server_port
      end

      def gitolite_ssh_private_key
        get_setting :gitolite_ssh_private_key
      end

      def gitolite_ssh_public_key
        get_setting :gitolite_ssh_public_key
      end

      def gitolite_ssh_public_key_fingerprint
        @gitolite_ssh_fingerprint ||= RedmineGitHosting::Utils::Ssh.ssh_fingerprint File.read(gitolite_ssh_public_key)
      end

      def gitolite_config_file
        File.basename get_setting(:gitolite_config_file)
      end

      def gitolite_config_dir
        dirs = File.dirname(gitolite_config_file).split('/')
        if dirs[0] == '.'
          'conf'
        else
          File.join('conf', *dirs)
        end
      end

      def gitolite_identifier_prefix
        get_setting :gitolite_identifier_prefix
      end

      def gitolite_identifier_strip_user_id?
        get_setting :gitolite_identifier_strip_user_id, true
      end

      def gitolite_key_subdir
        'redmine_git_hosting'
      end

      def git_config_username
        get_setting :git_config_username
      end

      def git_config_email
        get_setting :git_config_email
      end

      def gitolite_temp_dir
        get_setting :gitolite_temp_dir
      end

      def gitolite_url
        [gitolite_user, '@', gitolite_server_host].join
      end

      def gitolite_admin_dir
        File.join gitolite_temp_dir, gitolite_user, 'gitolite-admin.git'
      end

      def gitolite_log_level
        get_setting :gitolite_log_level
      end
    end

    extend Config::GitoliteBase
  end
end