txgh 5.3.4 → 5.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.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/lib/txgh/resource_deleter.rb +50 -0
  3. data/lib/txgh/version.rb +1 -1
  4. data/lib/txgh.rb +1 -6
  5. data/spec/resource_deleter_spec.rb +48 -0
  6. data/spec/spec_helper.rb +0 -8
  7. data/txgh.gemspec +1 -5
  8. metadata +6 -113
  9. data/lib/ext/zipline/output_stream.rb +0 -62
  10. data/lib/txgh/app.rb +0 -140
  11. data/lib/txgh/github_request_auth.rb +0 -28
  12. data/lib/txgh/handlers/download_handler.rb +0 -87
  13. data/lib/txgh/handlers/github/delete_handler.rb +0 -65
  14. data/lib/txgh/handlers/github/handler.rb +0 -20
  15. data/lib/txgh/handlers/github/ping_handler.rb +0 -18
  16. data/lib/txgh/handlers/github/push_handler.rb +0 -124
  17. data/lib/txgh/handlers/github/request_handler.rb +0 -113
  18. data/lib/txgh/handlers/github.rb +0 -11
  19. data/lib/txgh/handlers/response.rb +0 -17
  20. data/lib/txgh/handlers/stream_response.rb +0 -39
  21. data/lib/txgh/handlers/tgz_stream_response.rb +0 -41
  22. data/lib/txgh/handlers/transifex/hook_handler.rb +0 -94
  23. data/lib/txgh/handlers/transifex/request_handler.rb +0 -78
  24. data/lib/txgh/handlers/transifex.rb +0 -8
  25. data/lib/txgh/handlers/triggers/handler.rb +0 -52
  26. data/lib/txgh/handlers/triggers/pull_handler.rb +0 -20
  27. data/lib/txgh/handlers/triggers/push_handler.rb +0 -20
  28. data/lib/txgh/handlers/triggers.rb +0 -9
  29. data/lib/txgh/handlers/zip_stream_response.rb +0 -21
  30. data/lib/txgh/handlers.rb +0 -12
  31. data/lib/txgh/transifex_request_auth.rb +0 -53
  32. data/spec/app_spec.rb +0 -347
  33. data/spec/github_request_auth_spec.rb +0 -39
  34. data/spec/handlers/download_handler_spec.rb +0 -91
  35. data/spec/handlers/github/delete_handler_spec.rb +0 -71
  36. data/spec/handlers/github/ping_handler_spec.rb +0 -16
  37. data/spec/handlers/github/push_handler_spec.rb +0 -106
  38. data/spec/handlers/tgz_stream_response_spec.rb +0 -59
  39. data/spec/handlers/transifex/hook_handler_spec.rb +0 -136
  40. data/spec/handlers/zip_stream_response_spec.rb +0 -58
  41. data/spec/helpers/github_payload_builder.rb +0 -141
  42. data/spec/helpers/integration_setup.rb +0 -47
  43. data/spec/integration/cassettes/github_l10n_hook_endpoint.yml +0 -536
  44. data/spec/integration/cassettes/pull.yml +0 -47
  45. data/spec/integration/cassettes/push.yml +0 -544
  46. data/spec/integration/cassettes/transifex_hook_endpoint.yml +0 -221
  47. data/spec/integration/config/tx.config +0 -10
  48. data/spec/integration/hooks_spec.rb +0 -159
  49. data/spec/integration/payloads/github_postbody.json +0 -161
  50. data/spec/integration/payloads/github_postbody_l10n.json +0 -136
  51. data/spec/integration/payloads/github_postbody_release.json +0 -136
  52. data/spec/integration/triggers_spec.rb +0 -45
  53. data/spec/transifex_request_auth_spec.rb +0 -39
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9913740e9d673d5e128e9347ab27f2402e605ad1
4
- data.tar.gz: 8dc303dd112a95c897131e974d61d74cd45725f0
3
+ metadata.gz: eb6e3463432f659922924f0e8772d52ff629d56e
4
+ data.tar.gz: b2ae04fce6e467c3e288f4719fa6b21428e21458
5
5
  SHA512:
6
- metadata.gz: 84eb6e77456cf413c8da184260d10534497701b7869567ba0b275ce1faa3d1e2b93fd3be7ecbd57e8e6e4fda2a99351568ec7efe2ebf6f668a584eaca2e787b8
7
- data.tar.gz: 73f36c4560a70a016d416570b417782d066c410ce813caa5f1fa971ae3a4af3d67c111440ef37bc188afb1af2bd7a5968ad3569f4f29bbdcc4b29f0f6ecc8df5
6
+ metadata.gz: ea6b213e8f7b13a610324114f192542f22ab018697373b12d5299d590f680c6cf25da29fe699a21ae8d4c391980c04ecbe89c6e97bfb615ecbaffa95a74fce4b
7
+ data.tar.gz: 00e05c87d887ce50b9fd26f252950bc7acde5511e73b29065f09197838e4d74468feebd9d2568e98771b4890df652b32543c17c49887cd6c283c3cbbd47616d7
@@ -0,0 +1,50 @@
1
+ module Txgh
2
+ class ResourceDeleter
3
+ include Txgh::CategorySupport
4
+
5
+ attr_reader :project, :repo, :branch
6
+
7
+ def initialize(project, repo, branch, options = {})
8
+ @project = project
9
+ @repo = repo
10
+ @branch = branch
11
+ end
12
+
13
+ def delete_resources
14
+ tx_resources.each do |tx_resource|
15
+ project.api.delete_resource(tx_resource)
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def tx_resources
22
+ project.api.get_resources(project.name).map do |resource_hash|
23
+ categories = deserialize_categories(resource_hash['categories'])
24
+ resource_branch = Txgh::Utils.absolute_branch(categories['branch'])
25
+
26
+ if resource_branch == branch
27
+ tx_branch_resource_from(resource_hash, branch)
28
+ end
29
+ end.compact
30
+ end
31
+
32
+ def tx_branch_resource_from(resource_hash, branch)
33
+ Txgh::TxBranchResource.new(
34
+ tx_resource_from(resource_hash, branch), branch
35
+ )
36
+ end
37
+
38
+ # project_slug, resource_slug, type, source_lang, source_file, lang_map, translation_file
39
+ def tx_resource_from(resource_hash, branch)
40
+ Txgh::TxResource.new(
41
+ project.name,
42
+ Txgh::TxBranchResource.deslugify(resource_hash['slug'], branch),
43
+ resource_hash['i18n_type'],
44
+ resource_hash['source_language_code'],
45
+ resource_hash['name'],
46
+ '', nil
47
+ )
48
+ end
49
+ end
50
+ end
data/lib/txgh/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Txgh
2
- VERSION = '5.3.4'
2
+ VERSION = '5.4.0'
3
3
  end
data/lib/txgh.rb CHANGED
@@ -2,7 +2,6 @@ require 'txgh/errors'
2
2
  require 'yaml'
3
3
 
4
4
  module Txgh
5
- autoload :Application, 'txgh/app'
6
5
  autoload :CategorySupport, 'txgh/category_support'
7
6
  autoload :Config, 'txgh/config'
8
7
  autoload :DiffCalculator, 'txgh/diff_calculator'
@@ -10,23 +9,19 @@ module Txgh
10
9
  autoload :Events, 'txgh/events'
11
10
  autoload :GithubApi, 'txgh/github_api'
12
11
  autoload :GithubRepo, 'txgh/github_repo'
13
- autoload :GithubRequestAuth, 'txgh/github_request_auth'
14
12
  autoload :GithubStatus, 'txgh/github_status'
15
- autoload :Handlers, 'txgh/handlers'
16
- autoload :Hooks, 'txgh/app'
17
13
  autoload :MergeCalculator, 'txgh/merge_calculator'
18
14
  autoload :ParseConfig, 'txgh/parse_config'
19
15
  autoload :Puller, 'txgh/puller'
20
16
  autoload :Pusher, 'txgh/pusher'
21
17
  autoload :ResourceCommitter, 'txgh/resource_committer'
22
18
  autoload :ResourceContents, 'txgh/resource_contents'
19
+ autoload :ResourceDeleter, 'txgh/resource_deleter'
23
20
  autoload :ResourceDownloader, 'txgh/resource_downloader'
24
21
  autoload :ResourceUpdater, 'txgh/resource_updater'
25
22
  autoload :ResponseHelpers, 'txgh/response_helpers'
26
23
  autoload :TransifexApi, 'txgh/transifex_api'
27
24
  autoload :TransifexProject, 'txgh/transifex_project'
28
- autoload :TransifexRequestAuth, 'txgh/transifex_request_auth'
29
- autoload :Triggers, 'txgh/app'
30
25
  autoload :TxBranchResource, 'txgh/tx_branch_resource'
31
26
  autoload :TxLogger, 'txgh/tx_logger'
32
27
  autoload :TxResource, 'txgh/tx_resource'
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+ require 'helpers/standard_txgh_setup'
3
+
4
+ include Txgh
5
+
6
+ describe ResourceDeleter do
7
+ include StandardTxghSetup
8
+
9
+ # process all branches
10
+ let(:branch) { 'heads/master' }
11
+
12
+ let(:deleter) do
13
+ ResourceDeleter.new(transifex_project, github_repo, branch)
14
+ end
15
+
16
+ let(:resource_api_response) do
17
+ [resource.to_api_h.merge('categories' => ["branch:#{branch}"])]
18
+ end
19
+
20
+ let(:resource) { tx_config.resources.first }
21
+
22
+ let(:resource_slug_with_branch) do
23
+ "#{resource_slug}-#{Txgh::Utils.slugify(ref)}"
24
+ end
25
+
26
+ it 'deletes the correct resource from transifex' do
27
+ expect(transifex_api).to(
28
+ receive(:get_resources).and_return(resource_api_response)
29
+ )
30
+
31
+ expect(transifex_api).to receive(:delete_resource) do |tx_resource|
32
+ expect(tx_resource.project_slug).to eq(project_name)
33
+ expect(tx_resource.resource_slug).to eq(resource_slug_with_branch)
34
+ end
35
+
36
+ deleter.delete_resources
37
+ end
38
+
39
+ it "does not delete resources that don't have a matching branch" do
40
+ deleter = ResourceDeleter.new(transifex_project, github_repo, 'heads/fake')
41
+ expect(transifex_api).to(
42
+ receive(:get_resources).and_return(resource_api_response)
43
+ )
44
+
45
+ expect(transifex_api).to_not receive(:delete)
46
+ deleter.delete_resources
47
+ end
48
+ end
data/spec/spec_helper.rb CHANGED
@@ -4,8 +4,6 @@ require 'pry-byebug'
4
4
  require 'rake'
5
5
  require 'rspec'
6
6
  require 'txgh'
7
- require 'vcr'
8
- require 'webmock'
9
7
  require 'yaml'
10
8
 
11
9
  require 'helpers/test_events'
@@ -24,15 +22,9 @@ end
24
22
  RSpec.configure do |config|
25
23
  config.filter_run(focus: true)
26
24
  config.run_all_when_everything_filtered = true
27
- config.filter_run_excluding(integration: true) unless ENV['FULL_SPEC']
28
25
  config.include(SpecHelpers)
29
26
 
30
27
  config.before(:each) do
31
28
  Txgh.instance_variable_set(:@events, TestEvents.new)
32
29
  end
33
30
  end
34
-
35
- VCR.configure do |config|
36
- config.cassette_library_dir = 'spec/integration/cassettes'
37
- config.hook_into :webmock
38
- end
data/txgh.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.email = ['mattjjacko@gmail.com', 'camertron@gmail.com']
9
9
  s.homepage = 'https://github.com/lumoslabs/txgh'
10
10
 
11
- s.description = s.summary = 'A server that automatically syncs translation resources between Github and Transifex.'
11
+ s.description = s.summary = 'A library for syncing translation resources between Github and Transifex.'
12
12
 
13
13
  s.platform = Gem::Platform::RUBY
14
14
  s.has_rdoc = true
@@ -17,12 +17,8 @@ Gem::Specification.new do |s|
17
17
  s.add_dependency 'faraday', '~> 0.9'
18
18
  s.add_dependency 'faraday_middleware', '~> 0.10'
19
19
  s.add_dependency 'json', '~> 1.8'
20
- s.add_dependency 'mime-types', '~> 2.0'
21
20
  s.add_dependency 'octokit', '~> 4.2'
22
21
  s.add_dependency 'parseconfig', '~> 1.0'
23
- s.add_dependency 'sinatra', '~> 1.4'
24
- s.add_dependency 'sinatra-contrib', '~> 1.4'
25
- s.add_dependency 'rubyzip', '>= 1.0', '<= 1.1.2'
26
22
 
27
23
  s.require_path = 'lib'
28
24
  s.files = Dir['{lib,spec}/**/*', 'README.md', 'txgh.gemspec', 'LICENSE']
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: txgh
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.3.4
4
+ version: 5.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-07-20 00:00:00.000000000 Z
12
+ date: 2016-08-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: abroad
@@ -67,20 +67,6 @@ dependencies:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
69
  version: '1.8'
70
- - !ruby/object:Gem::Dependency
71
- name: mime-types
72
- requirement: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - "~>"
75
- - !ruby/object:Gem::Version
76
- version: '2.0'
77
- type: :runtime
78
- prerelease: false
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - "~>"
82
- - !ruby/object:Gem::Version
83
- version: '2.0'
84
70
  - !ruby/object:Gem::Dependency
85
71
  name: octokit
86
72
  requirement: !ruby/object:Gem::Requirement
@@ -109,56 +95,7 @@ dependencies:
109
95
  - - "~>"
110
96
  - !ruby/object:Gem::Version
111
97
  version: '1.0'
112
- - !ruby/object:Gem::Dependency
113
- name: sinatra
114
- requirement: !ruby/object:Gem::Requirement
115
- requirements:
116
- - - "~>"
117
- - !ruby/object:Gem::Version
118
- version: '1.4'
119
- type: :runtime
120
- prerelease: false
121
- version_requirements: !ruby/object:Gem::Requirement
122
- requirements:
123
- - - "~>"
124
- - !ruby/object:Gem::Version
125
- version: '1.4'
126
- - !ruby/object:Gem::Dependency
127
- name: sinatra-contrib
128
- requirement: !ruby/object:Gem::Requirement
129
- requirements:
130
- - - "~>"
131
- - !ruby/object:Gem::Version
132
- version: '1.4'
133
- type: :runtime
134
- prerelease: false
135
- version_requirements: !ruby/object:Gem::Requirement
136
- requirements:
137
- - - "~>"
138
- - !ruby/object:Gem::Version
139
- version: '1.4'
140
- - !ruby/object:Gem::Dependency
141
- name: rubyzip
142
- requirement: !ruby/object:Gem::Requirement
143
- requirements:
144
- - - ">="
145
- - !ruby/object:Gem::Version
146
- version: '1.0'
147
- - - "<="
148
- - !ruby/object:Gem::Version
149
- version: 1.1.2
150
- type: :runtime
151
- prerelease: false
152
- version_requirements: !ruby/object:Gem::Requirement
153
- requirements:
154
- - - ">="
155
- - !ruby/object:Gem::Version
156
- version: '1.0'
157
- - - "<="
158
- - !ruby/object:Gem::Version
159
- version: 1.1.2
160
- description: A server that automatically syncs translation resources between Github
161
- and Transifex.
98
+ description: A library for syncing translation resources between Github and Transifex.
162
99
  email:
163
100
  - mattjjacko@gmail.com
164
101
  - camertron@gmail.com
@@ -168,9 +105,7 @@ extra_rdoc_files: []
168
105
  files:
169
106
  - LICENSE
170
107
  - README.md
171
- - lib/ext/zipline/output_stream.rb
172
108
  - lib/txgh.rb
173
- - lib/txgh/app.rb
174
109
  - lib/txgh/category_support.rb
175
110
  - lib/txgh/config.rb
176
111
  - lib/txgh/config/config_pair.rb
@@ -189,45 +124,24 @@ files:
189
124
  - lib/txgh/events.rb
190
125
  - lib/txgh/github_api.rb
191
126
  - lib/txgh/github_repo.rb
192
- - lib/txgh/github_request_auth.rb
193
127
  - lib/txgh/github_status.rb
194
- - lib/txgh/handlers.rb
195
- - lib/txgh/handlers/download_handler.rb
196
- - lib/txgh/handlers/github.rb
197
- - lib/txgh/handlers/github/delete_handler.rb
198
- - lib/txgh/handlers/github/handler.rb
199
- - lib/txgh/handlers/github/ping_handler.rb
200
- - lib/txgh/handlers/github/push_handler.rb
201
- - lib/txgh/handlers/github/request_handler.rb
202
- - lib/txgh/handlers/response.rb
203
- - lib/txgh/handlers/stream_response.rb
204
- - lib/txgh/handlers/tgz_stream_response.rb
205
- - lib/txgh/handlers/transifex.rb
206
- - lib/txgh/handlers/transifex/hook_handler.rb
207
- - lib/txgh/handlers/transifex/request_handler.rb
208
- - lib/txgh/handlers/triggers.rb
209
- - lib/txgh/handlers/triggers/handler.rb
210
- - lib/txgh/handlers/triggers/pull_handler.rb
211
- - lib/txgh/handlers/triggers/push_handler.rb
212
- - lib/txgh/handlers/zip_stream_response.rb
213
128
  - lib/txgh/merge_calculator.rb
214
129
  - lib/txgh/parse_config.rb
215
130
  - lib/txgh/puller.rb
216
131
  - lib/txgh/pusher.rb
217
132
  - lib/txgh/resource_committer.rb
218
133
  - lib/txgh/resource_contents.rb
134
+ - lib/txgh/resource_deleter.rb
219
135
  - lib/txgh/resource_downloader.rb
220
136
  - lib/txgh/resource_updater.rb
221
137
  - lib/txgh/response_helpers.rb
222
138
  - lib/txgh/transifex_api.rb
223
139
  - lib/txgh/transifex_project.rb
224
- - lib/txgh/transifex_request_auth.rb
225
140
  - lib/txgh/tx_branch_resource.rb
226
141
  - lib/txgh/tx_logger.rb
227
142
  - lib/txgh/tx_resource.rb
228
143
  - lib/txgh/utils.rb
229
144
  - lib/txgh/version.rb
230
- - spec/app_spec.rb
231
145
  - spec/category_support_spec.rb
232
146
  - spec/config/config_pair_spec.rb
233
147
  - spec/config/key_manager_spec.rb
@@ -239,41 +153,21 @@ files:
239
153
  - spec/events_spec.rb
240
154
  - spec/github_api_spec.rb
241
155
  - spec/github_repo_spec.rb
242
- - spec/github_request_auth_spec.rb
243
156
  - spec/github_status_spec.rb
244
- - spec/handlers/download_handler_spec.rb
245
- - spec/handlers/github/delete_handler_spec.rb
246
- - spec/handlers/github/ping_handler_spec.rb
247
- - spec/handlers/github/push_handler_spec.rb
248
- - spec/handlers/tgz_stream_response_spec.rb
249
- - spec/handlers/transifex/hook_handler_spec.rb
250
- - spec/handlers/zip_stream_response_spec.rb
251
- - spec/helpers/github_payload_builder.rb
252
- - spec/helpers/integration_setup.rb
253
157
  - spec/helpers/nil_logger.rb
254
158
  - spec/helpers/standard_txgh_setup.rb
255
159
  - spec/helpers/test_events.rb
256
160
  - spec/helpers/test_provider.rb
257
- - spec/integration/cassettes/github_l10n_hook_endpoint.yml
258
- - spec/integration/cassettes/pull.yml
259
- - spec/integration/cassettes/push.yml
260
- - spec/integration/cassettes/transifex_hook_endpoint.yml
261
- - spec/integration/config/tx.config
262
- - spec/integration/hooks_spec.rb
263
- - spec/integration/payloads/github_postbody.json
264
- - spec/integration/payloads/github_postbody_l10n.json
265
- - spec/integration/payloads/github_postbody_release.json
266
- - spec/integration/triggers_spec.rb
267
161
  - spec/merge_calculator_spec.rb
268
162
  - spec/parse_config_spec.rb
269
163
  - spec/resource_committer_spec.rb
270
164
  - spec/resource_contents_spec.rb
165
+ - spec/resource_deleter_spec.rb
271
166
  - spec/resource_downloader_spec.rb
272
167
  - spec/resource_updater_spec.rb
273
168
  - spec/spec_helper.rb
274
169
  - spec/transifex_api_spec.rb
275
170
  - spec/transifex_project_spec.rb
276
- - spec/transifex_request_auth_spec.rb
277
171
  - spec/tx_branch_resource_spec.rb
278
172
  - spec/tx_resource_spec.rb
279
173
  - spec/txgh_spec.rb
@@ -301,6 +195,5 @@ rubyforge_project:
301
195
  rubygems_version: 2.2.3
302
196
  signing_key:
303
197
  specification_version: 4
304
- summary: A server that automatically syncs translation resources between Github and
305
- Transifex.
198
+ summary: A library for syncing translation resources between Github and Transifex.
306
199
  test_files: []
@@ -1,62 +0,0 @@
1
- # Taken from https://github.com/fringd/zipline
2
- # Didn't include zipline gem b/c it depends directly on rails and brings in a
3
- # ton of useless dependencies
4
-
5
- require 'stringio'
6
- require 'zip'
7
-
8
- # a ZipOutputStream that never rewinds output
9
- # in order for that to be possible we store only uncompressed files
10
- module Zipline
11
- class OutputStream < Zip::OutputStream
12
-
13
- #we need to be able to hand out own custom output in order to stream to browser
14
- def initialize(io)
15
- # Create an io stream thing
16
- super StringIO.new, true
17
- # Overwrite it with my own
18
- @output_stream = io
19
- end
20
-
21
- def stream
22
- @output_stream
23
- end
24
-
25
- def put_next_entry(entry_name, size)
26
- new_entry = Zip::Entry.new(@file_name, entry_name)
27
-
28
- #THIS IS THE MAGIC, tells zip to look after data for size, crc
29
- new_entry.gp_flags = new_entry.gp_flags | 0x0008
30
-
31
- super(new_entry)
32
-
33
- # Uncompressed size in the local file header must be zero when bit 3
34
- # of the general purpose flags is set, so set the size after the header
35
- # has been written.
36
- new_entry.size = size
37
- end
38
-
39
- # just reset state, no rewinding required
40
- def finalize_current_entry
41
- if current_entry
42
- entry = current_entry
43
- super
44
- write_local_footer(entry)
45
- end
46
- end
47
-
48
- def write_local_footer(entry)
49
- @output_stream << [ 0x08074b50, entry.crc, entry.compressed_size, entry.size].pack('VVVV')
50
- end
51
-
52
- #never need to do this because we set correct sizes up front
53
- def update_local_headers
54
- nil
55
- end
56
-
57
- # helper to deal with difference between rubyzip 1.0 and 1.1
58
- def current_entry
59
- @currentEntry || @current_entry
60
- end
61
- end
62
- end
data/lib/txgh/app.rb DELETED
@@ -1,140 +0,0 @@
1
- require 'sinatra'
2
- require 'sinatra/json'
3
- require 'sinatra/reloader'
4
- require 'sinatra/streaming'
5
-
6
- module Txgh
7
- module RespondWith
8
- def respond_with(resp)
9
- env['txgh.response'] = resp
10
-
11
- if resp.streaming?
12
- response.headers.merge!(resp.headers)
13
-
14
- stream do |out|
15
- begin
16
- resp.write_to(out)
17
- rescue => e
18
- Txgh.events.publish_error(e)
19
- raise e
20
- end
21
- end
22
- else
23
- status resp.status
24
- json resp.body
25
- end
26
- end
27
- end
28
-
29
- class Application < Sinatra::Base
30
- include Txgh::Handlers
31
-
32
- helpers Sinatra::Streaming
33
- helpers RespondWith
34
-
35
- configure do
36
- set :logging, nil
37
- logger = Txgh::TxLogger.logger
38
- set :logger, logger
39
- end
40
-
41
- def initialize(app = nil)
42
- super(app)
43
- end
44
-
45
- get '/health_check' do
46
- respond_with(
47
- Response.new(200, {})
48
- )
49
- end
50
-
51
- get '/config' do
52
- config = Txgh::Config::KeyManager.config_from_project(params[:project_slug])
53
- branch = Utils.absolute_branch(params[:branch])
54
-
55
- begin
56
- tx_config = Txgh::Config::TxManager.tx_config(
57
- config.transifex_project, config.github_repo, branch
58
- )
59
-
60
- data = tx_config.to_h
61
- data.merge!(branch_slug: Utils.slugify(branch)) if branch
62
-
63
- status 200
64
- json data: data
65
- rescue ConfigNotFoundError => e
66
- status 404
67
- json [{ error: e.message }]
68
- rescue => e
69
- status 500
70
- json [{ error: e.message }]
71
- end
72
- end
73
-
74
- get '/download.:format' do
75
- respond_with(
76
- DownloadHandler.handle_request(request, settings.logger)
77
- )
78
- end
79
- end
80
-
81
- # Hooks are protected endpoints used for data integration between Github and
82
- # Transifex. They live under the /hooks namespace (see config.ru)
83
- class Hooks < Sinatra::Base
84
- include Txgh::Handlers
85
-
86
- helpers RespondWith
87
-
88
- configure do
89
- set :logging, nil
90
- logger = Txgh::TxLogger.logger
91
- set :logger, logger
92
- end
93
-
94
- configure :development do
95
- register Sinatra::Reloader
96
- end
97
-
98
- def initialize(app = nil)
99
- super(app)
100
- end
101
-
102
- post '/transifex' do
103
- respond_with(
104
- Transifex::RequestHandler.handle_request(request, settings.logger)
105
- )
106
- end
107
-
108
- post '/github' do
109
- respond_with(
110
- Github::RequestHandler.handle_request(request, settings.logger)
111
- )
112
- end
113
- end
114
-
115
- class Triggers < Sinatra::Base
116
- helpers RespondWith
117
-
118
- configure do
119
- set :logging, nil
120
- logger = Txgh::TxLogger.logger
121
- set :logger, logger
122
- end
123
-
124
- configure :development do
125
- register Sinatra::Reloader
126
- end
127
-
128
- patch '/push' do
129
- respond_with(
130
- Txgh::Handlers::Triggers::PushHandler.handle_request(request, settings.logger)
131
- )
132
- end
133
-
134
- patch '/pull' do
135
- respond_with(
136
- Txgh::Handlers::Triggers::PullHandler.handle_request(request, settings.logger)
137
- )
138
- end
139
- end
140
- end
@@ -1,28 +0,0 @@
1
- require 'openssl'
2
-
3
- module Txgh
4
- class GithubRequestAuth
5
- HMAC_DIGEST = OpenSSL::Digest.new('sha1')
6
- RACK_HEADER = 'HTTP_X_HUB_SIGNATURE'
7
- GITHUB_HEADER = 'X-Hub-Signature'
8
-
9
- class << self
10
- def authentic_request?(request, secret)
11
- request.body.rewind
12
- expected_signature = header_value(request.body.read, secret)
13
- actual_signature = request.env[RACK_HEADER]
14
- actual_signature == expected_signature
15
- end
16
-
17
- def header_value(content, secret)
18
- "sha1=#{digest(content, secret)}"
19
- end
20
-
21
- private
22
-
23
- def digest(content, secret)
24
- OpenSSL::HMAC.hexdigest(HMAC_DIGEST, secret, content)
25
- end
26
- end
27
- end
28
- end