phlegethon 0.0.1 → 0.0.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.
- data/README.md +11 -8
- data/lib/phlegethon/exec.rb +56 -10
- data/lib/phlegethon/version.rb +1 -1
- data/phlegethon.yml +6 -0
- metadata +5 -4
data/README.md
CHANGED
@@ -8,10 +8,8 @@
|
|
8
8
|
Welcome to phlegethon
|
9
9
|
=====================
|
10
10
|
|
11
|
-
Phlegethon is
|
12
|
-
[
|
13
|
-
which forwards all requests to
|
14
|
-
[RabbitMQ](https://www.rabbitmq.com/).
|
11
|
+
Phlegethon is a generic endpoint for Webhooks which forwards all
|
12
|
+
requests to [RabbitMQ](https://www.rabbitmq.com/).
|
15
13
|
|
16
14
|
## Installation
|
17
15
|
|
@@ -43,15 +41,20 @@ It will look for a config file in the following places
|
|
43
41
|
A phlegethon config file may look like this; these are the defaults
|
44
42
|
|
45
43
|
rabbitmq:
|
46
|
-
|
44
|
+
exchange: webhooks
|
47
45
|
host: localhost
|
48
46
|
server:
|
49
|
-
port:
|
50
|
-
ssl:
|
47
|
+
port: 3002
|
48
|
+
ssl: false
|
49
|
+
|
50
|
+
|
51
|
+
With the above config you can test you endpoint with curl
|
52
|
+
|
53
|
+
curl -d '{"hey":"ho"}' -H 'Content-type: application/json' http://localhost:3002
|
51
54
|
|
52
55
|
## Prerequisites
|
53
56
|
|
54
|
-
To use phlegethon with https you have to have libssl-dev installed
|
57
|
+
To use phlegethon with https you have to have `libssl-dev` installed
|
55
58
|
before installing eventmachine.
|
56
59
|
|
57
60
|
apt-get install libssl-dev
|
data/lib/phlegethon/exec.rb
CHANGED
@@ -4,11 +4,22 @@ require 'json'
|
|
4
4
|
require 'thin'
|
5
5
|
require 'bunny'
|
6
6
|
|
7
|
+
require 'pp'
|
8
|
+
|
7
9
|
module Phlegethon
|
8
10
|
module Exec
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
+
DEFAULTS = {
|
13
|
+
'rabbitmq' => {
|
14
|
+
'exchange' => 'webhooks',
|
15
|
+
'host' => 'localhost'
|
16
|
+
},
|
17
|
+
'server' => {
|
18
|
+
'ip' => '0.0.0.0',
|
19
|
+
'port' => 3002,
|
20
|
+
'ssl' => false
|
21
|
+
}
|
22
|
+
}
|
12
23
|
|
13
24
|
extend self
|
14
25
|
|
@@ -16,18 +27,33 @@ module Phlegethon
|
|
16
27
|
|
17
28
|
def run(args)
|
18
29
|
init_bunny
|
19
|
-
|
20
|
-
|
30
|
+
server = Thin::Server.new(config['server']['ip'],
|
31
|
+
config['server']['port'],
|
32
|
+
handler)
|
21
33
|
server.start
|
22
34
|
end
|
23
35
|
|
24
36
|
def handler
|
25
37
|
->(env) {
|
26
|
-
|
27
|
-
|
28
|
-
|
38
|
+
pp env
|
39
|
+
req = Rack::Request.new(env)
|
40
|
+
|
41
|
+
# perform some business logic on posted data
|
42
|
+
message = deep_encode({
|
43
|
+
'params' => req.params,
|
44
|
+
'method' => req.request_method,
|
45
|
+
'url' => req.url,
|
46
|
+
'user_agent' => req.user_agent
|
47
|
+
})
|
48
|
+
case req.content_type
|
49
|
+
when 'application/json'
|
50
|
+
message['payload'] = JSON.parse(req.body.read)
|
51
|
+
else
|
52
|
+
message = deep_encode(env)
|
53
|
+
end
|
54
|
+
exchange.publish(JSON.unparse(message))
|
29
55
|
# TODO make debug response configurable
|
30
|
-
[200, {'Content-Type' => 'text/plain'},
|
56
|
+
[200, {'Content-Type' => 'text/plain'}, message.to_yaml]
|
31
57
|
}
|
32
58
|
end
|
33
59
|
|
@@ -37,11 +63,11 @@ module Phlegethon
|
|
37
63
|
bunny = Bunny.new read_timeout: 10, heartbeat: 10
|
38
64
|
bunny.start
|
39
65
|
bunny_channel = bunny.create_channel
|
40
|
-
self.exchange = bunny_channel.fanout(
|
66
|
+
self.exchange = bunny_channel.fanout(config['rabbitmq']['exchange'])
|
41
67
|
end
|
42
68
|
|
43
69
|
# TODO move to gem trickery
|
44
|
-
def deep_encode(data, enc)
|
70
|
+
def deep_encode(data, enc='UTF-8')
|
45
71
|
case data
|
46
72
|
when String
|
47
73
|
data.encode(enc)
|
@@ -55,5 +81,25 @@ module Phlegethon
|
|
55
81
|
end
|
56
82
|
end
|
57
83
|
|
84
|
+
def config
|
85
|
+
@config ||= DEFAULTS.merge(YAML.load(File.read(config_path)))
|
86
|
+
end
|
87
|
+
|
88
|
+
def config_path
|
89
|
+
config_path_candidates.each do |f|
|
90
|
+
if File.exist?(f)
|
91
|
+
puts "Reading config from #{f}"
|
92
|
+
return f
|
93
|
+
end
|
94
|
+
end
|
95
|
+
warn 'config file not found'
|
96
|
+
exit
|
97
|
+
end
|
98
|
+
|
99
|
+
def config_path_candidates
|
100
|
+
[ './phlegethon.yml',
|
101
|
+
ENV['HOME'] + '/.phlegethon.yml' ]
|
102
|
+
end
|
103
|
+
|
58
104
|
end
|
59
105
|
end
|
data/lib/phlegethon/version.rb
CHANGED
data/phlegethon.yml
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phlegethon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-10-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -94,6 +94,7 @@ files:
|
|
94
94
|
- lib/phlegethon/exec.rb
|
95
95
|
- lib/phlegethon/version.rb
|
96
96
|
- phlegethon.gemspec
|
97
|
+
- phlegethon.yml
|
97
98
|
homepage: http://github.com/branch14/phlegethon
|
98
99
|
licenses:
|
99
100
|
- MIT
|
@@ -109,7 +110,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
109
110
|
version: '0'
|
110
111
|
segments:
|
111
112
|
- 0
|
112
|
-
hash: -
|
113
|
+
hash: -278817303022163784
|
113
114
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
115
|
none: false
|
115
116
|
requirements:
|
@@ -118,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
119
|
version: '0'
|
119
120
|
segments:
|
120
121
|
- 0
|
121
|
-
hash: -
|
122
|
+
hash: -278817303022163784
|
122
123
|
requirements: []
|
123
124
|
rubyforge_project:
|
124
125
|
rubygems_version: 1.8.23
|