lmcadm 0.11.0 → 0.12.0
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 +5 -5
- data/.idea/inspectionProfiles/Project_Default.xml +6 -0
- data/.idea/vcs.xml +1 -1
- data/.ruby-version +1 -1
- data/lib/lmcadm/commands/terminal.rb +110 -0
- data/lib/lmcadm/version.rb +1 -1
- data/lmcadm.gemspec +2 -1
- metadata +21 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 77cf9b8cd93328770c7b0c0972ccd1dc3883caba497eee0f97ed26bbe5976680
|
4
|
+
data.tar.gz: cd5023a45af514136f7d82162e07e9901016aebd01f1ccf9762dfb530e609ac9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b29cf69f6ff585537667174b14164f3dfdad88016ef724242e4dcbc7876a22b75a17953d3860b50d36dc7a49295797127215fca6572bd7f1dda3920185190926
|
7
|
+
data.tar.gz: 5d0a07f656a6bb3c0c1dc7b9b410c340f2256294ac14fdece08cd417c4979b9742eb064dfefd48aaeef7b0604e7f0a935431fe396d7481321c74b4ba23b34fe3
|
data/.idea/vcs.xml
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.7.1
|
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'websocket-eventmachine-client'
|
2
|
+
require 'io/console'
|
3
|
+
require 'date'
|
4
|
+
module LMCAdm
|
5
|
+
|
6
|
+
class KeyboardHandler < EM::Connection
|
7
|
+
def receive_data(data)
|
8
|
+
if data == "\C-c"
|
9
|
+
EventMachine::stop_event_loop
|
10
|
+
end
|
11
|
+
LMCAdm::getWS.send '1' + data, type: 'binary'
|
12
|
+
|
13
|
+
end
|
14
|
+
#include EM::Protocols::LineText2
|
15
|
+
|
16
|
+
#def receive_line(data)
|
17
|
+
# LMCAdm::getWS.send '1' + data.strip + "\r", type: 'binary'
|
18
|
+
#end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.getWS
|
22
|
+
@ws
|
23
|
+
end
|
24
|
+
|
25
|
+
arg_name "device"
|
26
|
+
desc "Open terminal"
|
27
|
+
command :terminal do |t|
|
28
|
+
t.desc "Account name|UUID"
|
29
|
+
t.flag :account, :A, :required => true
|
30
|
+
|
31
|
+
t.action do |g, o, args|
|
32
|
+
account = LMC::Account.get_by_uuid_or_name o[:account]
|
33
|
+
device = account.devices.find { |d| d.name == args.first }
|
34
|
+
account.cloud.auth_for_account account
|
35
|
+
payload = {type: 'TERMINAL',
|
36
|
+
deviceIds: [device.id]}
|
37
|
+
sessionInfo = account.cloud.post ['cloud-service-devicetunnel', 'accounts', account.id, 'terminal'], payload
|
38
|
+
|
39
|
+
|
40
|
+
if g['use-tls']
|
41
|
+
url = 'wss://'
|
42
|
+
else
|
43
|
+
url = 'ws://'
|
44
|
+
end
|
45
|
+
url += g[:cloud_host]
|
46
|
+
url += '/cloud-service-devicetunnel/session'
|
47
|
+
headers_hash = {
|
48
|
+
'Sec-WebSocket-Protocol' => "TYPE_TERMINAL, REQU_USER, IDEN_#{sessionInfo.body.first['id']}, ACCT_#{account.id}, DEVC_#{device.id}"
|
49
|
+
}
|
50
|
+
begin
|
51
|
+
EventMachine.epoll
|
52
|
+
EventMachine.run do
|
53
|
+
trap("TERM") { stop g[:debug]}
|
54
|
+
trap("INT") { stop g[:debug]}
|
55
|
+
IO.console.raw!
|
56
|
+
EventMachine.open_keyboard(LMCAdm::KeyboardHandler)
|
57
|
+
@ws = WebSocket::EventMachine::Client.connect({uri: url, headers: headers_hash})
|
58
|
+
closing = false
|
59
|
+
|
60
|
+
@ws.onopen do
|
61
|
+
puts "Connected"
|
62
|
+
end
|
63
|
+
|
64
|
+
@ws.onmessage do |msg, type|
|
65
|
+
print "##{msg.length}##{msg.inspect}#" if g[:debug]
|
66
|
+
if msg.start_with? "1"
|
67
|
+
print msg[1..-1].gsub("\n","\r\n")
|
68
|
+
else
|
69
|
+
print msg if g[:debug]
|
70
|
+
end
|
71
|
+
print DateTime.now.to_s if g[:debug]
|
72
|
+
if msg.include? "\n\nGoodbye\n\n"
|
73
|
+
stop g[:debug]
|
74
|
+
closing = true
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
@ws.onclose do
|
79
|
+
print DateTime.now.to_s if g[:debug]
|
80
|
+
print "Disconnected\r\n"
|
81
|
+
stop g[:debug] unless closing
|
82
|
+
end
|
83
|
+
|
84
|
+
@ws.onerror do |e|
|
85
|
+
puts "Error: #{e}"
|
86
|
+
end
|
87
|
+
|
88
|
+
@ws.onping do |msg|
|
89
|
+
puts "Received ping: #{msg}" if g[:verbose]
|
90
|
+
end
|
91
|
+
|
92
|
+
@ws.onpong do |msg|
|
93
|
+
puts "Received pong: #{msg}" if g[:verbose]
|
94
|
+
end
|
95
|
+
|
96
|
+
def stop(debug=false)
|
97
|
+
print DateTime.now.to_s if debug
|
98
|
+
print "Terminating connection\r\n"
|
99
|
+
EventMachine.stop
|
100
|
+
end
|
101
|
+
end
|
102
|
+
ensure
|
103
|
+
IO.console.cooked!
|
104
|
+
end
|
105
|
+
# disabled, getting 401 anyways
|
106
|
+
#account.cloud.auth_for_account account
|
107
|
+
#account.cloud.delete ['cloud-service-devicetunnel', 'accounts', account.id, "terminal?ids=#{sessionInfo.body.first['id']}"]
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
data/lib/lmcadm/version.rb
CHANGED
data/lmcadm.gemspec
CHANGED
@@ -24,8 +24,9 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_development_dependency "minitest", "~> 5.0"
|
25
25
|
spec.add_development_dependency "pry-nav", "0.2.4"
|
26
26
|
|
27
|
-
spec.add_runtime_dependency 'lmc', '~> 0.
|
27
|
+
spec.add_runtime_dependency 'lmc', '~> 0.11.0'
|
28
28
|
spec.add_runtime_dependency 'gli', '~> 2.17'
|
29
29
|
spec.add_runtime_dependency 'table_print', '~> 1.5'
|
30
30
|
spec.add_runtime_dependency 'colorize', '~> 0.8'
|
31
|
+
spec.add_runtime_dependency 'websocket-eventmachine-client', '~> 1.3.0'
|
31
32
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lmcadm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- erpel
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-05-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.
|
75
|
+
version: 0.11.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.
|
82
|
+
version: 0.11.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: gli
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0.8'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: websocket-eventmachine-client
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 1.3.0
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 1.3.0
|
125
139
|
description:
|
126
140
|
email:
|
127
141
|
- philipp@copythat.de
|
@@ -132,6 +146,7 @@ extra_rdoc_files: []
|
|
132
146
|
files:
|
133
147
|
- ".gitignore"
|
134
148
|
- ".idea/encodings.xml"
|
149
|
+
- ".idea/inspectionProfiles/Project_Default.xml"
|
135
150
|
- ".idea/vcs.xml"
|
136
151
|
- ".ruby-version"
|
137
152
|
- Gemfile
|
@@ -155,6 +170,7 @@ files:
|
|
155
170
|
- lib/lmcadm/commands/principal.rb
|
156
171
|
- lib/lmcadm/commands/privatecloud.rb
|
157
172
|
- lib/lmcadm/commands/rights.rb
|
173
|
+
- lib/lmcadm/commands/terminal.rb
|
158
174
|
- lib/lmcadm/config_commands.rb
|
159
175
|
- lib/lmcadm/device_commands.rb
|
160
176
|
- lib/lmcadm/helpers/password_helper.rb
|
@@ -181,8 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
181
197
|
- !ruby/object:Gem::Version
|
182
198
|
version: '0'
|
183
199
|
requirements: []
|
184
|
-
|
185
|
-
rubygems_version: 2.6.11
|
200
|
+
rubygems_version: 3.1.2
|
186
201
|
signing_key:
|
187
202
|
specification_version: 4
|
188
203
|
summary: lmcadm is a command line client for LMC
|