activehook 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f3a59808084220469fb34637c67bf5e9f262e631
4
- data.tar.gz: 791adea3103be50f0b47ae4a1bcc85456271279b
3
+ metadata.gz: a9bdd9c58667318f072b3bb500d48e3595927593
4
+ data.tar.gz: f715fdbb3226983ab489aa310166c58b8e922481
5
5
  SHA512:
6
- metadata.gz: 40f0470b5c5239cc3f7ea56cb20c458239d72ada5180327ac45356ab32357ee0770d66a8c23691619ba4d2eeca3dff0df0e133154384803ed90189b0f450a2a9
7
- data.tar.gz: e9cd328d156e39b4d9478fb3aa8740d5999404629ac0adae3a8c0c67b8e55071168a98ba8c7c843b6e46a34b8c9d47ac95b5d0e1dae3b920f831e605342c1524
6
+ metadata.gz: dfa8fe137d40397d8f25ea78d86a48b9041fb24374aec759112efdc48eae8b27e4fccc459efca48c9b27db9a3b4767e8de28aa345e398beae4b58ba437cc2393
7
+ data.tar.gz: 31772720c13d69ad9a4bb9445283eecab98af8294d1c487e8d74fdf31b757975a5ba80788c552b590dce004beb7ceff7d23f50de7ca7471de84a34dc066d5284
data/README.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # ActiveHook
2
2
  ---
3
3
 
4
- Fast and simple webhook microservice for Ruby. **Please consider it under development at the moment.**
4
+ Fast and simple webhook delivery microservice for Ruby. **Please consider it under development at the moment.**
5
5
 
6
6
  ActiveHook provides a scalable solution to your applications webhook sending needs. Its Redis-backed, with support for forking and threading - letting it send an enormous amount of webhooks in short order. Basically a much more focused version of a job processor such as Sidekiq, DelayedJob, Resque, etc. It includes the following:
7
7
 
8
- - A server for the purpose of sending webhooks.
9
- - A mixin module for the purpose of recieving and validating webhooks.
8
+ - A server for the purpose of sending webhooks. With support for retry attempts.
9
+ - A client-side mixin module for the purpose of recieving and validating webhooks.
10
10
  - A piece of Rack middleware for the purpose of performing validation.
11
11
 
12
12
  ## Installation
@@ -155,13 +155,19 @@ end
155
155
 
156
156
  Sending webhooks is one thing - ensuring they are from who we want is another.
157
157
 
158
- ActiveHook includes a piece of Rack middleware for the purpose of validation. When a client attempts to validate a webhook, they are sending a message back to your server. The message includes the hooks ID as well as key. These are are then cross-referenced. If they match, we provide the AOK.
158
+ ActiveHook includes a piece of Rack middleware for the purpose of validation. When a client attempts to validate a webhook, they are sending a message back to your server. The message includes the hooks ID as well as key. These are are then cross-referenced with the server records. If they match, we provide the AOK.
159
+
160
+ We set the address that the middleware uses from our config file (App mode config described above):
161
+
162
+ ```ruby
163
+ config.validation_path = '/hooks/validate'
164
+ ```
159
165
 
160
166
  In Rails, we would add the middleware like this:
161
167
 
162
168
  ```ruby
163
169
  # In config/application.rb
164
- config.middleware.use ActiveHook::App::Middleware
170
+ config.middleware.use('ActiveHook::App::Middleware')
165
171
  ```
166
172
 
167
173
  Or with Rackup files:
@@ -1,15 +1,6 @@
1
1
  module ActiveHook
2
2
  module App
3
3
  class Middleware
4
- class << self
5
- attr_accessor :valid, :invalid, :not_created, :created
6
- end
7
-
8
- @invalid = ->(_env) { [400, { "Content-Type" => "application/json" }, [{ valid: false }.to_json]] }
9
- @valid = ->(_env) { [200, { "Content-Type" => "application/json" }, [{ valid: true }.to_json]] }
10
- @not_created = ->(_env) { [400, { "Content-Type" => "application/json" }, [{ status: false }.to_json]] }
11
- @created = ->(_env) { [200, { "Content-Type" => "application/json" }, [{ status: true }.to_json]] }
12
-
13
4
  def initialize(app)
14
5
  @app = app
15
6
  end
@@ -18,8 +9,9 @@ module ActiveHook
18
9
  @env = env
19
10
  @req = Rack::Request.new(env)
20
11
 
21
- if validation_request? then valid?
22
- elsif creation_request? then create?
12
+ if validation_request? then response(Validation)
13
+ #Not enabling webhook creation yet.
14
+ #elsif creation_request? then response(Creation)
23
15
  else @app.call(@env)
24
16
  end
25
17
  end
@@ -32,35 +24,27 @@ module ActiveHook
32
24
  @req.path == ActiveHook.config.creation_path && @req.post?
33
25
  end
34
26
 
35
- def valid?
36
- if Validation.new(@req.params).start
37
- self.class.valid.call(@env)
38
- else
39
- self.class.invalid.call(@env)
40
- end
41
- end
42
-
43
- def create?
44
- if Creation.new(@req.params).start
45
- self.class.created.call(@env)
46
- else
47
- self.class.not_created.call(@env)
48
- end
27
+ def response(klass)
28
+ response =
29
+ if klass.new(@req).start then { code: 200, status: true }
30
+ else { code: 400, status: false }
31
+ end
32
+ [response[:code], { "Content-Type" => "application/json" }, [{ status: response[:status] }.to_json]]
49
33
  end
50
34
  end
51
35
 
52
- Validation = Struct.new(:params) do
36
+ Validation = Struct.new(:req) do
53
37
  def start
54
- hook = { id: params['id'].to_i, key: params['key'] }
38
+ hook = { id: req.params['id'].to_i, key: req.params['key'] }
55
39
  ActiveHook::Validate.new(hook).perform
56
40
  rescue
57
41
  false
58
42
  end
59
43
  end
60
44
 
61
- Creation = Struct.new(:params) do
45
+ Creation = Struct.new(:req) do
62
46
  def start
63
- hook = { uri: params['uri'], payload: JSON.parse(params['payload']) }
47
+ hook = JSON.parse(req.body.read)
64
48
  ActiveHook::Hook.new(hook).perform
65
49
  rescue
66
50
  false
@@ -1,4 +1,4 @@
1
1
  module ActiveHook
2
- VERSION = '0.1.3'
2
+ VERSION = '0.1.4'
3
3
  CODENAME = 'Fat Sparrow'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activehook
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicholas Sweeting
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-23 00:00:00.000000000 Z
11
+ date: 2016-06-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis