emptyd 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -10
- data/bin/emptyd +51 -5
- data/lib/emptyd/version.rb +1 -1
- data/lib/emptyd.rb +3 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a6c2238de6a8ddfad2f05d18c568fc1d333c458
|
4
|
+
data.tar.gz: 521686c0e7a3c8242870ec331d86eab857bcb62d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 966fdfbe3f9ed0e4e6a3b2628d15c2ef7c6556620f9fa66bebf5d686d3e25b12a30d41f63e5601d4da916473b6ab87980e46edb68094941800fe80d83b9f4fcf
|
7
|
+
data.tar.gz: eb6db97c46fdcce7be4b09ebda7fdfa03fd05d26a979391382213c2fb975bf836f053e02b9bbce2d7adf97e539d73aec0038e165753cf9a8853a2f9670a3356b
|
data/README.md
CHANGED
@@ -1,20 +1,17 @@
|
|
1
1
|
# Emptyd
|
2
2
|
|
3
|
-
|
3
|
+
Server counterpart of [emptyc](https://github.com/kmeaw/emptyc), which
|
4
|
+
keeps track of SSH connections, pushes I/O over the wire, providing
|
5
|
+
an HTTP-interface for emptyc.
|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
7
|
-
|
9
|
+
$ sudo gem install emptyd
|
8
10
|
|
9
|
-
|
11
|
+
For Mac OS X Mavericks users: if you have problems compiling native
|
12
|
+
extensions for eventmachine-le, try setting up ARCHFLAGS:
|
10
13
|
|
11
|
-
|
12
|
-
|
13
|
-
$ bundle
|
14
|
-
|
15
|
-
Or install it yourself as:
|
16
|
-
|
17
|
-
$ gem install emptyd
|
14
|
+
$ sudo env ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future gem install emptyd
|
18
15
|
|
19
16
|
## Usage
|
20
17
|
|
data/bin/emptyd
CHANGED
@@ -9,12 +9,14 @@ end
|
|
9
9
|
|
10
10
|
require "emptyd"
|
11
11
|
require 'evma_httpserver'
|
12
|
+
require 'getoptlong'
|
12
13
|
|
13
14
|
class MyHttpServer < EM::Connection
|
14
15
|
include EM::HttpServer
|
15
16
|
|
16
|
-
def initialize(
|
17
|
-
@logger = logger
|
17
|
+
def initialize(options)
|
18
|
+
@logger = options[:logger]
|
19
|
+
@cookie = options[:cookie]
|
18
20
|
end
|
19
21
|
|
20
22
|
def post_init
|
@@ -27,11 +29,21 @@ class MyHttpServer < EM::Connection
|
|
27
29
|
port, ip = Socket.unpack_sockaddr_in(get_peername)
|
28
30
|
@logger.info "#{ip}:#{port} #{@http_request_method} #{@http_path_info} #{@http_post_content.inspect}"
|
29
31
|
|
32
|
+
headers = Hash[@http_headers.split("\x00").map{|x| x.split(":",2)}.map{|x,y| [x.strip.downcase,y.lstrip]}]
|
33
|
+
|
30
34
|
response = EM::DelegatedHttpResponse.new(self)
|
31
35
|
response.status = 200
|
32
36
|
response.content_type 'application/json'
|
33
37
|
response.content = JSON.dump({ :okay => true })
|
34
38
|
|
39
|
+
if @cookie and headers['authorization'] != "Cookie: #{@cookie}"
|
40
|
+
@logger.warn "Bad cookie: #{headers['authorization']}"
|
41
|
+
response.status = 403
|
42
|
+
response.content = JSON.dump({ :cookie => :bad })
|
43
|
+
response.send_response
|
44
|
+
return
|
45
|
+
end
|
46
|
+
|
35
47
|
begin
|
36
48
|
case @http_path_info
|
37
49
|
when %r{/ping}
|
@@ -102,10 +114,44 @@ end
|
|
102
114
|
# XXX: We need a shared environment for Session and Connection
|
103
115
|
$PASSWORD = CONFIG[:password]
|
104
116
|
|
117
|
+
opts = GetoptLong.new(
|
118
|
+
[ '--help', '-h', GetoptLong::NO_ARGUMENT ],
|
119
|
+
[ '--cookie', '-C', GetoptLong::REQUIRED_ARGUMENT ],
|
120
|
+
)
|
121
|
+
|
122
|
+
logger = Logger.new(STDOUT)
|
123
|
+
options = { :logger => logger }
|
124
|
+
options[:cookie] = CONFIG[:cookie]
|
125
|
+
options[:port] = CONFIG[:port]
|
126
|
+
|
127
|
+
opts.each do |opt, arg|
|
128
|
+
case opt
|
129
|
+
when '--help'
|
130
|
+
print <<-EOF
|
131
|
+
#{$0} [OPTION]
|
132
|
+
|
133
|
+
-h, --help:
|
134
|
+
show help
|
135
|
+
|
136
|
+
-C x, --cookie x:
|
137
|
+
protect server with a cookie value
|
138
|
+
|
139
|
+
-p x, --port x:
|
140
|
+
set port number
|
141
|
+
|
142
|
+
EOF
|
143
|
+
exit
|
144
|
+
when '--cookie'
|
145
|
+
options[:cookie] = arg
|
146
|
+
when '--port'
|
147
|
+
options[:port] = arg.to_i
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
105
151
|
EM.run do
|
106
152
|
$0 = "emptyd"
|
107
|
-
|
108
|
-
EM.start_server CONFIG[:server],
|
109
|
-
logger.info "Server started on #{CONFIG[:server]}, port #{
|
153
|
+
|
154
|
+
EM.start_server CONFIG[:server], options[:port], MyHttpServer, options
|
155
|
+
logger.info "Server started on #{CONFIG[:server]}, port #{options[:port]}."
|
110
156
|
end
|
111
157
|
|
data/lib/emptyd/version.rb
CHANGED
data/lib/emptyd.rb
CHANGED
@@ -371,15 +371,14 @@ module Emptyd
|
|
371
371
|
end
|
372
372
|
|
373
373
|
def terminate key
|
374
|
-
|
375
|
-
|
374
|
+
return if @terminated[key]
|
375
|
+
chan = @running.delete key
|
376
|
+
conn = @connections.delete key
|
376
377
|
chan.close if chan.respond_to? :close
|
377
378
|
if conn
|
378
379
|
callback conn, :close, "user"
|
379
380
|
conn.unbind self
|
380
381
|
end
|
381
|
-
@running.delete key
|
382
|
-
@connections.delete key
|
383
382
|
@terminated[key] = true
|
384
383
|
end
|
385
384
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: emptyd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kmeaw
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-04-
|
11
|
+
date: 2014-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|