gaptool-server 0.7.4 → 0.8.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 +4 -4
- data/Rakefile +19 -21
- data/VERSION +1 -1
- data/bin/gaptool-server +2 -2
- data/bin/gaptool-shell +2 -2
- data/config.ru +3 -4
- data/lib/app.rb +76 -66
- data/lib/exceptions.rb +4 -4
- data/lib/routes.rb +212 -203
- data/tasks/app.rb +12 -12
- data/tasks/config.rb +8 -8
- data/tasks/docker.rb +19 -19
- data/tasks/ec2.rb +14 -16
- data/tasks/gem.rb +7 -8
- data/tasks/role.rb +19 -19
- data/tasks/server.rb +7 -7
- data/tasks/user.rb +9 -9
- data/test/api_test.rb +212 -146
- data/test/base_test.rb +5 -5
- data/test/data_test.rb +56 -75
- data/test/test_helper.rb +11 -9
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f4f3e9c7ea6941ecfc204af4f0e3955084d2782
|
4
|
+
data.tar.gz: 46cdd65cd84a180d568fa842101e4e8d10898c23
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f0acc40c76b1715f4c509cafa4af7dfa33da130fd25c15f434f2e304ead95f436bff891554836ddf91aea91c1eafcd4bb93874f23426d775acd5fcfc136490e
|
7
|
+
data.tar.gz: 6a22c5aa7f579de53d1cfe08d650f3b30f458320d30bcb6eb84c57bdcaab2be1fe97db5e1e1f86325c2b01ca66e69fc4804358d33319b240a17ea43b3f90e764
|
data/Rakefile
CHANGED
@@ -14,28 +14,26 @@ $stdout.sync = true
|
|
14
14
|
|
15
15
|
def sys(cmd)
|
16
16
|
IO.popen(cmd) do |f|
|
17
|
-
until f.eof?
|
18
|
-
puts f.gets
|
19
|
-
end
|
17
|
+
puts f.gets until f.eof?
|
20
18
|
end
|
21
|
-
|
19
|
+
$CHILD_STATUS.to_i
|
22
20
|
end
|
23
21
|
|
24
|
-
Dir.glob('tasks/*.rb').each { |r| load r}
|
22
|
+
Dir.glob('tasks/*.rb').each { |r| load r }
|
25
23
|
|
26
|
-
unless File.
|
27
|
-
desc
|
24
|
+
unless File.exist?('/.dockerenv')
|
25
|
+
desc 'Start the shell'
|
28
26
|
task :shell do
|
29
27
|
exec "racksh #{Shellwords.join(ARGV[1..-1])}"
|
30
28
|
end
|
31
|
-
task :
|
29
|
+
task sh: :shell
|
32
30
|
|
33
|
-
desc
|
31
|
+
desc 'Start the HTTP server'
|
34
32
|
task :server do
|
35
33
|
exec "puma -p 3000 --preload -t 8:32 -w 3 #{Shellwords.join(ARGV[1..-1])}"
|
36
34
|
end
|
37
35
|
|
38
|
-
desc
|
36
|
+
desc 'Bump the version'
|
39
37
|
task :bump do
|
40
38
|
version = File.read('VERSION').strip
|
41
39
|
nver = version.next
|
@@ -44,29 +42,29 @@ unless File.exists?('/.dockerenv')
|
|
44
42
|
f.close
|
45
43
|
puts "Bumped #{version} => #{nver}"
|
46
44
|
exec "git commit -m 'Bump version to v#{nver}' VERSION"
|
47
|
-
Rake::Task[
|
48
|
-
Rake::Task[
|
45
|
+
Rake::Task['tag'].invoke
|
46
|
+
Rake::Task['gem:build'].invoke
|
49
47
|
end
|
50
48
|
|
51
|
-
desc
|
49
|
+
desc 'Tag git with VERSION'
|
52
50
|
task :tag do
|
53
|
-
exec
|
51
|
+
exec 'git tag v$(cat VERSION)'
|
54
52
|
end
|
55
53
|
|
56
|
-
desc
|
57
|
-
task :
|
58
|
-
exec
|
59
|
-
Rake::Task[
|
54
|
+
desc 'Push the git tag and the gem version'
|
55
|
+
task push: :tag do
|
56
|
+
exec 'git push origin v$(cat VERSION)'
|
57
|
+
Rake::Task['gem:push'].invoke
|
60
58
|
end
|
61
59
|
end
|
62
60
|
|
63
61
|
task :help do
|
64
|
-
puts
|
65
|
-
exec
|
62
|
+
puts 'Available tasks'
|
63
|
+
exec 'rake -T'
|
66
64
|
end
|
67
65
|
|
68
66
|
RSpec::Core::RakeTask.new :test do |task|
|
69
67
|
task.pattern = Dir['test/*_test.rb']
|
70
68
|
end
|
71
69
|
|
72
|
-
task :
|
70
|
+
task default: :help
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.8.0
|
data/bin/gaptool-server
CHANGED
@@ -5,7 +5,7 @@ begin
|
|
5
5
|
require 'gaptool-server'
|
6
6
|
root = Gem.loaded_specs['gaptool-server'].full_gem_path
|
7
7
|
rescue LoadError
|
8
|
-
root = File.realpath(File.join(File.dirname(__FILE__),
|
8
|
+
root = File.realpath(File.join(File.dirname(__FILE__), '..'))
|
9
9
|
end
|
10
10
|
Dir.chdir(root)
|
11
|
-
exec "puma #{ARGV.join(
|
11
|
+
exec "puma #{ARGV.join(' ')}"
|
data/bin/gaptool-shell
CHANGED
@@ -5,8 +5,8 @@ begin
|
|
5
5
|
require 'gaptool-server'
|
6
6
|
root = Gem.loaded_specs['gaptool-server'].full_gem_path
|
7
7
|
rescue LoadError
|
8
|
-
root = File.realpath(File.join(File.dirname(__FILE__),
|
8
|
+
root = File.realpath(File.join(File.dirname(__FILE__), '..'))
|
9
9
|
end
|
10
10
|
Dir.chdir(root)
|
11
11
|
|
12
|
-
exec "racksh #{ARGV.join(
|
12
|
+
exec "racksh #{ARGV.join(' ')}"
|
data/config.ru
CHANGED
@@ -2,9 +2,8 @@
|
|
2
2
|
|
3
3
|
ENV['DRYRUN'] = nil unless ENV['DRYRUN'] == 'true'
|
4
4
|
|
5
|
-
libpath = File.expand_path(File.join(File.dirname(__FILE__),
|
6
|
-
|
7
|
-
require "#{libpath}/helpers/redis"
|
5
|
+
libpath = File.expand_path(File.join(File.dirname(__FILE__), 'lib'))
|
6
|
+
$LOAD_PATH.unshift(libpath)
|
8
7
|
require "#{libpath}/app.rb"
|
9
8
|
|
10
|
-
run
|
9
|
+
run Gaptool::Server
|
data/lib/app.rb
CHANGED
@@ -13,87 +13,97 @@ require 'logger'
|
|
13
13
|
require 'versionomy'
|
14
14
|
require_relative 'exceptions'
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
module Gaptool
|
17
|
+
class Server < Sinatra::Application
|
18
|
+
@versions = {}
|
19
|
+
class << self
|
20
|
+
attr_reader :versions
|
21
|
+
end
|
19
22
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
json result: 'error', message: message
|
24
|
-
end
|
23
|
+
def versions
|
24
|
+
self.class.versions
|
25
|
+
end
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
error_response "Invalid data."
|
29
|
-
end
|
27
|
+
helpers Sinatra::JSON
|
28
|
+
use Airbrake::Sinatra
|
30
29
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
30
|
+
def error_response(msg = '')
|
31
|
+
message = env['sinatra_error'].nil? ? '' : " #{env['sinatra.error'].message}"
|
32
|
+
message = "#{msg}#{message}" unless msg.empty?
|
33
|
+
json result: 'error', message: message
|
34
|
+
end
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
36
|
+
error JSON::ParserError do
|
37
|
+
status 400
|
38
|
+
error_response 'Invalid data.'
|
39
|
+
end
|
39
40
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
if cl_v.nil?
|
44
|
-
begin
|
45
|
-
@@client_versions[client] = Versionomy.parse(client)
|
46
|
-
cl_v = @@client_versions[client]
|
47
|
-
rescue
|
48
|
-
return false
|
49
|
-
end
|
41
|
+
error HTTPError do
|
42
|
+
status env['sinatra.error'].code
|
43
|
+
error_response
|
50
44
|
end
|
51
|
-
cl_v.major == server.major && cl_v.minor == server.minor
|
52
|
-
end
|
53
45
|
|
54
|
-
|
55
|
-
|
56
|
-
|
46
|
+
def unauthenticated
|
47
|
+
halt(401, error_response('Unauthenticated'))
|
48
|
+
end
|
57
49
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
50
|
+
def client_version
|
51
|
+
client = env['HTTP_X_GAPTOOL_VERSION']
|
52
|
+
versions[client] ||= Versionomy.parse(client)
|
53
|
+
rescue
|
54
|
+
nil
|
55
|
+
end
|
56
|
+
|
57
|
+
def check_version
|
58
|
+
server = settings.version_parsed
|
59
|
+
client_version.major >= server.major && \
|
60
|
+
client_version.minor >= server.minor
|
61
|
+
rescue
|
62
|
+
false
|
63
|
+
end
|
64
|
+
|
65
|
+
def invalid_version
|
66
|
+
halt(400, error_response("Invalid version #{client_version} (server: #{settings.version})"))
|
67
|
+
end
|
62
68
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
69
|
+
error do
|
70
|
+
status 500
|
71
|
+
error_response
|
72
|
+
end
|
73
|
+
|
74
|
+
configure do
|
75
|
+
unless ENV['AIRBRAKE_API_KEY'].nil?
|
76
|
+
Airbrake.configure do |cfg|
|
77
|
+
cfg.api_key = ENV['AIRBRAKE_API_KEY']
|
78
|
+
cfg.logger = Logger.new(STDOUT)
|
79
|
+
end
|
68
80
|
end
|
81
|
+
disable :sessions
|
82
|
+
enable :dump_errors
|
83
|
+
disable :show_exceptions
|
84
|
+
version = File.read(File.realpath(
|
85
|
+
File.join(File.dirname(__FILE__), '..', 'VERSION')
|
86
|
+
)).strip
|
87
|
+
set(:version, version)
|
88
|
+
set(:version_parsed, Versionomy.parse(version))
|
69
89
|
end
|
70
|
-
disable :sessions
|
71
|
-
enable :dump_errors
|
72
|
-
disable :show_exceptions
|
73
|
-
version = File.read(File.realpath(
|
74
|
-
File.join(File.dirname(__FILE__), "..", 'VERSION')
|
75
|
-
)).strip
|
76
|
-
set(:version, version)
|
77
|
-
set(:version_parsed, Versionomy.parse(version))
|
78
|
-
end
|
79
90
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
return invalid_version(settings.version, env['HTTP_X_GAPTOOL_VERSION'])
|
91
|
+
before do
|
92
|
+
if request.path_info != '/ping' && ENV['GAPTOOL_DISABLE_AUTH'].nil?
|
93
|
+
user = Gaptool::Data.user(env['HTTP_X_GAPTOOL_USER'])
|
94
|
+
return unauthenticated if user.nil?
|
95
|
+
return unauthenticated unless user[:key] == env['HTTP_X_GAPTOOL_KEY']
|
96
|
+
return invalid_version if !ENV['GAPTOOL_CHECK_CLIENT_VERSION'].nil? && !check_version
|
87
97
|
end
|
88
98
|
end
|
89
|
-
end
|
90
99
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
100
|
+
after do
|
101
|
+
# Fix for old versions of gaptool-api
|
102
|
+
if request.preferred_type.to_str == 'application/json'
|
103
|
+
content_type 'application/json'
|
104
|
+
else
|
105
|
+
content_type 'text/html'
|
106
|
+
end
|
97
107
|
end
|
98
108
|
end
|
99
109
|
end
|
data/lib/exceptions.rb
CHANGED