em-wssh 0.3.0 → 0.4.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 +4 -4
- data/em-wssh.gemspec +1 -1
- data/lib/em/wssh/client.rb +5 -1
- data/lib/em/wssh/connect.rb +6 -2
- data/lib/em/wssh/exe.rb +28 -7
- data/lib/em/wssh/help.rb +36 -10
- data/lib/em/wssh/server.rb +5 -3
- data/lib/em/wssh/service.rb +1 -1
- data/lib/em/wssh/version.rb +12 -0
- data/lib/em/wssh.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60abc80ee170a46ba2b1b2e70166eeb4a5f5718e
|
4
|
+
data.tar.gz: be2a072ef48e86d235c1a88781f9855f482ee416
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb11f5728fc982b93a87fb395e98eed141e45cac2993e37e0d080c250fbed1c84f211b47fe7bdcd2f267a0397c22c5d5ffc29cf0c4f12591882ab265a26d5888
|
7
|
+
data.tar.gz: d69126590e4af9e4337769032a31e8dc461ad019b9c84ef04ed3fcb3e8b1bdd514edb9f2aebc839fb8a837c3d5f796459254624a6dfb0474644df81eb09df40f
|
data/em-wssh.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["ukoloff@gmail.com"]
|
11
11
|
spec.description = 'Proxy SSH connection through Websocket (nginx)'
|
12
12
|
spec.summary = ''
|
13
|
-
spec.homepage = ""
|
13
|
+
spec.homepage = "https://github.com/ukoloff/em-wssh"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
data/lib/em/wssh/client.rb
CHANGED
@@ -2,13 +2,17 @@ require_relative '../wssh'
|
|
2
2
|
|
3
3
|
module EventMachine::Wssh
|
4
4
|
module Client
|
5
|
+
|
6
|
+
Title='Connect to WSSH server'
|
7
|
+
|
5
8
|
Need=%w(faye/websocket)
|
6
9
|
|
7
10
|
def self.help
|
11
|
+
require_relative 'exe'
|
8
12
|
puts <<-EOT
|
9
13
|
WSSH client
|
10
14
|
|
11
|
-
Usage:
|
15
|
+
Usage: #{Exe.biname} ws[s]://host[:port]/uri
|
12
16
|
EOT
|
13
17
|
exit 1
|
14
18
|
end
|
data/lib/em/wssh/connect.rb
CHANGED
@@ -4,6 +4,8 @@ module EventMachine::Wssh
|
|
4
4
|
module Connect
|
5
5
|
extend Service
|
6
6
|
|
7
|
+
Title='HTTP Connect proxy to WSSH server'
|
8
|
+
|
7
9
|
Need=%w(faye/websocket)
|
8
10
|
|
9
11
|
@options={
|
@@ -16,10 +18,11 @@ module Connect
|
|
16
18
|
}
|
17
19
|
|
18
20
|
def self.help
|
21
|
+
require_relative 'exe'
|
19
22
|
puts <<-EOF
|
20
23
|
Simple HTTP CONNECT proxy to WSSH daemon
|
21
24
|
|
22
|
-
Usage:
|
25
|
+
Usage: #{Exe.biname} [options...] ws[s]://host[:port]/uri
|
23
26
|
EOF
|
24
27
|
helptions
|
25
28
|
end
|
@@ -157,7 +160,8 @@ Usage: ruby #{File.basename __FILE__} [options...] ws[s]://host[:port]/uri
|
|
157
160
|
end
|
158
161
|
|
159
162
|
def self.listen!
|
160
|
-
EM.start_server options[:host], options[:port], Http
|
163
|
+
conn=EM.start_server options[:host], options[:port], Http
|
164
|
+
options[:onport].call Socket.unpack_sockaddr_in(EM.get_sockname conn)[0] if options[:onport]
|
161
165
|
end
|
162
166
|
end
|
163
167
|
end
|
data/lib/em/wssh/exe.rb
CHANGED
@@ -2,18 +2,35 @@ require_relative '../wssh'
|
|
2
2
|
|
3
3
|
module EventMachine::Wssh
|
4
4
|
module Exe
|
5
|
-
def self.
|
6
|
-
|
7
|
-
help unless /\A\w+\Z/.match cmd
|
5
|
+
def self.command? cmd
|
6
|
+
return unless /\A\w+\Z/.match cmd
|
8
7
|
cmd=cmd.downcase
|
9
8
|
begin
|
10
9
|
require_relative cmd
|
11
10
|
rescue LoadError
|
12
|
-
|
11
|
+
return
|
13
12
|
end
|
14
|
-
m=Module.nesting[1].const_get cmd.sub(/^./){|s|s.upcase}
|
15
|
-
|
16
|
-
m
|
13
|
+
m=Module.nesting[1].const_get cmd.sub(/^./){|s|s.upcase} rescue nil
|
14
|
+
return unless Module===m and m.respond_to? :go!
|
15
|
+
m
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.commands
|
19
|
+
m=Module.nesting[1]
|
20
|
+
Hash[
|
21
|
+
m.constants
|
22
|
+
.map{|n|m.const_get n}
|
23
|
+
.grep(Module)
|
24
|
+
.select{|m| m.respond_to? :go!}
|
25
|
+
.map{|m| [m.name.split(/\W+/).last.downcase, m]}
|
26
|
+
.sort_by{|x| x[0]}
|
27
|
+
]
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.do!
|
31
|
+
mod = command? ARGV.shift
|
32
|
+
help unless mod
|
33
|
+
mod.go!
|
17
34
|
end
|
18
35
|
|
19
36
|
def self.help
|
@@ -21,5 +38,9 @@ module Exe
|
|
21
38
|
Help.go!
|
22
39
|
exit
|
23
40
|
end
|
41
|
+
|
42
|
+
def self.biname
|
43
|
+
"wssh "+File.basename(caller_locations.first.path).sub(/[.][^.]*\Z/, '')
|
44
|
+
end
|
24
45
|
end
|
25
46
|
end
|
data/lib/em/wssh/help.rb
CHANGED
@@ -1,19 +1,45 @@
|
|
1
|
-
require_relative '
|
1
|
+
require_relative 'exe'
|
2
2
|
|
3
3
|
module EventMachine::Wssh
|
4
4
|
module Help
|
5
|
+
|
6
|
+
Title='Show this help'
|
7
|
+
|
5
8
|
def self.go!
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
if mod = Exe.command?(ARGV.shift)
|
10
|
+
command mod
|
11
|
+
else
|
12
|
+
top
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.top
|
17
|
+
require_relative 'all'
|
18
|
+
|
19
|
+
puts <<-EOT
|
20
|
+
WSSH suite v#{VERSION}
|
21
|
+
|
22
|
+
Usage: wssh command [parameters...]
|
23
|
+
|
24
|
+
Available commands:
|
25
|
+
|
26
|
+
EOT
|
27
|
+
Exe.commands.each{|cmd, mod| puts " wssh #{cmd}\t#{mod::Title rescue nil}"}
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.command mod
|
31
|
+
if mod.respond_to? :help
|
32
|
+
mod.help
|
33
|
+
else
|
34
|
+
puts mod::Title
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.help
|
13
39
|
puts <<-EOT
|
14
|
-
WSSH
|
40
|
+
Shows help for WSSH suite or individual commands
|
15
41
|
|
16
|
-
|
42
|
+
Usage: #{Exe.biname} [command]
|
17
43
|
EOT
|
18
44
|
end
|
19
45
|
end
|
data/lib/em/wssh/server.rb
CHANGED
@@ -4,6 +4,8 @@ module EventMachine::Wssh
|
|
4
4
|
module Server
|
5
5
|
extend Service
|
6
6
|
|
7
|
+
Title='WSSH daemon redirects Websocket to sshd'
|
8
|
+
|
7
9
|
Need=%w(yaml em-websocket)
|
8
10
|
|
9
11
|
@options={
|
@@ -16,10 +18,11 @@ module Server
|
|
16
18
|
}
|
17
19
|
|
18
20
|
def self.help
|
21
|
+
require_relative 'exe'
|
19
22
|
puts <<-EOF
|
20
23
|
Proxy ssh connection through websocket
|
21
24
|
|
22
|
-
Usage:
|
25
|
+
Usage: #{Exe.biname} [options...]
|
23
26
|
EOF
|
24
27
|
helptions
|
25
28
|
end
|
@@ -68,8 +71,7 @@ EOF
|
|
68
71
|
|
69
72
|
@count=self.class.count
|
70
73
|
|
71
|
-
|
72
|
-
log "Connect from", ip
|
74
|
+
log "Connect from", Socket.unpack_sockaddr_in(ws.get_peername)[1]
|
73
75
|
|
74
76
|
ws.onopen{|handshake| onopen handshake}
|
75
77
|
ws.onbinary{|msg| ondata msg}
|
data/lib/em/wssh/service.rb
CHANGED
data/lib/em/wssh.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: em-wssh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stas Ukolov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: em-websocket
|
@@ -91,8 +91,9 @@ files:
|
|
91
91
|
- lib/em/wssh/help.rb
|
92
92
|
- lib/em/wssh/server.rb
|
93
93
|
- lib/em/wssh/service.rb
|
94
|
+
- lib/em/wssh/version.rb
|
94
95
|
- nginx/ssh
|
95
|
-
homepage:
|
96
|
+
homepage: https://github.com/ukoloff/em-wssh
|
96
97
|
licenses:
|
97
98
|
- MIT
|
98
99
|
metadata: {}
|