aspera-cli 4.27.2 → 4.27.3
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
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +50 -0
- data/bin/ascli +2 -1
- data/docs/README.md +804 -746
- data/lib/aspera/agent/connect.rb +6 -4
- data/lib/aspera/agent/desktop.rb +2 -2
- data/lib/aspera/agent/direct.rb +3 -1
- data/lib/aspera/agent/node.rb +3 -3
- data/lib/aspera/api/alee.rb +1 -1
- data/lib/aspera/api/aoc.rb +14 -12
- data/lib/aspera/api/ats.rb +1 -1
- data/lib/aspera/api/cos_node.rb +2 -2
- data/lib/aspera/api/faspex.rb +9 -7
- data/lib/aspera/api/httpgw.rb +37 -33
- data/lib/aspera/api/node.rb +38 -33
- data/lib/aspera/ascmd.rb +3 -1
- data/lib/aspera/ascp/installation.rb +62 -27
- data/lib/aspera/ascp/management.rb +1 -0
- data/lib/aspera/assert.rb +4 -0
- data/lib/aspera/cli/ascp_actions.rb +20 -41
- data/lib/aspera/cli/async_transfer_store.rb +2 -2
- data/lib/aspera/cli/bootstrapper.rb +11 -15
- data/lib/aspera/cli/command_line.rb +252 -0
- data/lib/aspera/cli/command_registry.rb +149 -33
- data/lib/aspera/cli/command_spec.rb +103 -14
- data/lib/aspera/cli/completion/ascli.bash +12 -0
- data/lib/aspera/cli/completion/ascli.fish +16 -0
- data/lib/aspera/cli/completion/ascli.zsh +19 -0
- data/lib/aspera/cli/context.rb +3 -0
- data/lib/aspera/cli/deprecation.rb +37 -0
- data/lib/aspera/cli/extended_value.rb +2 -0
- data/lib/aspera/cli/formatter.rb +87 -75
- data/lib/aspera/cli/gem_checker.rb +1 -1
- data/lib/aspera/cli/hints.rb +7 -6
- data/lib/aspera/cli/http.rb +21 -21
- data/lib/aspera/cli/info.rb +3 -0
- data/lib/aspera/cli/mcp_tool.rb +47 -83
- data/lib/aspera/cli/option_declarator.rb +33 -42
- data/lib/aspera/cli/option_registry.rb +69 -0
- data/lib/aspera/cli/option_types.rb +103 -0
- data/lib/aspera/cli/option_value.rb +281 -0
- data/lib/aspera/cli/options.schema.yaml +38 -5
- data/lib/aspera/cli/parser.rb +307 -848
- data/lib/aspera/cli/plugins/alee.rb +7 -4
- data/lib/aspera/cli/plugins/aoc.rb +430 -380
- data/lib/aspera/cli/plugins/ats.rb +58 -73
- data/lib/aspera/cli/plugins/base.rb +190 -240
- data/lib/aspera/cli/plugins/basic_auth.rb +2 -10
- data/lib/aspera/cli/plugins/config.rb +244 -178
- data/lib/aspera/cli/plugins/console.rb +102 -38
- data/lib/aspera/cli/plugins/cos.rb +6 -23
- data/lib/aspera/cli/plugins/factory.rb +3 -0
- data/lib/aspera/cli/plugins/faspex5.rb +176 -173
- data/lib/aspera/cli/plugins/faspio.rb +5 -10
- data/lib/aspera/cli/plugins/httpgw.rb +8 -11
- data/lib/aspera/cli/plugins/mcp.rb +20 -55
- data/lib/aspera/cli/plugins/node.rb +277 -311
- data/lib/aspera/cli/plugins/orchestrator.rb +90 -77
- data/lib/aspera/cli/plugins/preview.rb +79 -90
- data/lib/aspera/cli/plugins/server.rb +76 -50
- data/lib/aspera/cli/plugins/shares.rb +68 -116
- data/lib/aspera/cli/preset_actions.rb +17 -10
- data/lib/aspera/cli/preset_manager.rb +12 -2
- data/lib/aspera/cli/prompt.rb +35 -0
- data/lib/aspera/cli/result.rb +13 -18
- data/lib/aspera/cli/runner.rb +31 -54
- data/lib/aspera/cli/special_values.rb +5 -0
- data/lib/aspera/cli/sync_actions.rb +41 -37
- data/lib/aspera/cli/terminal_formatter.rb +9 -3
- data/lib/aspera/cli/transfer_actions.rb +0 -6
- data/lib/aspera/cli/transfer_agent.rb +29 -35
- data/lib/aspera/cli/vault_manager.rb +0 -17
- data/lib/aspera/cli/version.rb +1 -1
- data/lib/aspera/cli/wizard.rb +4 -2
- data/lib/aspera/coverage.rb +1 -0
- data/lib/aspera/environment.rb +6 -0
- data/lib/aspera/faspex_gw.rb +2 -1
- data/lib/aspera/faspex_postproc.rb +1 -0
- data/lib/aspera/graphql.rb +5 -5
- data/lib/aspera/json_rpc/client.rb +5 -5
- data/lib/aspera/keychain/encrypted_hash.rb +1 -1
- data/lib/aspera/keychain/one_password_api.rb +1 -1
- data/lib/aspera/link_header.rb +2 -2
- data/lib/aspera/log.rb +22 -25
- data/lib/aspera/markdown.rb +2 -0
- data/lib/aspera/mime.rb +25 -0
- data/lib/aspera/node_simulator.rb +1 -0
- data/lib/aspera/oauth/base.rb +35 -25
- data/lib/aspera/oauth/factory.rb +1 -0
- data/lib/aspera/oauth/generic.rb +1 -1
- data/lib/aspera/oauth/jwt.rb +1 -1
- data/lib/aspera/oauth/web.rb +9 -8
- data/lib/aspera/preview/file_types.rb +4 -4
- data/lib/aspera/preview/generator.rb +7 -0
- data/lib/aspera/preview/options.rb +4 -4
- data/lib/aspera/preview/terminal.rb +4 -3
- data/lib/aspera/preview/utils.rb +9 -6
- data/lib/aspera/products/connect.rb +1 -1
- data/lib/aspera/rainbow.rb +7 -0
- data/lib/aspera/rest/aspera_errors.rb +60 -0
- data/lib/aspera/rest/call_error.rb +27 -0
- data/lib/aspera/rest/client.rb +514 -0
- data/lib/aspera/rest/error_analyzer.rb +113 -0
- data/lib/aspera/rest/list.rb +143 -0
- data/lib/aspera/rest/parameters.rb +55 -0
- data/lib/aspera/rest/util.rb +176 -0
- data/lib/aspera/rest.rb +7 -621
- data/lib/aspera/schema/IBM Aspera Console-enhanced.yaml +1125 -0
- data/lib/aspera/schema/IBM Aspera on Cloud Automation API-1.0.5-enhanced.yaml +2395 -0
- data/lib/aspera/schema/documentation.rb +13 -3
- data/lib/aspera/schema/registry.rb +18 -1
- data/lib/aspera/schema/validator.rb +92 -0
- data/lib/aspera/secret_hider.rb +36 -25
- data/lib/aspera/string_ext.rb +15 -0
- data/lib/aspera/temp_file_manager.rb +6 -5
- data/lib/aspera/transfer/parameters.rb +2 -0
- data/lib/aspera/transfer/spec.rb +1 -0
- data/lib/aspera/uri_reader.rb +11 -11
- data/lib/aspera/web_auth/index.html +147 -0
- data/lib/aspera/web_auth/server.rb +81 -0
- data.tar.gz.sig +0 -0
- metadata +39 -7
- metadata.gz.sig +0 -0
- data/lib/aspera/colors.rb +0 -79
- data/lib/aspera/rest_call_error.rb +0 -25
- data/lib/aspera/rest_error_analyzer.rb +0 -111
- data/lib/aspera/rest_errors_aspera.rb +0 -58
- data/lib/aspera/rest_list.rb +0 -136
- data/lib/aspera/web_auth.rb +0 -211
data/lib/aspera/web_auth.rb
DELETED
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'aspera/web_server_simple'
|
|
4
|
-
require 'aspera/assert'
|
|
5
|
-
require 'erb'
|
|
6
|
-
|
|
7
|
-
module Aspera
|
|
8
|
-
# servlet called on callback: it records the callback request
|
|
9
|
-
class WebAuthServlet < WEBrick::HTTPServlet::AbstractServlet
|
|
10
|
-
# @param server [WEBrick::HTTPServer] the HTTP server instance
|
|
11
|
-
# @param web_auth [WebAuth] the WebAuth instance to record the callback
|
|
12
|
-
def initialize(server, web_auth)
|
|
13
|
-
Log.log.debug('WebAuthServlet initialize')
|
|
14
|
-
super(server)
|
|
15
|
-
@web_auth = web_auth
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def service(request, response)
|
|
19
|
-
Log.log.debug { "received request from browser #{request.request_method} #{request.path}" }
|
|
20
|
-
Aspera.assert_values(request.request_method, ['GET'], type: WEBrick::HTTPStatus::MethodNotAllowed) { 'HTTP verb' }
|
|
21
|
-
additional_info = @web_auth.signal_request(request)
|
|
22
|
-
response.status = 200
|
|
23
|
-
response.content_type = 'text/html'
|
|
24
|
-
response.body = <<~HTML
|
|
25
|
-
<!DOCTYPE html>
|
|
26
|
-
<html lang="en">
|
|
27
|
-
<head>
|
|
28
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
29
|
-
<link rel="icon" href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDMyIDMyIiBmaWxsPSJub25lIiBzdHJva2U9IiMyMjIiIHN0cm9rZS13aWR0aD0iMyI+CiAgPGxpbmUgeDE9IjMiIHkxPSIzIiB4Mj0iMjkiIHkyPSIyOSIgIHN0cm9rZT0icmVkIi8+CiAgPGxpbmUgeDE9IjI5IiB5MT0iMyIgeDI9IjMiIHkyPSIyOSIgc3Ryb2tlPSJyZWQiIC8+Cjwvc3ZnPg==" type="image/svg+xml">
|
|
30
|
-
<title>Close Now</title>
|
|
31
|
-
<style>
|
|
32
|
-
body {
|
|
33
|
-
font-family: Arial, sans-serif;
|
|
34
|
-
text-align: center;
|
|
35
|
-
padding: 2rem;
|
|
36
|
-
margin: 0;
|
|
37
|
-
background: linear-gradient(135deg, #f0f4f8, #d9e2ec);
|
|
38
|
-
color: #333;
|
|
39
|
-
overflow: hidden; /* Ensure no scrollbars for the background animation */
|
|
40
|
-
position: relative;
|
|
41
|
-
}
|
|
42
|
-
h1 {
|
|
43
|
-
font-size: 2.5rem;
|
|
44
|
-
color: #0078d4;
|
|
45
|
-
}
|
|
46
|
-
p {
|
|
47
|
-
font-size: 1.2rem;
|
|
48
|
-
margin-top: 1rem;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/* Styling for animated IBM logos */
|
|
52
|
-
.logo {
|
|
53
|
-
position: absolute;
|
|
54
|
-
bottom: -100px;
|
|
55
|
-
width: 40px;
|
|
56
|
-
height: 40px;
|
|
57
|
-
background: none;
|
|
58
|
-
display: flex;
|
|
59
|
-
justify-content: center;
|
|
60
|
-
align-items: center;
|
|
61
|
-
animation: rise 10s infinite ease-in-out;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
.logo svg {
|
|
65
|
-
width: 100%;
|
|
66
|
-
height: 100%;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
.logo:nth-child(odd) {
|
|
70
|
-
animation-duration: 8s;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
.logo:nth-child(even) {
|
|
74
|
-
animation-duration: 12s;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
@keyframes rise {
|
|
78
|
-
0% {
|
|
79
|
-
transform: translateY(0) scale(1);
|
|
80
|
-
opacity: 1;
|
|
81
|
-
}
|
|
82
|
-
50% {
|
|
83
|
-
opacity: 0.7;
|
|
84
|
-
}
|
|
85
|
-
100% {
|
|
86
|
-
transform: translateY(-120vh) scale(0.7);
|
|
87
|
-
opacity: 0;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
</style>
|
|
91
|
-
</head>
|
|
92
|
-
<body>
|
|
93
|
-
<h1>Thank You!</h1>
|
|
94
|
-
<p>You can close this window.</p>
|
|
95
|
-
<p>#{ERB::Util.html_escape(additional_info) unless additional_info.nil?}</p>
|
|
96
|
-
|
|
97
|
-
<!-- JavaScript to generate IBM logos -->
|
|
98
|
-
<script>
|
|
99
|
-
// Function to create logos dynamically
|
|
100
|
-
function createLogos() {
|
|
101
|
-
const body = document.body;
|
|
102
|
-
const svgContent = `
|
|
103
|
-
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000px" height="401.149px" viewBox="0 0 1000 401.149" xml:space="preserve">
|
|
104
|
-
<g>
|
|
105
|
-
<rect fill="#1F70C1" x="0" y="373.217" width="194.433" height="27.833"/>
|
|
106
|
-
<rect fill="#1F70C1" x="0" y="319.83" width="194.433" height="27.931"/>
|
|
107
|
-
<rect fill="#1F70C1" x="55.468" y="266.541" width="83.399" height="27.932"/>
|
|
108
|
-
<rect fill="#1F70C1" x="55.468" y="213.253" width="83.399" height="27.932"/>
|
|
109
|
-
<rect fill="#1F70C1" x="55.468" y="159.964" width="83.399" height="27.932"/>
|
|
110
|
-
<rect fill="#1F70C1" x="55.468" y="106.577" width="83.399" height="27.932"/>
|
|
111
|
-
<rect fill="#1F70C1" x="0" y="53.288" width="194.433" height="27.932"/>
|
|
112
|
-
<rect fill="#1F70C1" x="0" y="0" width="194.433" height="27.932"/>
|
|
113
|
-
<path fill="#1F70C1" d="M222.167,347.761h299.029c5.051-8.617,8.815-18.027,11.094-27.932H222.167V347.761z"/>
|
|
114
|
-
<path fill="#1F70C1" d="M497.92,213.253H277.734v27.932h243.463C514.857,230.487,507.032,221.078,497.92,213.253z"/>
|
|
115
|
-
<path fill="#1F70C1" d="M277.734,159.964v27.932H497.92c9.311-7.825,17.135-17.235,23.277-27.932H277.734z"/>
|
|
116
|
-
<path fill="#1F70C1" d="M521.197,53.288H222.167V81.22H532.29C529.715,71.315,525.951,61.906,521.197,53.288z"/>
|
|
117
|
-
<path fill="#1F70C1" d="M429.279,0H222.167v27.932h278.526C482.072,10.697,456.815,0,429.279,0z"/>
|
|
118
|
-
<rect fill="#1F70C1" x="277.734" y="106.577" width="83.3" height="27.932"/>
|
|
119
|
-
<path fill="#1F70C1" d="M444.433,134.509h87.163c2.476-8.914,3.764-18.324,3.764-27.932h-90.927z"/>
|
|
120
|
-
<rect fill="#1F70C1" x="277.734" y="266.541" width="83.3" height="27.932"/>
|
|
121
|
-
<path fill="#1F70C1" d="M444.433,266.541v27.932h90.927c0-9.608-1.288-19.017-3.764-27.932H444.433z"/>
|
|
122
|
-
<path fill="#1F70C1" d="M222.167,400.852h207.112c27.734,0,52.793-10.697,71.513-27.932H222.167V400.852z"/>
|
|
123
|
-
<rect fill="#1F70C1" x="555.567" y="373.217" width="138.866" height="27.833"/>
|
|
124
|
-
<rect fill="#1F70C1" x="555.567" y="319.83" width="138.866" height="27.931"/>
|
|
125
|
-
<rect fill="#1F70C1" x="611.034" y="266.541" width="83.399" height="27.932"/>
|
|
126
|
-
<rect fill="#1F70C1" x="611.034" y="213.253" width="83.399" height="27.932"/>
|
|
127
|
-
<polygon fill="#1F70C1" points="733.063,53.288 555.567,53.288 555.567,81.22 742.67,81.22"/>
|
|
128
|
-
<polygon fill="#1F70C1" points="714.639,0 555.567,0 555.567,27.932 724.247,27.932"/>
|
|
129
|
-
<rect fill="#1F70C1" x="861.034" y="373.217" width="138.866" height="27.833"/>
|
|
130
|
-
<rect fill="#1F70C1" x="861.034" y="319.83" width="138.866" height="27.931"/>
|
|
131
|
-
<rect fill="#1F70C1" x="861.034" y="266.541" width="83.399" height="27.932"/>
|
|
132
|
-
<rect fill="#1F70C1" x="861.034" y="213.253" width="83.399" height="27.932"/>
|
|
133
|
-
<polygon fill="#1F70C1" points="861.034,187.896 944.433,187.896 944.433,159.964 861.034,159.964 694.433,159.964 611.034,159.964 611.034,187.896 694.433,187.896 852.219,187.896"/>
|
|
134
|
-
<polygon fill="#1F70C1" points="944.433,106.577 803.982,106.577 794.374,134.509 944.433,134.509"/>
|
|
135
|
-
<polygon fill="#1F70C1" points="840.927,0 831.319,27.932 1000,27.932 1000,0"/>
|
|
136
|
-
<polygon fill="#1F70C1" points="777.734,400.852 787.341,373.217 768.126,373.217"/>
|
|
137
|
-
<polygon fill="#1F70C1" points="759.311,347.761 796.157,347.761 806.062,319.83 749.505,319.83"/>
|
|
138
|
-
<polygon fill="#1F70C1" points="740.59,294.473 814.877,294.473 824.683,266.541 730.784,266.541"/>
|
|
139
|
-
<polygon fill="#1F70C1" points="721.969,241.185 833.597,241.185 843.106,213.253 712.361,213.253"/>
|
|
140
|
-
<polygon fill="#1F70C1" points="611.034,134.509 761.093,134.509 751.486,106.577 611.034,106.577"/>
|
|
141
|
-
<polygon fill="#1F70C1" points="812.896,81.22 1000,81.22 1000,53.288 822.405,53.288"/>
|
|
142
|
-
</g>
|
|
143
|
-
</svg>
|
|
144
|
-
`;
|
|
145
|
-
for (let i = 0; i < 20; i++) {
|
|
146
|
-
const logo = document.createElement('div');
|
|
147
|
-
logo.className = 'logo';
|
|
148
|
-
const size = Math.random() * 30 + 20; // Random size between 20px and 50px
|
|
149
|
-
logo.style.width = `${size}px`;
|
|
150
|
-
logo.style.height = `${size}px`;
|
|
151
|
-
logo.style.left = `${Math.random() * 100}vw`;
|
|
152
|
-
logo.style.animationDelay = `${Math.random() * 5}s`;
|
|
153
|
-
logo.innerHTML = svgContent;
|
|
154
|
-
body.appendChild(logo);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// Call the function to create logos on load
|
|
159
|
-
createLogos();
|
|
160
|
-
</script>
|
|
161
|
-
</body>
|
|
162
|
-
</html>
|
|
163
|
-
HTML
|
|
164
|
-
|
|
165
|
-
return
|
|
166
|
-
end
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
# start a local web server
|
|
170
|
-
# then start a browser that will callback the local server upon authentication
|
|
171
|
-
# store the final query
|
|
172
|
-
class WebAuth < WebServerSimple
|
|
173
|
-
# @param endpoint_url [String] e.g. 'https://127.0.0.1:12345'
|
|
174
|
-
# @param additional_info [String] Information in web page
|
|
175
|
-
def initialize(endpoint_url, additional_info = nil)
|
|
176
|
-
uri = URI.parse(endpoint_url)
|
|
177
|
-
super(uri)
|
|
178
|
-
@mutex = Mutex.new
|
|
179
|
-
@cond = ConditionVariable.new
|
|
180
|
-
@expected_path = uri.path.empty? ? '/' : uri.path
|
|
181
|
-
@query = nil
|
|
182
|
-
@additional_info = additional_info
|
|
183
|
-
# last argument (self) is provided to constructor of servlet
|
|
184
|
-
mount(@expected_path, WebAuthServlet, self)
|
|
185
|
-
# server runs in thread
|
|
186
|
-
Thread.new { start }
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
# Called by web server thread on received request
|
|
190
|
-
# @return [String] additional information for web page
|
|
191
|
-
def signal_request(request)
|
|
192
|
-
raise WEBrick::HTTPStatus::NotFound, "unexpected path: #{request.path}" unless request.path.eql?(@expected_path)
|
|
193
|
-
# acquire lock and signal change
|
|
194
|
-
@mutex.synchronize do
|
|
195
|
-
@query = request.query
|
|
196
|
-
@cond.signal
|
|
197
|
-
end
|
|
198
|
-
return @additional_info
|
|
199
|
-
end
|
|
200
|
-
|
|
201
|
-
# wait for request on web server (main thread)
|
|
202
|
-
# @return [Hash] the query
|
|
203
|
-
def received_request
|
|
204
|
-
# wait for signal from thread
|
|
205
|
-
@mutex.synchronize { @cond.wait(@mutex) }
|
|
206
|
-
# tell server thread to stop
|
|
207
|
-
shutdown
|
|
208
|
-
return @query
|
|
209
|
-
end
|
|
210
|
-
end
|
|
211
|
-
end
|