txgh-server 2.3.0 → 2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 359b3bb8990904063bb4b3f9bbdc8602311ff53f
4
- data.tar.gz: d4b6f7e1429cadac6cdf8aada177b54de89fc69c
3
+ metadata.gz: f70d20e0073d7671f6010e1dfd962c7e4758482d
4
+ data.tar.gz: 9d1167e2d2b25fdbde79051bc93c32535d3fec04
5
5
  SHA512:
6
- metadata.gz: 8c793ad9b43034ce152d910bbb6dff0f160d6e30c8df666c4cd93d66461efb4490421832b2799d392288a16566e57af77f201634048a58047465946618dc8989
7
- data.tar.gz: 25dc3a1ae9b51abb31d0603948c4b8d1ef2a676f545cee664faf84f97f8936877210319c58a6fcffdd677604c39c2979c46d5af81486050f9458652d8f37a411
6
+ metadata.gz: b3a6abf97a38ed2e92d887ff03e38b5c4327f89816d3c8e87a99ec8f0300326262568f9c5755d08f4451b54fbafe652110dd7685b4c36c4464ffd8c8aa658920
7
+ data.tar.gz: 25147bc9bd2612a674869236fd13eb78b74aacb58edaf6e5bae058cfa6a97d789d314f21bb62c86ca5fb0840a3ec401153596e4e812058c76918b1cec9d567d5
@@ -11,7 +11,7 @@ module TxghServer
11
11
  def authentic_request?(request, secret)
12
12
  request.body.rewind
13
13
  expected_signature = header_value(request.body.read, secret)
14
- actual_signature = request.env[RACK_HEADER]
14
+ actual_signature = signature_from(request)
15
15
  actual_signature == expected_signature
16
16
  end
17
17
 
@@ -19,6 +19,10 @@ module TxghServer
19
19
  digest(transform(content), secret)
20
20
  end
21
21
 
22
+ def signature_from(request)
23
+ request.env[RACK_HEADER]
24
+ end
25
+
22
26
  private
23
27
 
24
28
  # In order to generate a correct HMAC hash, the request body must be
@@ -1,3 +1,3 @@
1
1
  module TxghServer
2
- VERSION = '2.3.0'
2
+ VERSION = '2.4.0'
3
3
  end
@@ -20,6 +20,8 @@ module TxghServer
20
20
  end
21
21
 
22
22
  def handle_request
23
+ publish_event
24
+
23
25
  handle_safely do
24
26
  handler = TxghServer::Webhooks::Transifex::HookHandler.new(
25
27
  project: config.transifex_project,
@@ -35,6 +37,16 @@ module TxghServer
35
37
 
36
38
  private
37
39
 
40
+ def publish_event
41
+ Txgh.events.publish(
42
+ 'transifex.webhook_received', {
43
+ payload: payload,
44
+ raw_payload: raw_payload,
45
+ signature: TransifexRequestAuth.signature_from(request)
46
+ }
47
+ )
48
+ end
49
+
38
50
  def handle_safely
39
51
  if authentic_request?
40
52
  yield
@@ -63,12 +75,17 @@ module TxghServer
63
75
  @config ||= Txgh::Config::KeyManager.config_from_project(payload[:project])
64
76
  end
65
77
 
66
- def payload
67
- @payload ||= begin
78
+ def raw_payload
79
+ @raw_payload ||= begin
68
80
  request.body.rewind
81
+ request.body.read
82
+ end
83
+ end
69
84
 
85
+ def payload
86
+ @payload ||= begin
70
87
  Txgh::Utils.deep_symbolize_keys(
71
- Hash[URI.decode_www_form(request.body.read)]
88
+ Hash[URI.decode_www_form(raw_payload)]
72
89
  )
73
90
  end
74
91
  end
@@ -10,11 +10,24 @@ describe Transifex::RequestHandler do
10
10
 
11
11
  let(:logger) { NilLogger.new }
12
12
  let(:body) { URI.encode_www_form(payload.to_a) }
13
- let(:request) { TestRequest.new(body: body) }
13
+ let(:signature) { 'abc123' }
14
+ let(:headers) { { TxghServer::TransifexRequestAuth::RACK_HEADER => signature } }
15
+ let(:request) { TestRequest.new(body: body, headers: headers) }
14
16
  let(:handler) { described_class.new(request, logger) }
15
17
  let(:payload) { { 'project' => project_name, 'resource' => resource_slug, 'language' => 'pt' } }
16
18
 
17
19
  describe '#handle_request' do
20
+ it 'publishes an event' do
21
+ expect { handler.handle_request }.to(
22
+ change { Txgh.events.published_in('transifex.webhook_received').size }.by(1)
23
+ )
24
+
25
+ event = Txgh.events.published_in('transifex.webhook_received').first
26
+ expect(event[:options][:payload]).to eq(Txgh::Utils.deep_symbolize_keys(payload))
27
+ expect(event[:options][:raw_payload]).to eq(body)
28
+ expect(event[:options][:signature]).to eq(signature)
29
+ end
30
+
18
31
  it 'does not execute if unauthorized' do
19
32
  expect_any_instance_of(Transifex::HookHandler).to_not receive(:execute)
20
33
  response = handler.handle_request
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: txgh-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Jackowski
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-11-21 00:00:00.000000000 Z
12
+ date: 2017-11-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mime-types
@@ -172,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
172
172
  version: '0'
173
173
  requirements: []
174
174
  rubyforge_project:
175
- rubygems_version: 2.5.1
175
+ rubygems_version: 2.6.13
176
176
  signing_key:
177
177
  specification_version: 4
178
178
  summary: An HTTP server for interacting with txgh.