uffizzi-cli 0.5.1 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +69 -116
- data/config/uffizzi.rb +2 -1
- data/exe/uffizzi +1 -1
- data/lib/uffizzi/auth_helper.rb +3 -8
- data/lib/uffizzi/cli/common.rb +3 -3
- data/lib/uffizzi/cli/config.rb +38 -12
- data/lib/uffizzi/cli/connect.rb +82 -35
- data/lib/uffizzi/cli/disconnect.rb +2 -2
- data/lib/uffizzi/cli/login.rb +30 -11
- data/lib/uffizzi/cli/logout.rb +3 -3
- data/lib/uffizzi/cli/preview/service.rb +12 -11
- data/lib/uffizzi/cli/preview.rb +70 -127
- data/lib/uffizzi/cli/project/compose.rb +22 -26
- data/lib/uffizzi/cli/project/secret.rb +25 -14
- data/lib/uffizzi/cli/project.rb +33 -9
- data/lib/uffizzi/cli.rb +19 -22
- data/lib/uffizzi/clients/api/api_client.rb +108 -63
- data/lib/uffizzi/clients/api/api_routes.rb +38 -30
- data/lib/uffizzi/clients/api/http_client.rb +47 -45
- data/lib/uffizzi/config_file.rb +36 -20
- data/lib/uffizzi/date_helper.rb +45 -0
- data/lib/uffizzi/response_helper.rb +11 -7
- data/lib/uffizzi/services/command_service.rb +9 -0
- data/lib/uffizzi/services/compose_file_service.rb +3 -0
- data/lib/uffizzi/services/preview_service.rb +109 -0
- data/lib/uffizzi/shell.rb +7 -4
- data/lib/uffizzi/version.rb +1 -1
- data/lib/uffizzi.rb +4 -0
- data/man/uffizzi-config +65 -0
- data/man/uffizzi-config.html +144 -0
- data/man/uffizzi-config.ronn +55 -0
- data/man/uffizzi-connect +37 -0
- data/man/uffizzi-connect-acr +35 -0
- data/man/uffizzi-connect-acr.ronn +28 -0
- data/man/uffizzi-connect-docker-hub +34 -0
- data/man/uffizzi-connect-docker-hub.ronn +27 -0
- data/man/uffizzi-connect-ecr +35 -0
- data/man/uffizzi-connect-ecr.ronn +28 -0
- data/man/uffizzi-connect-gcr +40 -0
- data/man/uffizzi-connect-gcr.ronn +32 -0
- data/man/uffizzi-connect-ghcr +35 -0
- data/man/uffizzi-connect-ghcr.ronn +28 -0
- data/man/uffizzi-connect.ronn +31 -0
- data/man/uffizzi-disconnect +37 -0
- data/man/uffizzi-disconnect.ronn +31 -0
- data/man/uffizzi-login +2 -2
- data/man/uffizzi-login.ronn +2 -2
- data/man/uffizzi-preview-update +34 -0
- data/man/uffizzi-preview-update.ronn +33 -0
- data/man/uffizzi-project-set-default +34 -0
- data/man/uffizzi-project-set-default.html +111 -0
- data/man/uffizzi-project-set-default.ronn +26 -0
- metadata +26 -2
data/lib/uffizzi/cli/project.rb
CHANGED
@@ -5,37 +5,46 @@ require 'uffizzi/auth_helper'
|
|
5
5
|
require 'uffizzi/response_helper'
|
6
6
|
|
7
7
|
module Uffizzi
|
8
|
-
class
|
8
|
+
class Cli::Project < Thor
|
9
9
|
include ApiClient
|
10
10
|
|
11
|
-
desc 'compose', 'compose'
|
11
|
+
desc 'compose', 'Manage the compose file for a project'
|
12
12
|
method_option :file, required: false, aliases: '-f'
|
13
13
|
require_relative 'project/compose'
|
14
|
-
subcommand 'compose', Uffizzi::
|
14
|
+
subcommand 'compose', Uffizzi::Cli::Project::Compose
|
15
15
|
|
16
|
-
desc 'secret', '
|
16
|
+
desc 'secret', 'Manage secrets for a project'
|
17
17
|
require_relative 'project/secret'
|
18
|
-
subcommand 'secret', Uffizzi::
|
18
|
+
subcommand 'secret', Uffizzi::Cli::Project::Secret
|
19
19
|
|
20
|
-
desc 'list', '
|
20
|
+
desc 'list', 'List all projects in the account'
|
21
21
|
def list
|
22
22
|
run('list')
|
23
23
|
end
|
24
24
|
|
25
|
+
desc 'set-default PROJECT_SLUG', 'set-default'
|
26
|
+
def set_default(project_slug)
|
27
|
+
run('set-default', project_slug: project_slug)
|
28
|
+
end
|
29
|
+
|
30
|
+
map('set-default' => :set_default)
|
31
|
+
|
25
32
|
private
|
26
33
|
|
27
|
-
def run(command)
|
34
|
+
def run(command, project_slug: nil)
|
28
35
|
return Uffizzi.ui.say('You are not logged in.') unless Uffizzi::AuthHelper.signed_in?
|
29
36
|
|
30
37
|
case command
|
31
38
|
when 'list'
|
32
39
|
handle_list_command
|
40
|
+
when 'set-default'
|
41
|
+
handle_set_default_command(project_slug)
|
33
42
|
end
|
34
43
|
end
|
35
44
|
|
36
45
|
def handle_list_command
|
37
|
-
|
38
|
-
response = fetch_projects(
|
46
|
+
server = ConfigFile.read_option(:server)
|
47
|
+
response = fetch_projects(server)
|
39
48
|
|
40
49
|
if ResponseHelper.ok?(response)
|
41
50
|
handle_succeed_response(response)
|
@@ -52,6 +61,21 @@ module Uffizzi
|
|
52
61
|
print_projects(projects)
|
53
62
|
end
|
54
63
|
|
64
|
+
def handle_set_default_command(project_slug)
|
65
|
+
response = describe_project(ConfigFile.read_option(:server), project_slug)
|
66
|
+
|
67
|
+
if ResponseHelper.ok?(response)
|
68
|
+
handle_succeed_set_default_response(response)
|
69
|
+
else
|
70
|
+
ResponseHelper.handle_failed_response(response)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def handle_succeed_set_default_response(response)
|
75
|
+
set_default_project(response[:body][:project])
|
76
|
+
Uffizzi.ui.say('Default project has been updated.')
|
77
|
+
end
|
78
|
+
|
55
79
|
def print_projects(projects)
|
56
80
|
projects_list = projects.reduce('') do |acc, project|
|
57
81
|
"#{acc}#{project[:slug]}\n"
|
data/lib/uffizzi/cli.rb
CHANGED
@@ -3,57 +3,51 @@
|
|
3
3
|
require 'uffizzi'
|
4
4
|
|
5
5
|
module Uffizzi
|
6
|
-
class
|
6
|
+
class Cli < Thor
|
7
|
+
class_option :project, type: :string
|
8
|
+
|
7
9
|
def self.exit_on_failure?
|
8
10
|
true
|
9
11
|
end
|
10
12
|
|
11
|
-
desc 'version', '
|
13
|
+
desc 'version', 'Print version information for uffizzi CLI'
|
12
14
|
def version
|
13
15
|
require_relative 'version'
|
14
16
|
Uffizzi.ui.say(Uffizzi::VERSION)
|
15
17
|
end
|
16
18
|
|
17
|
-
desc 'login [OPTIONS]', 'Login
|
18
|
-
method_option :
|
19
|
-
method_option :
|
19
|
+
desc 'login [OPTIONS]', 'Login to Uffizzi to view and manage your previews'
|
20
|
+
method_option :server, required: false, aliases: '-s'
|
21
|
+
method_option :username, required: false, aliases: '-u'
|
20
22
|
def login
|
21
23
|
require_relative 'cli/login'
|
22
24
|
Login.new(options).run
|
23
25
|
end
|
24
26
|
|
25
|
-
desc 'logout', '
|
27
|
+
desc 'logout', 'Log out of a Uffizzi user account'
|
26
28
|
def logout
|
27
29
|
require_relative 'cli/logout'
|
28
30
|
Logout.new(options).run
|
29
31
|
end
|
30
32
|
|
31
|
-
desc 'projects', 'projects'
|
32
|
-
def projects
|
33
|
-
require_relative 'cli/projects'
|
34
|
-
Projects.new.run
|
35
|
-
end
|
36
|
-
|
37
33
|
desc 'project', 'project'
|
38
34
|
require_relative 'cli/project'
|
39
|
-
subcommand 'project',
|
35
|
+
subcommand 'project', Cli::Project
|
40
36
|
|
41
37
|
desc 'config', 'config'
|
42
38
|
require_relative 'cli/config'
|
43
|
-
subcommand 'config',
|
39
|
+
subcommand 'config', Cli::Config
|
44
40
|
|
45
41
|
desc 'preview', 'preview'
|
46
42
|
method_option :project, required: false
|
47
43
|
require_relative 'cli/preview'
|
48
|
-
subcommand 'preview',
|
44
|
+
subcommand 'preview', Cli::Preview
|
49
45
|
|
50
|
-
desc 'connect
|
51
|
-
|
52
|
-
|
53
|
-
Connect.new.run(credential_type, credential_file_path)
|
54
|
-
end
|
46
|
+
desc 'connect', 'connect'
|
47
|
+
require_relative 'cli/connect'
|
48
|
+
subcommand 'connect', Cli::Connect
|
55
49
|
|
56
|
-
desc 'disconect CREDENTIAL_TYPE', '
|
50
|
+
desc 'disconect CREDENTIAL_TYPE', 'Revoke a Uffizzi user account access to external services'
|
57
51
|
def disconnect(credential_type)
|
58
52
|
require_relative 'cli/disconnect'
|
59
53
|
Disconnect.new.run(credential_type)
|
@@ -62,11 +56,14 @@ module Uffizzi
|
|
62
56
|
class << self
|
63
57
|
protected
|
64
58
|
|
59
|
+
require_relative 'cli/common'
|
65
60
|
def dispatch(meth, given_args, given_opts, config)
|
66
61
|
args, opts = Thor::Options.split(given_args)
|
67
|
-
return
|
62
|
+
return Common.show_manual(filename(args)) if show_help?(args, opts)
|
68
63
|
|
69
64
|
super
|
65
|
+
rescue SystemExit, Interrupt, SocketError
|
66
|
+
raise Uffizzi::Error.new('The command was interrupted')
|
70
67
|
end
|
71
68
|
|
72
69
|
private
|
@@ -6,155 +6,199 @@ require_relative 'http_client'
|
|
6
6
|
module ApiClient
|
7
7
|
include ApiRoutes
|
8
8
|
|
9
|
-
def create_session(
|
10
|
-
uri = session_uri(
|
11
|
-
response =
|
9
|
+
def create_session(server, params = {})
|
10
|
+
uri = session_uri(server)
|
11
|
+
response = http_client.make_post_request(uri, params)
|
12
12
|
|
13
13
|
build_response(response)
|
14
14
|
end
|
15
15
|
|
16
|
-
def destroy_session(
|
17
|
-
uri = session_uri(
|
18
|
-
response =
|
16
|
+
def destroy_session(server)
|
17
|
+
uri = session_uri(server)
|
18
|
+
response = http_client.make_delete_request(uri)
|
19
19
|
|
20
20
|
build_response(response)
|
21
21
|
end
|
22
22
|
|
23
|
-
def fetch_projects(
|
24
|
-
uri = projects_uri(
|
25
|
-
response =
|
23
|
+
def fetch_projects(server)
|
24
|
+
uri = projects_uri(server)
|
25
|
+
response = http_client.make_get_request(uri)
|
26
|
+
|
27
|
+
build_response(response)
|
28
|
+
end
|
29
|
+
|
30
|
+
def fetch_credentials(server)
|
31
|
+
uri = credentials_uri(server)
|
32
|
+
|
33
|
+
response = http_client.make_get_request(uri)
|
26
34
|
|
27
35
|
build_response(response)
|
28
36
|
end
|
29
37
|
|
30
|
-
def
|
31
|
-
uri =
|
32
|
-
response =
|
38
|
+
def check_credential(server, type)
|
39
|
+
uri = check_credential_uri(server, type)
|
40
|
+
response = http_client.make_get_request(uri)
|
33
41
|
|
34
42
|
build_response(response)
|
35
43
|
end
|
36
44
|
|
37
|
-
def
|
38
|
-
uri =
|
45
|
+
def describe_project(server, project_slug)
|
46
|
+
uri = project_uri(server, project_slug)
|
39
47
|
response = Uffizzi::HttpClient.make_get_request(uri)
|
40
48
|
|
41
49
|
build_response(response)
|
42
50
|
end
|
43
51
|
|
44
|
-
def
|
45
|
-
uri =
|
46
|
-
response =
|
52
|
+
def create_credential(server, params)
|
53
|
+
uri = credentials_uri(server)
|
54
|
+
response = http_client.make_post_request(uri, params)
|
47
55
|
|
48
56
|
build_response(response)
|
49
57
|
end
|
50
58
|
|
51
|
-
def
|
52
|
-
uri =
|
53
|
-
response =
|
59
|
+
def fetch_deployment_services(server, project_slug, deployment_id)
|
60
|
+
uri = preview_services_uri(server, project_slug, deployment_id)
|
61
|
+
response = http_client.make_get_request(uri)
|
54
62
|
|
55
63
|
build_response(response)
|
56
64
|
end
|
57
65
|
|
58
|
-
def
|
59
|
-
uri =
|
60
|
-
response =
|
66
|
+
def delete_credential(server, credential_type)
|
67
|
+
uri = delete_credential_uri(server, credential_type)
|
68
|
+
response = http_client.make_delete_request(uri)
|
61
69
|
|
62
70
|
build_response(response)
|
63
71
|
end
|
64
72
|
|
65
|
-
def
|
66
|
-
uri =
|
67
|
-
response =
|
73
|
+
def fetch_deployment_service_logs(server, project_slug, deployment_id, container_name)
|
74
|
+
uri = preview_service_logs_uri(server, project_slug, deployment_id, container_name)
|
75
|
+
response = http_client.make_get_request(uri)
|
68
76
|
|
69
77
|
build_response(response)
|
70
78
|
end
|
71
79
|
|
72
|
-
def
|
73
|
-
uri =
|
74
|
-
response =
|
80
|
+
def set_compose_file(server, params, project_slug)
|
81
|
+
uri = compose_file_uri(server, project_slug)
|
82
|
+
response = http_client.make_post_request(uri, params)
|
75
83
|
|
76
84
|
build_response(response)
|
77
85
|
end
|
78
86
|
|
79
|
-
def
|
80
|
-
uri =
|
81
|
-
response =
|
87
|
+
def unset_compose_file(server, project_slug)
|
88
|
+
uri = compose_file_uri(server, project_slug)
|
89
|
+
response = http_client.make_delete_request(uri)
|
82
90
|
|
83
91
|
build_response(response)
|
84
92
|
end
|
85
93
|
|
86
|
-
def
|
87
|
-
uri =
|
88
|
-
response =
|
94
|
+
def fetch_secrets(server, project_slug)
|
95
|
+
uri = secrets_uri(server, project_slug)
|
96
|
+
response = http_client.make_get_request(uri)
|
89
97
|
|
90
98
|
build_response(response)
|
91
99
|
end
|
92
100
|
|
93
|
-
def
|
94
|
-
uri =
|
95
|
-
response =
|
101
|
+
def bulk_create_secrets(server, project_slug, params)
|
102
|
+
uri = "#{secrets_uri(server, project_slug)}/bulk_create"
|
103
|
+
response = http_client.make_post_request(uri, params)
|
96
104
|
|
97
105
|
build_response(response)
|
98
106
|
end
|
99
107
|
|
100
|
-
def
|
101
|
-
uri =
|
102
|
-
response =
|
108
|
+
def delete_secret(server, project_slug, id)
|
109
|
+
uri = secret_uri(server, project_slug, id)
|
110
|
+
response = http_client.make_delete_request(uri)
|
103
111
|
|
104
112
|
build_response(response)
|
105
113
|
end
|
106
114
|
|
107
|
-
def
|
108
|
-
uri =
|
109
|
-
response =
|
115
|
+
def describe_compose_file(server, project_slug)
|
116
|
+
uri = compose_file_uri(server, project_slug)
|
117
|
+
response = http_client.make_get_request(uri)
|
110
118
|
|
111
119
|
build_response(response)
|
112
120
|
end
|
113
121
|
|
114
|
-
def
|
115
|
-
uri =
|
116
|
-
response =
|
122
|
+
def validate_compose_file(server, project_slug)
|
123
|
+
uri = validate_compose_file_uri(server, project_slug)
|
124
|
+
response = http_client.make_get_request(uri)
|
117
125
|
|
118
126
|
build_response(response)
|
119
127
|
end
|
120
128
|
|
121
|
-
def
|
122
|
-
uri =
|
123
|
-
response =
|
129
|
+
def fetch_deployments(server, project_slug)
|
130
|
+
uri = deployments_uri(server, project_slug)
|
131
|
+
response = http_client.make_get_request(uri)
|
124
132
|
|
125
133
|
build_response(response)
|
126
134
|
end
|
127
135
|
|
128
|
-
def
|
129
|
-
uri =
|
130
|
-
response =
|
136
|
+
def create_deployment(server, project_slug, params)
|
137
|
+
uri = deployments_uri(server, project_slug)
|
138
|
+
response = http_client.make_post_request(uri, params)
|
131
139
|
|
132
140
|
build_response(response)
|
133
141
|
end
|
134
142
|
|
135
|
-
def
|
136
|
-
uri =
|
137
|
-
response =
|
143
|
+
def update_deployment(server, project_slug, deployment_id, params)
|
144
|
+
uri = deployment_uri(server, project_slug, deployment_id)
|
145
|
+
response = http_client.make_put_request(uri, params)
|
138
146
|
|
139
147
|
build_response(response)
|
140
148
|
end
|
141
149
|
|
142
|
-
def
|
143
|
-
uri =
|
144
|
-
response =
|
150
|
+
def delete_deployment(server, project_slug, deployment_id)
|
151
|
+
uri = deployment_uri(server, project_slug, deployment_id)
|
152
|
+
response = http_client.make_delete_request(uri)
|
153
|
+
|
154
|
+
build_response(response)
|
155
|
+
end
|
156
|
+
|
157
|
+
def describe_deployment(server, project_slug, deployment_id)
|
158
|
+
uri = deployment_uri(server, project_slug, deployment_id)
|
159
|
+
response = http_client.make_get_request(uri)
|
160
|
+
|
161
|
+
build_response(response)
|
162
|
+
end
|
163
|
+
|
164
|
+
def fetch_events(server, project_slug, deployment_id)
|
165
|
+
uri = events_uri(server, project_slug, deployment_id)
|
166
|
+
response = http_client.make_get_request(uri)
|
145
167
|
|
146
168
|
build_response(response)
|
147
169
|
end
|
148
170
|
|
149
|
-
def
|
150
|
-
uri =
|
151
|
-
response =
|
171
|
+
def get_activity_items(server, project_slug, deployment_id)
|
172
|
+
uri = activity_items_uri(server, project_slug, deployment_id)
|
173
|
+
response = http_client.make_get_request(uri)
|
174
|
+
|
175
|
+
build_response(response)
|
176
|
+
end
|
177
|
+
|
178
|
+
def deploy_containers(server, project_slug, deployment_id, params)
|
179
|
+
uri = deploy_containers_uri(server, project_slug, deployment_id)
|
180
|
+
response = http_client.make_post_request(uri, params)
|
152
181
|
|
153
182
|
build_response(response)
|
154
183
|
end
|
155
184
|
|
156
185
|
private
|
157
186
|
|
187
|
+
def http_client
|
188
|
+
if @http_client.nil?
|
189
|
+
params = {}
|
190
|
+
if Uffizzi::ConfigFile.exists?
|
191
|
+
params[:cookie] = Uffizzi::ConfigFile.read_option(:cookie)
|
192
|
+
params[:basic_auth_user] = Uffizzi::ConfigFile.read_option(:basic_auth_user)
|
193
|
+
params[:basic_auth_password] = Uffizzi::ConfigFile.read_option(:basic_auth_password)
|
194
|
+
end
|
195
|
+
|
196
|
+
@http_client = Uffizzi::HttpClient.new(params[:cookie], params[:basic_auth_user], params[:basic_auth_password])
|
197
|
+
end
|
198
|
+
|
199
|
+
@http_client
|
200
|
+
end
|
201
|
+
|
158
202
|
def build_response(response)
|
159
203
|
{
|
160
204
|
body: response_body(response),
|
@@ -164,7 +208,7 @@ module ApiClient
|
|
164
208
|
end
|
165
209
|
|
166
210
|
def response_body(response)
|
167
|
-
return nil if response.body.nil?
|
211
|
+
return nil if response.body.nil? || response.body.empty?
|
168
212
|
|
169
213
|
JSON.parse(response.body, symbolize_names: true)
|
170
214
|
rescue JSON::ParserError
|
@@ -178,6 +222,7 @@ module ApiClient
|
|
178
222
|
cookie_content = cookies.first
|
179
223
|
cookie = cookie_content.split(';').first
|
180
224
|
Uffizzi::ConfigFile.rewrite_cookie(cookie) if Uffizzi::ConfigFile.exists?
|
225
|
+
http_client.auth_cookie = cookie
|
181
226
|
|
182
227
|
cookie
|
183
228
|
end
|
@@ -3,64 +3,72 @@
|
|
3
3
|
require 'cgi'
|
4
4
|
|
5
5
|
module ApiRoutes
|
6
|
-
def compose_file_uri(
|
7
|
-
"#{
|
6
|
+
def compose_file_uri(server, project_slug)
|
7
|
+
"#{server}/api/cli/v1/projects/#{project_slug}/compose_file"
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
"#{
|
10
|
+
def project_uri(server, project_slug)
|
11
|
+
"#{server}/api/cli/v1/projects/#{project_slug}"
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
14
|
+
def projects_uri(server)
|
15
|
+
"#{server}/api/cli/v1/projects"
|
16
|
+
end
|
17
|
+
|
18
|
+
def secret_uri(server, project_slug, id)
|
15
19
|
path_id = CGI.escape(id)
|
16
|
-
"#{
|
20
|
+
"#{server}/api/cli/v1/projects/#{project_slug}/secrets/#{path_id}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def secrets_uri(server, project_slug)
|
24
|
+
"#{server}/api/cli/v1/projects/#{project_slug}/secrets"
|
17
25
|
end
|
18
26
|
|
19
|
-
def
|
20
|
-
"#{
|
27
|
+
def session_uri(server)
|
28
|
+
"#{server}/api/cli/v1/session"
|
21
29
|
end
|
22
30
|
|
23
|
-
def
|
24
|
-
"#{
|
31
|
+
def validate_compose_file_uri(server, project_slug)
|
32
|
+
"#{compose_files_uri(server, project_slug)}/validate"
|
25
33
|
end
|
26
34
|
|
27
|
-
def
|
28
|
-
"#{
|
35
|
+
def deployments_uri(server, project_slug)
|
36
|
+
"#{server}/api/cli/v1/projects/#{project_slug}/deployments"
|
29
37
|
end
|
30
38
|
|
31
|
-
def
|
32
|
-
"#{
|
39
|
+
def deployment_uri(server, project_slug, deployment_id)
|
40
|
+
"#{server}/api/cli/v1/projects/#{project_slug}/deployments/#{deployment_id}"
|
33
41
|
end
|
34
42
|
|
35
|
-
def
|
36
|
-
"#{
|
43
|
+
def activity_items_uri(server, project_slug, deployment_id)
|
44
|
+
"#{server}/api/cli/v1/projects/#{project_slug}/deployments/#{deployment_id}/activity_items"
|
37
45
|
end
|
38
46
|
|
39
|
-
def
|
40
|
-
"#{
|
47
|
+
def deploy_containers_uri(server, project_slug, deployment_id)
|
48
|
+
"#{server}/api/cli/v1/projects/#{project_slug}/deployments/#{deployment_id}/deploy_containers"
|
41
49
|
end
|
42
50
|
|
43
|
-
def
|
44
|
-
"#{
|
51
|
+
def events_uri(server, project_slug, deployment_id)
|
52
|
+
"#{server}/api/cli/v1/projects/#{project_slug}/deployments/#{deployment_id}/events"
|
45
53
|
end
|
46
54
|
|
47
|
-
def
|
48
|
-
"#{
|
55
|
+
def check_credential_uri(server, type)
|
56
|
+
"#{server}/api/cli/v1/account/credentials/#{type}/check_credential"
|
49
57
|
end
|
50
58
|
|
51
|
-
def credentials_uri(
|
52
|
-
"#{
|
59
|
+
def credentials_uri(server)
|
60
|
+
"#{server}/api/cli/v1/account/credentials"
|
53
61
|
end
|
54
62
|
|
55
|
-
def preview_services_uri(
|
56
|
-
"#{
|
63
|
+
def preview_services_uri(server, project_slug, deployment_id)
|
64
|
+
"#{server}/api/cli/v1/projects/#{project_slug}/deployments/#{deployment_id}/containers"
|
57
65
|
end
|
58
66
|
|
59
|
-
def delete_credential_uri(
|
60
|
-
"#{
|
67
|
+
def delete_credential_uri(server, credential_type)
|
68
|
+
"#{server}/api/cli/v1/account/credentials/#{credential_type}"
|
61
69
|
end
|
62
70
|
|
63
|
-
def preview_service_logs_uri(
|
64
|
-
"#{
|
71
|
+
def preview_service_logs_uri(server, project_slug, deployment_id, container_name)
|
72
|
+
"#{server}/api/cli/v1/projects/#{project_slug}/deployments/#{deployment_id}/containers/#{container_name}/logs"
|
65
73
|
end
|
66
74
|
end
|
@@ -2,67 +2,69 @@
|
|
2
2
|
|
3
3
|
require 'net/http'
|
4
4
|
require 'json'
|
5
|
-
require 'uffizzi/config_file'
|
6
|
-
require 'uffizzi/response_helper'
|
7
5
|
|
8
6
|
module Uffizzi
|
9
7
|
class HttpClient
|
10
|
-
|
11
|
-
def make_get_request(request_uri, cookies_required = true)
|
12
|
-
make_request(:get, request_uri, cookies_required)
|
13
|
-
end
|
8
|
+
attr_accessor :auth_cookie, :basic_auth_user, :basic_auth_password
|
14
9
|
|
15
|
-
|
16
|
-
|
17
|
-
|
10
|
+
def initialize(auth_cookie, basic_auth_user, basic_auth_password)
|
11
|
+
@auth_cookie = auth_cookie
|
12
|
+
@basic_auth_user = basic_auth_user
|
13
|
+
@basic_auth_password = basic_auth_password
|
14
|
+
end
|
18
15
|
|
19
|
-
|
20
|
-
|
21
|
-
|
16
|
+
def make_get_request(request_uri)
|
17
|
+
make_request(:get, request_uri)
|
18
|
+
end
|
22
19
|
|
23
|
-
|
24
|
-
|
25
|
-
|
20
|
+
def make_post_request(request_uri, params = {})
|
21
|
+
make_request(:post, request_uri, params)
|
22
|
+
end
|
26
23
|
|
27
|
-
|
24
|
+
def make_put_request(request_uri, params = {})
|
25
|
+
make_request(:put, request_uri, params)
|
26
|
+
end
|
28
27
|
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
def make_delete_request(request_uri)
|
29
|
+
make_request(:delete, request_uri)
|
30
|
+
end
|
32
31
|
|
33
|
-
|
34
|
-
request = build_request(uri, params, method, require_cookies)
|
32
|
+
private
|
35
33
|
|
36
|
-
|
37
|
-
|
34
|
+
def make_request(method, request_uri, params = {})
|
35
|
+
uri = URI(request_uri)
|
36
|
+
use_ssl = request_uri.start_with?('https')
|
38
37
|
|
39
|
-
|
38
|
+
response = Net::HTTP.start(uri.host, uri.port, use_ssl: use_ssl) do |http|
|
39
|
+
request = build_request(uri, params, method)
|
40
40
|
|
41
|
-
|
41
|
+
http.request(request)
|
42
42
|
end
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
Net::HTTP::Get.new(uri.path, headers)
|
49
|
-
when :post
|
50
|
-
Net::HTTP::Post.new(uri.path, headers)
|
51
|
-
when :delete
|
52
|
-
Net::HTTP::Delete.new(uri.path, headers)
|
53
|
-
when :put
|
54
|
-
Net::HTTP::Put.new(uri.path, headers)
|
55
|
-
end
|
56
|
-
if request.instance_of?(Net::HTTP::Post)
|
57
|
-
request.body = params.to_json
|
58
|
-
end
|
59
|
-
request['Cookie'] = ConfigFile.read_option(:cookie) if require_cookies
|
60
|
-
if ConfigFile.exists? && ConfigFile.option_exists?(:basic_auth_user) && ConfigFile.option_exists?(:basic_auth_password)
|
61
|
-
request.basic_auth(ConfigFile.read_option(:basic_auth_user), ConfigFile.read_option(:basic_auth_password))
|
62
|
-
end
|
44
|
+
raise Uffizzi::Error.new('Not authorized') if response.is_a?(Net::HTTPUnauthorized)
|
45
|
+
|
46
|
+
response
|
47
|
+
end
|
63
48
|
|
64
|
-
|
49
|
+
def build_request(uri, params, method)
|
50
|
+
headers = { 'Content-Type' => 'application/json' }
|
51
|
+
request = case method
|
52
|
+
when :get
|
53
|
+
Net::HTTP::Get.new(uri.path, headers)
|
54
|
+
when :post
|
55
|
+
Net::HTTP::Post.new(uri.path, headers)
|
56
|
+
when :delete
|
57
|
+
Net::HTTP::Delete.new(uri.path, headers)
|
58
|
+
when :put
|
59
|
+
Net::HTTP::Put.new(uri.path, headers)
|
60
|
+
end
|
61
|
+
if request.instance_of?(Net::HTTP::Post) || request.instance_of?(Net::HTTP::Put)
|
62
|
+
request.body = params.to_json
|
65
63
|
end
|
64
|
+
request['Cookie'] = @auth_cookie
|
65
|
+
request.basic_auth(@basic_auth_user, @basic_auth_password)
|
66
|
+
|
67
|
+
request
|
66
68
|
end
|
67
69
|
end
|
68
70
|
end
|