1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
|
# frozen_string_literal: true
module Octokit
# Configuration options for {Client}, defaulting to values
# in {Default}
module Configurable
# @!attribute [w] access_token
# @see https://developer.github.com/v3/oauth/
# @return [String] OAuth2 access token for authentication
# @!attribute api_endpoint
# @return [String] Base URL for API requests. default: https://api.github.com/
# @!attribute auto_paginate
# @return [Boolean] Auto fetch next page of results until rate limit reached
# @!attribute [w] bearer_token
# @see https://developer.github.com/early-access/integrations/authentication/#as-an-integration
# @return [String] JWT bearer token for authentication
# @!attribute client_id
# @see https://developer.github.com/v3/oauth/
# @return [String] Configure OAuth app key
# @!attribute [w] client_secret
# @see https://developer.github.com/v3/oauth/
# @return [String] Configure OAuth app secret
# @!attribute default_media_type
# @see https://developer.github.com/v3/media/
# @return [String] Configure preferred media type (for API versioning, for example)
# @!attribute connection_options
# @see https://github.com/lostisland/faraday
# @return [Hash] Configure connection options for Faraday
# @!attribute login
# @return [String] GitHub username for Basic Authentication
# @!attribute management_console_password
# @return [String] An admin password set up for your GitHub Enterprise management console
# @!attribute management_console_endpoint
# @return [String] Base URL for API requests to the GitHub Enterprise management console
# @!attribute manage_ghes_endpoint
# @return [String] Base URL for API requests to the GitHub Enterprise Server Manage API
# @!attribute manage_ghes_username
# @return [String] API username for requests to the GitHub Enterprise Server Manage API
# @!attribute manage_ghes_password
# @return [String] API user password for requests to the GitHub Enterprise Server Manage API
# @!attribute middleware
# @see https://github.com/lostisland/faraday
# @return [Faraday::Builder or Faraday::RackBuilder] Configure middleware for Faraday
# @!attribute netrc
# @return [Boolean] Instruct Octokit to get credentials from .netrc file
# @!attribute netrc_file
# @return [String] Path to .netrc file. default: ~/.netrc
# @!attribute [w] password
# @return [String] GitHub password for Basic Authentication
# @!attribute per_page
# @return [String] Configure page size for paginated results. API default: 30
# @!attribute proxy
# @see https://github.com/lostisland/faraday
# @return [String] URI for proxy server
# @!attribute ssl_verify_mode
# @see https://github.com/lostisland/faraday
# @return [String] SSL verify mode for ssl connections
# @!attribute user_agent
# @return [String] Configure User-Agent header for requests.
# @!attribute web_endpoint
# @return [String] Base URL for web URLs. default: https://github.com/
attr_accessor :access_token, :auto_paginate, :bearer_token, :client_id,
:client_secret, :default_media_type, :connection_options,
:middleware, :netrc, :netrc_file,
:per_page, :proxy, :ssl_verify_mode, :user_agent
attr_writer :password, :web_endpoint, :api_endpoint, :login,
:management_console_endpoint, :management_console_password,
:manage_ghes_endpoint,
:manage_ghes_username,
:manage_ghes_password
class << self
# List of configurable keys for {Octokit::Client}
# @return [Array] of option keys
def keys
@keys ||= %i[
access_token
api_endpoint
auto_paginate
bearer_token
client_id
client_secret
connection_options
default_media_type
login
management_console_endpoint
management_console_password
manage_ghes_endpoint
manage_ghes_username
manage_ghes_password
middleware
netrc
netrc_file
per_page
password
proxy
ssl_verify_mode
user_agent
web_endpoint
]
end
end
# Set configuration options using a block
def configure
yield self
end
# Reset configuration options to default values
def reset!
# rubocop:disable Style/HashEachMethods
#
# This may look like a `.keys.each` which should be replaced with `#each_key`, but
# this doesn't actually work, since `#keys` is just a method we've defined ourselves.
# The class doesn't fulfill the whole `Enumerable` contract.
Octokit::Configurable.keys.each do |key|
# rubocop:enable Style/HashEachMethods
instance_variable_set(:"@#{key}", Octokit::Default.options[key])
end
self
end
alias setup reset!
# Compares client options to a Hash of requested options
#
# @param opts [Hash] Options to compare with current client options
# @return [Boolean]
def same_options?(opts)
opts.hash == options.hash
end
def api_endpoint
File.join(@api_endpoint, '')
end
def management_console_endpoint
File.join(@management_console_endpoint, '')
end
def manage_ghes_endpoint
File.join(@manage_ghes_endpoint, '')
end
# Base URL for generated web URLs
#
# @return [String] Default: https://github.com/
def web_endpoint
File.join(@web_endpoint, '')
end
def login
@login ||= (user.login if token_authenticated?)
end
def netrc?
!!@netrc
end
private
def options
Octokit::Configurable.keys.to_h { |key| [key, instance_variable_get(:"@#{key}")] }
end
def fetch_client_id_and_secret(overrides = {})
opts = options.merge(overrides)
opts.values_at :client_id, :client_secret
end
end
end
|