turbot 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +15 -0
  2. data/README.md +36 -0
  3. data/bin/turbot +17 -0
  4. data/data/cacert.pem +3988 -0
  5. data/lib/turbot/auth.rb +315 -0
  6. data/lib/turbot/cli.rb +38 -0
  7. data/lib/turbot/client/cisaurus.rb +25 -0
  8. data/lib/turbot/client/pgbackups.rb +113 -0
  9. data/lib/turbot/client/rendezvous.rb +111 -0
  10. data/lib/turbot/client/ssl_endpoint.rb +25 -0
  11. data/lib/turbot/client/turbot_postgresql.rb +148 -0
  12. data/lib/turbot/client.rb +757 -0
  13. data/lib/turbot/command/auth.rb +85 -0
  14. data/lib/turbot/command/base.rb +192 -0
  15. data/lib/turbot/command/bots.rb +326 -0
  16. data/lib/turbot/command/config.rb +123 -0
  17. data/lib/turbot/command/help.rb +179 -0
  18. data/lib/turbot/command/keys.rb +115 -0
  19. data/lib/turbot/command/logs.rb +34 -0
  20. data/lib/turbot/command/ssl.rb +43 -0
  21. data/lib/turbot/command/status.rb +51 -0
  22. data/lib/turbot/command/update.rb +47 -0
  23. data/lib/turbot/command/version.rb +23 -0
  24. data/lib/turbot/command.rb +304 -0
  25. data/lib/turbot/deprecated/help.rb +38 -0
  26. data/lib/turbot/deprecated.rb +5 -0
  27. data/lib/turbot/distribution.rb +9 -0
  28. data/lib/turbot/errors.rb +28 -0
  29. data/lib/turbot/excon.rb +11 -0
  30. data/lib/turbot/helpers/log_displayer.rb +70 -0
  31. data/lib/turbot/helpers/pg_dump_restore.rb +115 -0
  32. data/lib/turbot/helpers/turbot_postgresql.rb +213 -0
  33. data/lib/turbot/helpers.rb +521 -0
  34. data/lib/turbot/plugin.rb +165 -0
  35. data/lib/turbot/updater.rb +171 -0
  36. data/lib/turbot/version.rb +3 -0
  37. data/lib/turbot.rb +19 -0
  38. data/lib/vendor/turbot/okjson.rb +598 -0
  39. data/spec/helper/legacy_help.rb +16 -0
  40. data/spec/helper/pg_dump_restore_spec.rb +67 -0
  41. data/spec/schemas/dummy_schema.json +12 -0
  42. data/spec/spec.opts +1 -0
  43. data/spec/spec_helper.rb +220 -0
  44. data/spec/support/display_message_matcher.rb +49 -0
  45. data/spec/support/dummy_api.rb +120 -0
  46. data/spec/support/openssl_mock_helper.rb +8 -0
  47. data/spec/support/organizations_mock_helper.rb +11 -0
  48. data/spec/turbot/auth_spec.rb +214 -0
  49. data/spec/turbot/client/pgbackups_spec.rb +43 -0
  50. data/spec/turbot/client/rendezvous_spec.rb +62 -0
  51. data/spec/turbot/client/ssl_endpoint_spec.rb +48 -0
  52. data/spec/turbot/client/turbot_postgresql_spec.rb +71 -0
  53. data/spec/turbot/client_spec.rb +548 -0
  54. data/spec/turbot/command/auth_spec.rb +38 -0
  55. data/spec/turbot/command/base_spec.rb +66 -0
  56. data/spec/turbot/command/bots_spec.rb +54 -0
  57. data/spec/turbot/command/config_spec.rb +143 -0
  58. data/spec/turbot/command/help_spec.rb +90 -0
  59. data/spec/turbot/command/keys_spec.rb +117 -0
  60. data/spec/turbot/command/logs_spec.rb +60 -0
  61. data/spec/turbot/command/status_spec.rb +48 -0
  62. data/spec/turbot/command/version_spec.rb +16 -0
  63. data/spec/turbot/command_spec.rb +131 -0
  64. data/spec/turbot/helpers/turbot_postgresql_spec.rb +181 -0
  65. data/spec/turbot/helpers_spec.rb +48 -0
  66. data/spec/turbot/plugin_spec.rb +172 -0
  67. data/spec/turbot/updater_spec.rb +44 -0
  68. data/templates/manifest.json +7 -0
  69. data/templates/scraper.py +5 -0
  70. data/templates/scraper.rb +6 -0
  71. metadata +199 -0
@@ -0,0 +1,171 @@
1
+ require "digest"
2
+ require "fileutils"
3
+ require "turbot/helpers"
4
+
5
+ module Turbot
6
+ module Updater
7
+
8
+ def self.error(message)
9
+ raise Turbot::Command::CommandFailed.new(message)
10
+ end
11
+
12
+ def self.updating_lock_path
13
+ File.join(Turbot::Helpers.home_directory, ".turbot", "updating")
14
+ end
15
+
16
+ def self.installed_client_path
17
+ File.expand_path("../../..", __FILE__)
18
+ end
19
+
20
+ def self.updated_client_path
21
+ File.join(Turbot::Helpers.home_directory, ".turbot", "client")
22
+ end
23
+
24
+ def self.latest_local_version
25
+ installed_version = client_version_from_path(installed_client_path)
26
+ updated_version = client_version_from_path(updated_client_path)
27
+ if compare_versions(updated_version, installed_version) > 0
28
+ updated_version
29
+ else
30
+ installed_version
31
+ end
32
+ end
33
+
34
+ def self.client_version_from_path(path)
35
+ version_file = File.join(path, "lib/turbot/version.rb")
36
+ if File.exists?(version_file)
37
+ File.read(version_file).match(/VERSION = "([^"]+)"/)[1]
38
+ else
39
+ '0.0.0'
40
+ end
41
+ end
42
+
43
+ def self.disable(message=nil)
44
+ @disable = message if message
45
+ @disable
46
+ end
47
+
48
+ def self.check_disabled!
49
+ if disable
50
+ Turbot::Helpers.error(disable)
51
+ end
52
+ end
53
+
54
+ def self.wait_for_lock(path, wait_for=5, check_every=0.5)
55
+ start = Time.now.to_i
56
+ while File.exists?(path)
57
+ sleep check_every
58
+ if (Time.now.to_i - start) > wait_for
59
+ Turbot::Helpers.error "Unable to acquire update lock"
60
+ end
61
+ end
62
+ begin
63
+ FileUtils.touch path
64
+ ret = yield
65
+ ensure
66
+ FileUtils.rm_f path
67
+ end
68
+ ret
69
+ end
70
+
71
+ def self.autoupdate?
72
+ true
73
+ end
74
+
75
+ def self.update(url, autoupdate=false)
76
+ wait_for_lock(updating_lock_path, 5) do
77
+ require "excon"
78
+ require "turbot"
79
+ require "turbot/excon"
80
+ require "tmpdir"
81
+ require "zip/zip"
82
+
83
+ latest_version = Excon.get_with_redirect("http://assets.turbot.com/turbot-client/VERSION", :nonblock => false).body.chomp
84
+
85
+ if compare_versions(latest_version, latest_local_version) > 0
86
+ Dir.mktmpdir do |download_dir|
87
+ File.open("#{download_dir}/turbot.zip", "wb") do |file|
88
+ file.print Excon.get_with_redirect(url, :nonblock => false).body
89
+ end
90
+
91
+ hash = Digest::SHA256.file("#{download_dir}/turbot.zip").hexdigest
92
+ official_hash = Excon.get_with_redirect("https://toolbelt.turbot.com/update/hash", :nonblock => false).body.chomp
93
+
94
+ error "Update hash signature mismatch" unless hash == official_hash
95
+
96
+ Zip::ZipFile.open("#{download_dir}/turbot.zip") do |zip|
97
+ zip.each do |entry|
98
+ target = File.join(download_dir, entry.to_s)
99
+ FileUtils.mkdir_p File.dirname(target)
100
+ zip.extract(entry, target) { true }
101
+ end
102
+ end
103
+
104
+ FileUtils.rm "#{download_dir}/turbot.zip"
105
+
106
+ old_version = latest_local_version
107
+ new_version = client_version_from_path(download_dir)
108
+
109
+ if compare_versions(new_version, old_version) < 0 && !autoupdate
110
+ Turbot::Helpers.error("Installed version (#{old_version}) is newer than the latest available update (#{new_version})")
111
+ end
112
+
113
+ FileUtils.rm_rf updated_client_path
114
+ FileUtils.mkdir_p File.dirname(updated_client_path)
115
+ FileUtils.cp_r download_dir, updated_client_path
116
+
117
+ new_version
118
+ end
119
+ else
120
+ false # already up to date
121
+ end
122
+ end
123
+ ensure
124
+ FileUtils.rm_f(updating_lock_path)
125
+ end
126
+
127
+ def self.compare_versions(first_version, second_version)
128
+ first_version.split('.').map {|part| Integer(part) rescue part} <=> second_version.split('.').map {|part| Integer(part) rescue part}
129
+ end
130
+
131
+ def self.inject_libpath
132
+ old_version = client_version_from_path(installed_client_path)
133
+ new_version = client_version_from_path(updated_client_path)
134
+
135
+ if compare_versions(new_version, old_version) > 0
136
+ $:.unshift File.join(updated_client_path, "lib")
137
+ vendored_gems = Dir[File.join(updated_client_path, "vendor", "gems", "*")]
138
+ vendored_gems.each do |vendored_gem|
139
+ $:.unshift File.join(vendored_gem, "lib")
140
+ end
141
+ load('turbot/updater.rb') # reload updated updater
142
+ end
143
+
144
+ background_update!
145
+ end
146
+
147
+ def self.last_autoupdate_path
148
+ File.join(Turbot::Helpers.home_directory, ".turbot", "autoupdate.last")
149
+ end
150
+
151
+ def self.background_update!
152
+ # if we've updated in the last 300 seconds, dont try again
153
+ if File.exists?(last_autoupdate_path)
154
+ return if (Time.now.to_i - File.mtime(last_autoupdate_path).to_i) < 300
155
+ end
156
+ log_path = File.join(Turbot::Helpers.home_directory, '.turbot', 'autoupdate.log')
157
+ FileUtils.mkdir_p File.dirname(log_path)
158
+ turbot_binary = File.expand_path($0)
159
+ pid = if defined?(RUBY_VERSION) and RUBY_VERSION =~ /^1\.8\.\d+/
160
+ fork do
161
+ exec("\"#{turbot_binary}\" update &> #{log_path} 2>&1")
162
+ end
163
+ else
164
+ spawn("\"#{turbot_binary}\" update", {:err => log_path, :out => log_path})
165
+ end
166
+ Process.detach(pid)
167
+ FileUtils.mkdir_p File.dirname(last_autoupdate_path)
168
+ FileUtils.touch last_autoupdate_path
169
+ end
170
+ end
171
+ end
@@ -0,0 +1,3 @@
1
+ module Turbot
2
+ VERSION = "0.0.2"
3
+ end
data/lib/turbot.rb ADDED
@@ -0,0 +1,19 @@
1
+ require "turbot/client"
2
+ require "turbot/updater"
3
+ require "turbot/version"
4
+ require "turbot_api"
5
+ require "turbot/errors"
6
+
7
+ module Turbot
8
+
9
+ USER_AGENT = "turbot-gem/#{Turbot::VERSION} (#{RUBY_PLATFORM}) ruby/#{RUBY_VERSION}"
10
+
11
+ def self.user_agent
12
+ @@user_agent ||= USER_AGENT
13
+ end
14
+
15
+ def self.user_agent=(agent)
16
+ @@user_agent = agent
17
+ end
18
+
19
+ end