adminix 0.1.31 → 0.1.35

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cb85f4bd32b438166c08aceea4263ecce8b9e441
4
- data.tar.gz: 0ce46f5fa2859c4a9e46960bddadc8a0428d5980
3
+ metadata.gz: 394f5bc9d28519303e33da4a2b6291c084e65114
4
+ data.tar.gz: 85c575b7aecf227c88540e294e30ef2f83c5ff95
5
5
  SHA512:
6
- metadata.gz: 32f86bac5cf5ce86406432a34851fab03c40689bc4c51b2ad18f7b7aa6d6466878201d79b4f39408577dfe638edccf0a61c0a00f42661a9694fd6ab323851586
7
- data.tar.gz: cbdbf8fe21af63db4b2c29a2b9c609535411122b0c00fbaa74afff4f121f5101648af8d6e0ecd74081e4f3cbbe3952a102a7764b8dbd83d15f35b5f7ffbc8139
6
+ metadata.gz: 510c728c69e178676d18dad4756faf6c058e5c687bf0bb6b76cd742ea0a6e4da83dec5c4dfbc2b80eae57e5bf5e4a9f1a480929227f81511197b971d364e0a55
7
+ data.tar.gz: ce4777e0982273ab8491ad99e54738169bb7ebbbb4fe7abcef2b1f8d0d9ddeac6f8b08a50f6f041889bf771214505ef06b25690ce8158d5be15f17c6035ec967
data/adminix.gemspec CHANGED
@@ -4,39 +4,41 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'adminix/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "adminix"
7
+ spec.name = 'adminix'
8
8
  spec.version = Adminix::VERSION
9
- spec.authors = ["Christian Dyl"]
10
- spec.email = ["christian.dyl@outlook.com"]
9
+ spec.authors = ['Christian Dyl']
10
+ spec.email = ['christian@adminix.io']
11
11
 
12
- spec.summary = "Adminix"
13
- spec.description = "Adminix"
14
- spec.homepage = "http://adminix.io"
15
- spec.license = "MIT"
12
+ spec.summary = 'Adminix'
13
+ spec.description = 'Adminix'
14
+ spec.homepage = 'https://adminix.io'
15
+ spec.license = 'MIT'
16
16
 
17
17
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
18
  # to allow pushing to a single host or delete this section to allow pushing to any host.
19
19
  #if spec.respond_to?(:metadata)
20
- #spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
20
+ #spec.metadata['allowed_push_host'] = 'TODO: Set to 'http://mygemserver.com''
21
21
  #else
22
- #raise "RubyGems 2.0 or newer is required to protect against " \
23
- #"public gem pushes."
22
+ #raise 'RubyGems 2.0 or newer is required to protect against ' \
23
+ #'public gem pushes.'
24
24
  #end
25
25
 
26
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
26
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
27
27
  f.match(%r{^(test|spec|features)/})
28
28
  end
29
- spec.bindir = "exe"
29
+ spec.bindir = 'exe'
30
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
- spec.require_paths = ["lib"]
31
+ spec.require_paths = ['lib']
32
32
 
33
- spec.add_dependency "eventmachine", "1.2.5"
34
- spec.add_dependency "action_cable_client", "2.0.2"
35
- spec.add_dependency "sinatra", "1.4.8"
33
+ spec.add_dependency 'eventmachine', '1.2.5'
34
+ spec.add_dependency 'action_cable_client', '2.0.2'
35
+ spec.add_dependency 'json', '2.1.0'
36
+ spec.add_dependency 'openssl', '2.1.0'
37
+ spec.add_dependency 'airbrake-ruby', '2.8.1'
36
38
 
37
- spec.add_development_dependency "bundler", "~> 1.14"
38
- spec.add_development_dependency "rake", "~> 10.0"
39
- spec.add_development_dependency "rspec", "~> 3.0"
40
- spec.add_development_dependency "byebug", "~> 9.0", ">= 9.0.6"
41
- spec.add_development_dependency "faker", "~> 1.7", ">= 1.7.2"
39
+ spec.add_development_dependency 'bundler', '~> 1.14'
40
+ spec.add_development_dependency 'rake', '~> 10.0'
41
+ spec.add_development_dependency 'rspec', '~> 3.0'
42
+ spec.add_development_dependency 'byebug', '~> 9.0', '>= 9.0.6'
43
+ spec.add_development_dependency 'faker', '~> 1.7', '>= 1.7.2'
42
44
  end
data/exe/adminix CHANGED
@@ -2,6 +2,7 @@
2
2
  # encoding: utf-8
3
3
 
4
4
  require 'optparse'
5
+ require_relative '../lib/adminix'
5
6
 
6
7
  options = {
7
8
  action: "help",
@@ -42,7 +43,6 @@ options[:action] = ARGV[0] || "help"
42
43
  parsers[options[:action].to_sym].parse!(ARGV) rescue nil
43
44
 
44
45
  unless options[:action] == "help"
45
- require'adminix'
46
46
  config = Adminix::Config.instance
47
47
 
48
48
  config.secret_key = options[:secret_key]
@@ -60,7 +60,7 @@ case options[:action]
60
60
  puts Adminix::Watcher.run!(options)
61
61
  else
62
62
  puts 'Credentials are not defined, running setup server'
63
- require 'adminix/setup'
63
+ require 'adminix/server_setup'
64
64
  end
65
65
  when "version"
66
66
  puts "adminix version #{Adminix::VERSION}"
@@ -7,12 +7,13 @@ module Adminix
7
7
 
8
8
  DEFAULT_HOST = 'https://api.adminix.io'.freeze
9
9
  DEFAULT_WEBSOCKET_HOST = 'wss://websocket.adminix.io/cable'.freeze
10
- DEFAULT_SETUP_SERVER_PORT = '8080'
10
+ DEFAULT_SETUP_SERVER_PORT = (ENV['ADMINIX_SETUP_SERVER_PORT'] || '8080').freeze
11
11
  DEFAULT_WATCHER_SYNC_PERIOD = 10.freeze
12
12
  DEFAULT_LOGS_SYNC_PERIOD = 3.freeze
13
13
  DEFAULT_LOGS_ENABLED = true
14
14
 
15
- attr_accessor :service_id, :secret_key, :host, :commands, :daemon, :setup_server_port, :scripts, :watch_log_files, :watcher_sync_period, :logs_sync_period, :logs_enabled, :websocket_path, :mode, :working_dir
15
+ attr_accessor :service_id, :secret_key, :host, :commands, :daemon, :setup_server_port, :scripts, :watch_log_files, :watcher_sync_period, :logs_sync_period, :logs_enabled, :websocket_path, :mode, :working_dir, :iv, :password
16
+ attr_reader :image_sname, :error_notifier_enabled
16
17
 
17
18
  def initialize
18
19
  @host = ENV['ADMINIX_HOST'] || DEFAULT_HOST
@@ -24,6 +25,7 @@ module Adminix
24
25
  @websocket_path = ENV['ADMINIX_WEBSOCKET_HOST'] || DEFAULT_WEBSOCKET_HOST
25
26
  @mode = 'classic'
26
27
  @working_dir = `pwd`.split("\n").first
28
+ @iv = ENV['DECIPHER_IV'] || 'U7yfLthY77Yjtp9z'
27
29
  @scripts = {
28
30
  watcher_start: 'sudo systemctl start adminix.service',
29
31
  watcher_stop: 'sudo systemctl stop adminix.service',
@@ -31,6 +33,7 @@ module Adminix
31
33
  process_stop: 'sudo systemctl stop adminix_process.service'
32
34
  }
33
35
  @watch_log_files = []
36
+ @error_notifier_enabled = ENV['ADMINIX_ERROR_NOTIFIER'].nil? ? true : ENV['ADMINIX_ERROR_NOTIFIER'] == 'true'
34
37
 
35
38
  @config_store_path = "#{ENV['HOME']}/.config"
36
39
  @root_path = "#{@config_store_path}/adminix"
@@ -64,10 +67,14 @@ module Adminix
64
67
  }
65
68
 
66
69
  @watch_log_files = data['watch_logs'] || []
70
+
71
+ @image_sname = data['image']
67
72
  end
68
73
  end
69
74
 
70
75
  def sync_remote_config
76
+ return if service_id.nil? || secret_key.nil?
77
+
71
78
  uri = URI.parse("#{@host}/v1/services/#{@service_id}/watcher_config")
72
79
  request = Net::HTTP::Get.new(uri)
73
80
  request["Authorization"] = "Bearer #{@secret_key}"
@@ -80,6 +87,12 @@ module Adminix
80
87
  data = JSON.parse(response.body)
81
88
  result = data['result'] || {}
82
89
 
90
+ case response.code
91
+ when '401'
92
+ puts 'Incorrect credentials'
93
+ exit
94
+ end
95
+
83
96
  @watcher_sync_period = result['sync_period'] || DEFAULT_WATCHER_SYNC_PERIOD
84
97
  @logs_sync_period = result['logs_sync_period'] || DEFAULT_LOGS_SYNC_PERIOD
85
98
  @logs_enables = result.key?('logs_enabled') ? result['logs_enabled'] == true : DEFAULT_LOGS_ENABLED
@@ -0,0 +1,7 @@
1
+ require 'airbrake-ruby'
2
+
3
+ Airbrake.configure do |c|
4
+ c.host = 'http://ec2-18-217-189-42.us-east-2.compute.amazonaws.com'
5
+ c.project_id = 1 # required, but any positive integer works
6
+ c.project_key = 'efb1c025d1abb9c4ccb828ebaf9ea68f'
7
+ end
@@ -0,0 +1,74 @@
1
+ require 'sinatra/base'
2
+ require 'json'
3
+ require 'securerandom'
4
+ require 'base64'
5
+ require 'openssl'
6
+ # require 'digest'
7
+
8
+ module Adminix
9
+ class ServerSetup < Sinatra::Base
10
+ get '/' do
11
+ %{
12
+ <html>
13
+ <head>
14
+ <title>Adminix start</title>
15
+ </head>
16
+ <body>
17
+ <script type="text/javascript">
18
+ var host = window.location.protocol + '//' + window.location.host;
19
+ var newPath = "https://beta.adminix.io/setup-server/init?host=" + host;
20
+ window.location.href = newPath;
21
+ </script>
22
+ </body>
23
+ </html>
24
+ }
25
+ end
26
+
27
+ get '/ping' do
28
+ 'pong'
29
+ end
30
+
31
+ post '/data' do
32
+ config = Adminix::Config.instance
33
+ config.password = SecureRandom.hex
34
+
35
+ content_type :json
36
+ { password: config.password, image: config.image_sname }.to_json
37
+ end
38
+
39
+ post '/connect' do
40
+ content_type :json
41
+
42
+ data = {}
43
+ config = Adminix::Config.instance
44
+
45
+ begin
46
+ decoded = Base64.decode64 request.body.read.encode('ascii-8bit')
47
+ decipher = OpenSSL::Cipher::AES256.new :CBC
48
+ decipher.decrypt
49
+ decipher.key = config.password
50
+ decipher.iv = config.iv
51
+ decrypted_data = decipher.update(decoded) + decipher.final
52
+ data = JSON.parse(decrypted_data)['server_setup']
53
+ rescue
54
+ { success: false }.to_json
55
+ end
56
+
57
+ config.password = ''
58
+ config.service_id = data['service_id']
59
+ config.secret_key = data['secret_key']
60
+ config.export_credentials
61
+
62
+ Thread.start do
63
+ sleep(2)
64
+ Adminix::Service.instance.restart!
65
+ end
66
+
67
+ { success: true }.to_json
68
+ end
69
+
70
+ set :bind, '0.0.0.0'
71
+ set :port, Adminix::Config::DEFAULT_SETUP_SERVER_PORT
72
+ end
73
+ end
74
+
@@ -1,3 +1,3 @@
1
1
  module Adminix
2
- VERSION = "0.1.31"
2
+ VERSION = '0.1.35'
3
3
  end
@@ -42,33 +42,8 @@ module Adminix
42
42
  Adminix::Service.instance.count_logs_lines
43
43
 
44
44
  EventMachine.run do
45
- @ws_client = ActionCableClient.new(@ws_uri, @ws_channel)
46
- @ws_client.connected do |msg|
47
- puts 'Service connection established'
48
- end
49
- @ws_client.disconnected do
50
- system.log 'Service disconnected. Reconnecting...'
51
- sleep(2)
52
- @ws_client.connect!
53
- end
54
- @ws_client.received do |msg|
55
- message = msg['message'] || {}
56
- case message['type']
57
- when 'restart' then @service.restart!
58
- when 'sync' then @service.sync(@ws_client, message['data'])
59
- end
60
- end
61
-
62
- @ws_logs_client = ActionCableClient.new(@ws_uri, @ws_logs_channel)
63
- @ws_logs_client.connected do |msg|
64
- puts 'Logs connection established'
65
- end
66
- @ws_logs_client.disconnected do
67
- system.log 'Logs disconnected. Reconnecting...'
68
- sleep(2)
69
- @ws_logs_client.connect!
70
- end
71
- @ws_logs_client.received { |msg| }
45
+ initialize_ws
46
+ initialize_ws_logs
72
47
 
73
48
  # Sync watcher
74
49
  EventMachine.add_periodic_timer(config.watcher_sync_period) do
@@ -91,6 +66,47 @@ module Adminix
91
66
  end
92
67
  end
93
68
 
69
+ def initialize_ws
70
+ @ws_client = ActionCableClient.new(@ws_uri, @ws_channel)
71
+ @ws_client.connected do |msg|
72
+ puts 'Service connection established'
73
+ end
74
+ @ws_client.disconnected do
75
+ system.log 'Service disconnected. Reconnecting...'
76
+ sleep(2)
77
+ # @ws_client.connect!
78
+ initialize_ws
79
+ end
80
+ @ws_client.received do |msg|
81
+ message = msg['message'] || {}
82
+ case message['type']
83
+ when 'restart' then @service.restart!
84
+ when 'sync' then @service.sync(@ws_client, message['data'])
85
+ end
86
+ end
87
+
88
+ # @ws_client.pinged do |_data|
89
+ # puts 'ping'
90
+ # end
91
+ end
92
+
93
+ def initialize_ws_logs
94
+ @ws_logs_client = ActionCableClient.new(@ws_uri, @ws_logs_channel)
95
+ @ws_logs_client.connected do |msg|
96
+ puts 'Logs connection established'
97
+ end
98
+ @ws_logs_client.disconnected do
99
+ system.log 'Logs disconnected. Reconnecting...'
100
+ sleep(2)
101
+ # @ws_logs_client.connect!
102
+ initialize_ws_logs
103
+ end
104
+ # @ws_logs_client.pinged do |_data|
105
+ # puts 'logs ping'
106
+ # end
107
+ @ws_logs_client.received { |msg| }
108
+ end
109
+
94
110
  def get_pid
95
111
  if File.exists?(@pid_full)
96
112
  file = File.new(@pid_full, "r")
data/lib/adminix.rb CHANGED
@@ -1,9 +1,10 @@
1
- require 'adminix/version'
2
- require 'adminix/config'
3
- require 'adminix/service'
4
- require 'adminix/system'
5
- require 'adminix/log_watch_handler'
6
- require 'adminix/watcher'
1
+ require_relative 'adminix/version'
2
+ require_relative 'adminix/errors'
3
+ require_relative 'adminix/config'
4
+ require_relative 'adminix/service'
5
+ require_relative 'adminix/system'
6
+ require_relative 'adminix/log_watch_handler'
7
+ require_relative 'adminix/watcher'
7
8
 
8
9
  module Adminix
9
10
  def self.root
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adminix
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.31
4
+ version: 0.1.35
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Dyl
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-02 00:00:00.000000000 Z
11
+ date: 2018-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eventmachine
@@ -39,19 +39,47 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: 2.0.2
41
41
  - !ruby/object:Gem::Dependency
42
- name: sinatra
42
+ name: json
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: 1.4.8
47
+ version: 2.1.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: 1.4.8
54
+ version: 2.1.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: openssl
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 2.1.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 2.1.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: airbrake-ruby
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 2.8.1
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 2.8.1
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: bundler
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -136,7 +164,7 @@ dependencies:
136
164
  version: 1.7.2
137
165
  description: Adminix
138
166
  email:
139
- - christian.dyl@outlook.com
167
+ - christian@adminix.io
140
168
  executables:
141
169
  - adminix
142
170
  extensions: []
@@ -157,7 +185,9 @@ files:
157
185
  - lib/adminix.rb
158
186
  - lib/adminix/.service.rb.swn
159
187
  - lib/adminix/config.rb
188
+ - lib/adminix/errors.rb
160
189
  - lib/adminix/log_watch_handler.rb
190
+ - lib/adminix/server_setup.rb
161
191
  - lib/adminix/service.rb
162
192
  - lib/adminix/setup.rb
163
193
  - lib/adminix/setup/routes.rb
@@ -167,7 +197,7 @@ files:
167
197
  - lib/adminix/version.rb
168
198
  - lib/adminix/watcher.rb
169
199
  - views/daemon_scripts/upstart.conf.erb
170
- homepage: http://adminix.io
200
+ homepage: https://adminix.io
171
201
  licenses:
172
202
  - MIT
173
203
  metadata: {}
@@ -187,7 +217,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
187
217
  version: '0'
188
218
  requirements: []
189
219
  rubyforge_project:
190
- rubygems_version: 2.6.13
220
+ rubygems_version: 2.6.11
191
221
  signing_key:
192
222
  specification_version: 4
193
223
  summary: Adminix