-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
management_console.rb
176 lines (154 loc) · 5.72 KB
/
management_console.rb
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
172
173
174
175
176
module Octokit
class EnterpriseManagementConsoleClient
# Methods for the Enterprise Management Console API
#
# @see https://developer.github.com/v3/enterprise-admin/management_console/
module ManagementConsole
# Uploads a license for the first time
#
# @param license [String] The path to your .ghl license file.
# @param settings [Hash] A hash configuration of the initial settings.
#
# @see https://docs.github.com/en/enterprise-server@3.4/rest/enterprise-admin/management-console#create-a-github-license
# @return nil
def upload_license(license, settings = nil)
conn = faraday_configuration
params = { }
params[:license] = Faraday::UploadIO.new(license, 'binary')
params[:password] = @management_console_password
params[:settings] = "#{settings.to_json}" unless settings.nil?
@last_response = conn.post("/setup/api/start", params)
end
# Start a configuration process.
#
# @return nil
def start_configuration
post "/setup/api/configure", password_hash
end
# Upgrade an Enterprise installation
#
# @param license [String] The path to your .ghl license file.
#
# @return nil
def upgrade(license)
conn = faraday_configuration
params = { }
params[:license] = Faraday::UploadIO.new(license, 'binary')
params[:api_key] = @management_console_password
@last_response = conn.post("/setup/api/upgrade", params)
end
# Get information about the Enterprise installation
#
# @return [Sawyer::Resource] The installation information
def config_status
get "/setup/api/configcheck", password_hash
end
alias :config_check :config_status
# Get information about the Enterprise installation
#
# @return [Sawyer::Resource] The settings
def settings
get "/setup/api/settings", password_hash
end
alias :get_settings :settings
# Modify the Enterprise settings
#
# @param settings [Hash] A hash configuration of the new settings
#
# @return [nil]
def edit_settings(settings)
queries = password_hash
queries[:query][:settings] = "#{settings.to_json}"
put "/setup/api/settings", queries
end
# Get information about the Enterprise maintenance status
#
# @return [Sawyer::Resource] The maintenance status
def maintenance_status
get "/setup/api/maintenance", password_hash
end
alias :get_maintenance_status :maintenance_status
# Start (or turn off) the Enterprise maintenance mode
#
# @param maintenance [Hash] A hash configuration of the maintenance settings
# @return [nil]
def set_maintenance_status(maintenance)
queries = password_hash
queries[:query][:maintenance] = "#{maintenance.to_json}"
post "/setup/api/maintenance", queries
end
alias :edit_maintenance_status :set_maintenance_status
# Fetch the authorized SSH keys on the Enterprise install
#
# @return [Sawyer::Resource] An array of authorized SSH keys
def authorized_keys
get "/setup/api/settings/authorized-keys", password_hash
end
alias :get_authorized_keys :authorized_keys
# Add an authorized SSH keys on the Enterprise install
#
# @param key Either the file path to a key, a File handler to the key, or the contents of the key itself
# @return [Sawyer::Resource] An array of authorized SSH keys
def add_authorized_key(key)
queries = password_hash
case key
when String
if File.exist?(key)
key = File.open(key, "r")
content = key.read.strip
key.close
else
content = key
end
when File
content = key.read.strip
key.close
end
queries[:query][:authorized_key] = content
post "/setup/api/settings/authorized-keys", queries
end
# Removes an authorized SSH keys from the Enterprise install
#
# @param key Either the file path to a key, a File handler to the key, or the contents of the key itself
# @return [Sawyer::Resource] An array of authorized SSH keys
def remove_authorized_key(key)
queries = password_hash
case key
when String
if File.exist?(key)
key = File.open(key, "r")
content = key.read.strip
key.close
else
content = key
end
when File
content = key.read.strip
key.close
end
queries[:query][:authorized_key] = content
delete "/setup/api/settings/authorized-keys", queries
end
alias :delete_authorized_key :remove_authorized_key
end
private
def password_hash
{ :query => { :api_key => @management_console_password } }
end
# We fall back to raw Faraday for handling the licenses because I'm suspicious
# that Sawyer isn't handling binary POSTs correctly: https://github.com/lostisland/sawyer/blob/03fca4c020f465ec42856d0486ec3991859b0aed/lib/sawyer/agent.rb#L85
def faraday_configuration
@faraday_configuration ||= Faraday.new(:url => @management_console_endpoint) do |http|
http.headers[:user_agent] = user_agent
http.request :multipart
http.request :url_encoded
# Disabling SSL is essential for certain self-hosted Enterprise instances
if self.connection_options[:ssl] && !self.connection_options[:ssl][:verify]
http.ssl[:verify] = false
end
http.use Octokit::Response::RaiseError
http.adapter Faraday.default_adapter
end
end
end
end