gaptool-server 0.7.4 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- 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