meroku 2.0.8 → 2.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +9 -5
  3. data/bin/meroku +1 -1
  4. data/circle.yml +23 -0
  5. data/frontend/Gemfile +5 -2
  6. data/frontend/Gemfile.lock +5 -2
  7. data/frontend/app/controllers/application_controller.rb +1 -0
  8. data/frontend/app/controllers/apps_controller.rb +46 -48
  9. data/frontend/app/controllers/publickeys_controller.rb +45 -46
  10. data/frontend/app/controllers/users/registrations_controller.rb +0 -15
  11. data/frontend/app/controllers/users/sessions_controller.rb +12 -3
  12. data/frontend/app/lib/cmd.rb +11 -0
  13. data/frontend/app/models/app.rb +18 -11
  14. data/frontend/app/models/publickey.rb +1 -1
  15. data/frontend/app/models/user.rb +5 -4
  16. data/frontend/app/policies/application_policy.rb +53 -0
  17. data/frontend/app/policies/publickey_policy.rb +7 -0
  18. data/frontend/app/serializable/serializable_user.rb +2 -1
  19. data/frontend/app/views/layouts/application.html.erb +1 -1
  20. data/frontend/config/database.yml +72 -10
  21. data/frontend/config/routes.rb +6 -14
  22. data/frontend/db/migrate/20171028150506_add_apisecret_to_users.rb +6 -0
  23. data/frontend/etc_nginx_sites-enabled_default +1 -1
  24. data/frontend/public/Meroku.html +140 -0
  25. data/frontend/public/Meroku/Api.html +129 -0
  26. data/frontend/public/Meroku/Api/Request.html +221 -0
  27. data/frontend/public/Meroku/Aws.html +212 -0
  28. data/frontend/public/Meroku/Aws/Ec2.html +477 -0
  29. data/frontend/public/Meroku/CLI.html +784 -0
  30. data/frontend/public/Meroku/CLI/AdminUser.html +192 -0
  31. data/frontend/public/Meroku/CLI/Help.html +224 -0
  32. data/frontend/public/Meroku/CLI/Secrets.html +191 -0
  33. data/frontend/public/Meroku/CLI/Session.html +460 -0
  34. data/frontend/public/Meroku/CLI/User.html +182 -0
  35. data/frontend/public/Meroku/Extensions.html +405 -0
  36. data/frontend/public/Meroku/Infrastructure.html +279 -0
  37. data/frontend/public/Meroku/Infrastructure/Node.html +785 -0
  38. data/frontend/public/Meroku/Infrastructure/Server.html +373 -0
  39. data/frontend/public/Meroku/Node.html +845 -0
  40. data/frontend/public/Meroku/Tunnel.html +701 -0
  41. data/frontend/public/Meroku/Tunnelable.html +243 -0
  42. data/frontend/public/_index.html +273 -0
  43. data/frontend/public/class_list.html +51 -0
  44. data/frontend/public/css/common.css +1 -0
  45. data/frontend/public/css/full_list.css +58 -0
  46. data/frontend/public/css/style.css +492 -0
  47. data/frontend/public/file.README.html +181 -0
  48. data/frontend/public/file_list.html +56 -0
  49. data/frontend/public/frames.html +17 -0
  50. data/frontend/public/index.html +181 -0
  51. data/frontend/public/js/app.js +248 -0
  52. data/frontend/public/js/full_list.js +216 -0
  53. data/frontend/public/js/jquery.js +4 -0
  54. data/frontend/public/method_list.html +395 -0
  55. data/frontend/public/robots.txt +2 -1
  56. data/frontend/public/top-level-namespace.html +110 -0
  57. data/frontend/test/policies/publickey_policy_test.rb +19 -0
  58. data/lib/meroku.rb +9 -7
  59. data/lib/meroku/api.rb +8 -0
  60. data/lib/meroku/api/request.rb +17 -0
  61. data/lib/meroku/aws.rb +14 -0
  62. data/lib/meroku/aws/ec2.rb +59 -0
  63. data/lib/meroku/cli.rb +80 -81
  64. data/lib/meroku/cli/help.rb +27 -0
  65. data/lib/meroku/cli/secrets.rb +13 -0
  66. data/lib/meroku/cli/session.rb +32 -51
  67. data/lib/meroku/extensions.rb +32 -0
  68. data/lib/meroku/infrastructure.rb +14 -17
  69. data/lib/meroku/infrastructure/server.rb +20 -0
  70. data/lib/meroku/node.rb +113 -0
  71. data/lib/meroku/tunnelable.rb +31 -0
  72. data/lib/meroku/version.rb +1 -1
  73. data/modified-cedar-14.sh +0 -4
  74. metadata +50 -9
  75. data/frontend/app/controllers/pages_controller.rb +0 -4
  76. data/frontend/app/views/pages/landing.html.erb +0 -2
  77. data/frontend/db/migrate/20171025193627_add_token_to_users.rb +0 -5
  78. data/lib/meroku/cli/admin_user.rb +0 -20
  79. data/lib/meroku/cli/user.rb +0 -14
  80. data/lib/meroku/infrastructure/node.rb +0 -102
  81. data/lib/meroku/tunnel.rb +0 -56
@@ -0,0 +1,27 @@
1
+ module Meroku
2
+ module CLI
3
+ # The help thats printed when a command is unspecified or unrecognized
4
+ module Help
5
+ def help
6
+ <<~HEREDOC
7
+ Usage:
8
+ meroku command subcommand
9
+
10
+ Examples:
11
+ meroku signup # if you havent done already
12
+
13
+ meroku login
14
+
15
+ meroku logout
16
+
17
+ meroku create
18
+
19
+ meroku keys:add
20
+
21
+ meroku infrastrucuture spawn # Spawns server
22
+
23
+ HEREDOC
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,13 @@
1
+ module Meroku
2
+ module CLI
3
+ # Logic related to apiusername, apipassword and the env file
4
+ module Secrets
5
+ def self.load(admin: false)
6
+ return unless admin
7
+ env_file = Dir.home + '/.meroku/meroku.env'
8
+ abort "error: File not found (#{env_file})" unless File.exist?(env_file)
9
+ Dotenv.load(env_file)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,65 +1,46 @@
1
-
2
-
3
1
  module Meroku
4
2
  module CLI
3
+ # A session is what is created when user executes the meroku command
5
4
  class Session
6
5
  include Meroku::CLI
7
- include Meroku::Infrastructure
8
-
9
- attr_accessor :ec2_client, :token
6
+ include Meroku::CLI::Help
7
+
8
+ def initialize(args)
9
+ processed = process_user_login_command(args.join(' ')) ||
10
+ process_user_other_command(args.join(' ')) ||
11
+ process_admin_command(args.join(' '))
12
+ puts "Unknown command #{args.join(' ')}\n\n#{help}" unless processed
13
+ exit 1 unless processed
14
+ end
10
15
 
11
- def initialize(*args)
12
- case args.join(" ")
13
- when "signup"
16
+ def process_user_login_command(arguments)
17
+ case arguments
18
+ when /\Asignup/
14
19
  signup
15
- when "create"
16
- Meroku::CLI::User.load_secrets(self) || exit
17
- create
18
- when "keys:add"
19
- Meroku::CLI::User.load_secrets(self) || exit
20
- keys_add(self)
21
- when "infrastructure spawn"
22
- Meroku::CLI::AdminUser.load_secrets(self) || exit
23
- spawn(self)
24
- when "infrastructure despawn"
25
- Meroku::CLI::AdminUser.load_secrets(self) || exit
26
- despawn
27
- else
28
- puts "Unknown command #{args.join(" ")}\n\n"
29
- puts help
20
+ when 'logout'
21
+ logout
22
+ when 'login'
23
+ login
30
24
  end
31
-
32
-
33
- #case args.join(" ")
34
- # when "infrastructure spawn"
35
- # load_secrets || exit
36
- # node = Meroku::Infrastructure::Node.new.associate_address.install_packages.install_frontend_app
37
- # puts "spawned #{node.instance.try(:instance_id)}"
38
- # when "infrastructure despawn"
39
- # load_secrets || exit
40
- # Meroku::Infrastructure.despawn
41
- # when "signup"
42
- # signup
43
- # when "keys:add"
44
- # token_check || exit
45
- # keys_add
46
- # when "create"
47
- # token_check || exit
48
- # create
49
- # else
50
- # puts HELP
51
- #end
52
25
  end
53
26
 
54
- def ec2_client
55
- @ec2_client ||= ::Aws::EC2::Client.new(
56
- region: 'us-east-1',
57
- credentials: ::Aws::Credentials.new(ENV['AWS_ACCESS_KEY'], ENV['AWS_SECRET'])
58
- )
59
- @ec2_client
27
+ def process_user_other_command(arguments)
28
+ case arguments
29
+ when 'create'
30
+ create
31
+ when 'keys:add'
32
+ keys_add
33
+ end
60
34
  end
61
35
 
36
+ def process_admin_command(arguments)
37
+ case arguments
38
+ when 'infrastructure spawn'
39
+ spawn
40
+ when 'infrastructure despawn'
41
+ despawn
42
+ end
43
+ end
62
44
  end
63
45
  end
64
46
  end
65
-
@@ -0,0 +1,32 @@
1
+ module Meroku
2
+ # Has methods that are similar to but extended versions
3
+ # of core ruby methods
4
+ module Extensions
5
+ # Get multipe inputs from user
6
+ # Masks passwords if detected
7
+ # Bypasses prompt when ENV variables present
8
+ def self.mgets(names)
9
+ names.map do |name|
10
+ sgets(name)
11
+ end
12
+ end
13
+
14
+ # single gets
15
+ def self.sgets(name)
16
+ print "#{name.to_s.capitalize}: "
17
+ return env_sgets(name) if ENV['MEROKU_' + name.to_s.upcase]
18
+ return secure_sgets if name.match?(/password/)
19
+ STDIN.gets.chomp
20
+ end
21
+
22
+ # get from env variable
23
+ def self.env_sgets(name)
24
+ ENV['MEROKU_' + name.to_s.upcase]
25
+ end
26
+
27
+ # secure gets from stdin
28
+ def self.secure_sgets
29
+ STDIN.noecho(&:gets).chomp
30
+ end
31
+ end
32
+ end
@@ -1,26 +1,23 @@
1
- require "meroku/infrastructure/node"
1
+ require 'meroku/infrastructure/server'
2
2
 
3
3
  module Meroku
4
+ # Logic related to the infratructure that powers meroku
4
5
  module Infrastructure
6
+ extend Meroku::Aws::Ec2
5
7
 
6
- def spawn(session)
7
- node = Meroku::Infrastructure::Node.new(session.ec2_client)
8
- node.associate_address
9
- node.install_packages
10
- node.tweak_configuration
11
- node.install_frontend_app
12
- puts "spawned #{node.instance.try(:instance_id)}"
8
+ def self.servers
9
+ ec2_client.describe_instances(
10
+ filters: [
11
+ { name: 'tag:Name', values: ['node'] },
12
+ { name: 'instance-state-name', values: %w[running pending] }
13
+ ]
14
+ ).reservations.map do |xx|
15
+ Meroku::Infrastructure::Server.new(xx.instances.first.instance_id)
16
+ end
13
17
  end
14
18
 
15
- def despawn
16
- instances = ec2_client.describe_instances(filters:[{ name: "tag:Name", values: ['node'] }, { name: 'instance-state-name', values: ['running','pending'] }]).reservations.map { |xx| xx.instances.first.instance_id }
17
- puts "will despawn #{instances.inspect}"
18
- ec2_client.terminate_instances({
19
- instance_ids: instances
20
- }) if instances.size > 0
19
+ def self.each_server
20
+ servers.each { |s| yield s }
21
21
  end
22
-
23
-
24
22
  end
25
-
26
23
  end
@@ -0,0 +1,20 @@
1
+ module Meroku
2
+ module Infrastructure
3
+ # A server hosts the api (called during signup, login, etc)
4
+ # and atm also hosts end users applications
5
+ class Server
6
+ include Meroku::Aws::Ec2
7
+
8
+ attr_reader :instance_id
9
+
10
+ def initialize(instance_id)
11
+ @instance_id = instance_id
12
+ end
13
+
14
+ def shutdown
15
+ puts "Will terminate #{@instance_id}"
16
+ ec2_client.terminate_instances(instance_ids: [@instance_id])
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,113 @@
1
+ module Meroku
2
+ # At the moment we run on one ec2 node
3
+ # This class represents that node
4
+ class Node
5
+ include Meroku::Aws::Ec2
6
+ include Meroku::Tunnelable
7
+
8
+ def initialize
9
+ puts "run_instances()"
10
+ @instance = make_instance
11
+ @tunnel_ip = Meroku::Aws::IP
12
+ @tunnel_username = "ubuntu"
13
+ @tunnel_password = "password"
14
+ @tunnel_key_name = Meroku::Aws::KEY_NAME
15
+ print "sleep "
16
+ 30.times { print sleep(1) }
17
+ print "\n"
18
+ end
19
+
20
+ def associate_address
21
+ ip = "eipalloc-139f7823"
22
+ Meroku::Aws::Ec2.associate_address(ip, @instance.instance_id)
23
+ self
24
+ end
25
+
26
+ def configure_keys
27
+ str = <<~HEREDOC
28
+ mkdir /home/ubuntu/.meroku
29
+ sudo curl -s -o /etc/ssh/ssh_host_ecdsa_key #{Meroku::Aws.bucket_url}/ssh_host_ecdsa_key
30
+ sudo curl -s -o /etc/ssh/ssh_host_ecdsa_key.pub #{Meroku::Aws.bucket_url}/ssh_host_ecdsa_key.pub
31
+ curl -s -o /home/ubuntu/.meroku/letsencrypt_fullchain.pem #{Meroku::Aws.bucket_url}/letsencrypt_fullchain.pem
32
+ curl -s -o /home/ubuntu/.meroku/letsencrypt_privkey.pem #{Meroku::Aws.bucket_url}/letsencrypt_privkey.pem
33
+ curl -s https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
34
+ HEREDOC
35
+ str.split("\n").each { |cmd| tunnel_run(cmd) }
36
+ self
37
+ end
38
+
39
+ def add_sources
40
+ str = <<~HEREDOC
41
+ echo "Dpkg::Use-Pty "0";" | sudo tee /etc/apt/apt.conf.d/00usepty
42
+ sudo apt-add-repository ppa:brightbox/ruby-ng --yes 2>/dev/null >/dev/null
43
+ echo "deb http://archive.ubuntu.com/ubuntu/ trusty main universe" | sudo tee -a /etc/apt/sources.list
44
+ echo "deb http://archive.ubuntu.com/ubuntu/ trusty-security main universe" | sudo tee -a /etc/apt/sources.list
45
+ echo "deb http://archive.ubuntu.com/ubuntu/ trusty-updates main universe" | sudo tee -a /etc/apt/sources.list
46
+ echo "deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main" | sudo tee -a /etc/apt/sources.list
47
+ HEREDOC
48
+ str.split("\n").each { |cmd| tunnel_run(cmd) }
49
+ self
50
+ end
51
+
52
+ def ubuntu_updates
53
+ str = <<~HEREDOC
54
+ DEBIAN_FRONTEND=noninteractive sudo apt-get update -qq
55
+ DEBIAN_FRONTEND=noninteractive sudo apt-get upgrade -yqq --force-yes 2>/dev/null >/dev/null
56
+ HEREDOC
57
+ str.split("\n").each { |cmd| tunnel_run(cmd) }
58
+ self
59
+ end
60
+
61
+ def install_packages
62
+ str = <<~HEREDOC
63
+ DEBIAN_PRIORITY=critical DEBIAN_FRONTEND=noninteractive sudo apt-get install -q -y -o "Dpkg::Options::=--force-confdef" -o "Dpkg::Options::=--force-confold" autoconf bind9-host bison build-essential coreutils curl daemontools dnsutils ed git imagemagick iputils-tracepath language-pack-en libbz2-dev libcurl4-openssl-dev libev-dev libevent-dev libglib2.0-dev libjpeg-dev libmagickwand-dev libmysqlclient-dev libncurses5-dev librdkafka-dev libreadline6-dev libssl-dev libuv-dev libxml2-dev libxslt-dev netcat-openbsd openjdk-7-jdk openjdk-7-jre-headless openssh-client openssh-server python python-dev socat stunnel syslinux tar telnet zip zlib1g-dev ruby2.4 ruby2.4-dev nginx libsqlite3-dev nodejs libpq-dev postgresql-9.6 2>/dev/null >/dev/null
64
+ HEREDOC
65
+ str.split("\n").each { |cmd| tunnel_run(cmd) }
66
+ self
67
+ end
68
+
69
+ def database_inits
70
+ str = <<~HEREDOC
71
+ sudo -u postgres createuser -e meroku
72
+ sudo -u postgres createdb meroku
73
+ sudo -u postgres psql -c "ALTER ROLE meroku WITH PASSWORD '#{ENV['SECRET']}';"
74
+ sudo perl -pi -e "s#local.*all.*all.*peer#local all all md5#" /etc/postgresql/9.6/main/pg_hba.conf
75
+ sudo service postgresql restart
76
+ HEREDOC
77
+ str.split("\n").each { |cmd| tunnel_run(cmd) }
78
+ self
79
+ end
80
+
81
+ def git_clone
82
+ str = <<~HEREDOC
83
+ cd ~; git clone https://github.com/oystersauce8/meroku;
84
+ HEREDOC
85
+ str.split("\n").each { |cmd| tunnel_run(cmd) }
86
+ self
87
+ end
88
+
89
+ def nginx_configs
90
+ str = <<~HEREDOC
91
+ sudo rm -f /etc/nginx/sites-enabled/* /etc/nginx/sites-available/*
92
+ sudo cp ~/meroku/frontend/etc_nginx_sites-enabled_default /etc/nginx/sites-enabled/default
93
+ sudo mkdir /sharedro && sudo chmod 777 /sharedro
94
+ sudo cp /home/ubuntu/meroku/frontend/etc_nginx_sites-enabled_template /sharedro
95
+ sudo chmod a+r /sharedro/etc_nginx_sites-enabled_template
96
+ HEREDOC
97
+ str.split("\n").each { |cmd| tunnel_run(cmd) }
98
+ self
99
+ end
100
+
101
+ def start_rails
102
+ str = <<~HEREDOC
103
+ cd ~/meroku/frontend; sudo gem install bundler; bundle;
104
+ cd ~/meroku/frontend; SECRET=#{ENV['SECRET']} RAILS_ENV=production bundle exec rails assets:precompile
105
+ cd ~/meroku/frontend; SECRET=#{ENV['SECRET']} RAILS_ENV=production bundle exec rake db:migrate
106
+ cd ~/meroku/frontend; SECRET=#{ENV['SECRET']} bundle exec puma -d -b unix:///home/ubuntu/meroku.sock
107
+ sudo /usr/sbin/nginx -s reload
108
+ HEREDOC
109
+ str.split("\n").each { |cmd| tunnel_run(cmd) }
110
+ self
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,31 @@
1
+ module Meroku
2
+ # Gives object the ability to execute bash commands on itself via ssh
3
+ module Tunnelable
4
+ # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
5
+ def tunnel_run(cmd)
6
+ retries = 0
7
+ begin
8
+ code = nil
9
+ Net::SSH.start(@tunnel_ip,
10
+ @tunnel_username,
11
+ keys: @tunnel_key_name,
12
+ verify_host_key: false) do |ssh|
13
+ ssh.open_channel do |channel|
14
+ puts cmd
15
+ channel.exec cmd do |ch, success|
16
+ raise "could not execute command" unless success
17
+ ch.on_data { |_c, data| print data }
18
+ ch.on_extended_data { |_c, _type, data| print data }
19
+ ch.on_request("exit-status") { |_ch, data| code = data.read_long }
20
+ end
21
+ end.wait
22
+ end
23
+ abort "#{cmd} returned #{code} !!" if code != 0
24
+ rescue Net::SSH::ConnectionTimeout
25
+ puts "Net::SSH::ConnectionTimeout" && retry if (retries += 1) < 3
26
+ rescue Errno::ECONNREFUSED
27
+ puts "Net::SSH::ConnectionTimeout" && retry if (retries += 1) < 3
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,3 +1,3 @@
1
1
  module Meroku
2
- VERSION = "2.0.8"
2
+ VERSION = "2.0.9"
3
3
  end
data/modified-cedar-14.sh CHANGED
@@ -106,8 +106,6 @@ apt-get install -y --force-yes \
106
106
  libmagickwand-dev \
107
107
  libmysqlclient-dev \
108
108
  libncurses5-dev \
109
- libpq-dev \
110
- libpq5 \
111
109
  librdkafka-dev \
112
110
  libreadline6-dev \
113
111
  libssl-dev \
@@ -119,8 +117,6 @@ apt-get install -y --force-yes \
119
117
  openjdk-7-jre-headless \
120
118
  openssh-client \
121
119
  openssh-server \
122
- postgresql-client-9.6 \
123
- postgresql-server-dev-9.6 \
124
120
  python \
125
121
  python-dev \
126
122
  socat \
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: meroku
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.8
4
+ version: 2.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Weerasinghe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-27 00:00:00.000000000 Z
11
+ date: 2017-11-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: escape
@@ -242,6 +242,7 @@ files:
242
242
  - bin/console
243
243
  - bin/meroku
244
244
  - bin/setup
245
+ - circle.yml
245
246
  - exe/meroku
246
247
  - frontend/.gitignore
247
248
  - frontend/.ruby-version
@@ -267,7 +268,6 @@ files:
267
268
  - frontend/app/controllers/application_controller.rb
268
269
  - frontend/app/controllers/apps_controller.rb
269
270
  - frontend/app/controllers/concerns/.keep
270
- - frontend/app/controllers/pages_controller.rb
271
271
  - frontend/app/controllers/publickeys_controller.rb
272
272
  - frontend/app/controllers/users/confirmations_controller.rb
273
273
  - frontend/app/controllers/users/omniauth_callbacks_controller.rb
@@ -280,12 +280,15 @@ files:
280
280
  - frontend/app/helpers/pages_helper.rb
281
281
  - frontend/app/helpers/publickeys_helper.rb
282
282
  - frontend/app/jobs/application_job.rb
283
+ - frontend/app/lib/cmd.rb
283
284
  - frontend/app/mailers/application_mailer.rb
284
285
  - frontend/app/models/app.rb
285
286
  - frontend/app/models/application_record.rb
286
287
  - frontend/app/models/concerns/.keep
287
288
  - frontend/app/models/publickey.rb
288
289
  - frontend/app/models/user.rb
290
+ - frontend/app/policies/application_policy.rb
291
+ - frontend/app/policies/publickey_policy.rb
289
292
  - frontend/app/serializable/serializable_app.rb
290
293
  - frontend/app/serializable/serializable_publickey.rb
291
294
  - frontend/app/serializable/serializable_user.rb
@@ -315,7 +318,6 @@ files:
315
318
  - frontend/app/views/layouts/application.html.erb
316
319
  - frontend/app/views/layouts/mailer.html.erb
317
320
  - frontend/app/views/layouts/mailer.text.erb
318
- - frontend/app/views/pages/landing.html.erb
319
321
  - frontend/app/views/publickeys/_form.html.erb
320
322
  - frontend/app/views/publickeys/_publickey.json.jbuilder
321
323
  - frontend/app/views/publickeys/edit.html.erb
@@ -357,10 +359,10 @@ files:
357
359
  - frontend/config/secrets.yml
358
360
  - frontend/config/spring.rb
359
361
  - frontend/db/migrate/20171023223732_devise_create_users.rb
360
- - frontend/db/migrate/20171025193627_add_token_to_users.rb
361
362
  - frontend/db/migrate/20171025203706_create_apps.rb
362
363
  - frontend/db/migrate/20171025223804_add_user_to_apps.rb
363
364
  - frontend/db/migrate/20171026071440_create_publickeys.rb
365
+ - frontend/db/migrate/20171028150506_add_apisecret_to_users.rb
364
366
  - frontend/db/schema.rb
365
367
  - frontend/db/seeds.rb
366
368
  - frontend/etc_nginx_sites-enabled_default
@@ -372,10 +374,42 @@ files:
372
374
  - frontend/public/404.html
373
375
  - frontend/public/422.html
374
376
  - frontend/public/500.html
377
+ - frontend/public/Meroku.html
378
+ - frontend/public/Meroku/Api.html
379
+ - frontend/public/Meroku/Api/Request.html
380
+ - frontend/public/Meroku/Aws.html
381
+ - frontend/public/Meroku/Aws/Ec2.html
382
+ - frontend/public/Meroku/CLI.html
383
+ - frontend/public/Meroku/CLI/AdminUser.html
384
+ - frontend/public/Meroku/CLI/Help.html
385
+ - frontend/public/Meroku/CLI/Secrets.html
386
+ - frontend/public/Meroku/CLI/Session.html
387
+ - frontend/public/Meroku/CLI/User.html
388
+ - frontend/public/Meroku/Extensions.html
389
+ - frontend/public/Meroku/Infrastructure.html
390
+ - frontend/public/Meroku/Infrastructure/Node.html
391
+ - frontend/public/Meroku/Infrastructure/Server.html
392
+ - frontend/public/Meroku/Node.html
393
+ - frontend/public/Meroku/Tunnel.html
394
+ - frontend/public/Meroku/Tunnelable.html
395
+ - frontend/public/_index.html
375
396
  - frontend/public/apple-touch-icon-precomposed.png
376
397
  - frontend/public/apple-touch-icon.png
398
+ - frontend/public/class_list.html
399
+ - frontend/public/css/common.css
400
+ - frontend/public/css/full_list.css
401
+ - frontend/public/css/style.css
377
402
  - frontend/public/favicon.ico
403
+ - frontend/public/file.README.html
404
+ - frontend/public/file_list.html
405
+ - frontend/public/frames.html
406
+ - frontend/public/index.html
407
+ - frontend/public/js/app.js
408
+ - frontend/public/js/full_list.js
409
+ - frontend/public/js/jquery.js
410
+ - frontend/public/method_list.html
378
411
  - frontend/public/robots.txt
412
+ - frontend/public/top-level-namespace.html
379
413
  - frontend/test/application_system_test_case.rb
380
414
  - frontend/test/controllers/.keep
381
415
  - frontend/test/controllers/apps_controller_test.rb
@@ -393,6 +427,7 @@ files:
393
427
  - frontend/test/models/app_test.rb
394
428
  - frontend/test/models/publickey_test.rb
395
429
  - frontend/test/models/user_test.rb
430
+ - frontend/test/policies/publickey_policy_test.rb
396
431
  - frontend/test/system/.keep
397
432
  - frontend/test/system/apps_test.rb
398
433
  - frontend/test/system/publickeys_test.rb
@@ -400,13 +435,19 @@ files:
400
435
  - frontend/tmp/.keep
401
436
  - frontend/vendor/.keep
402
437
  - lib/meroku.rb
438
+ - lib/meroku/api.rb
439
+ - lib/meroku/api/request.rb
440
+ - lib/meroku/aws.rb
441
+ - lib/meroku/aws/ec2.rb
403
442
  - lib/meroku/cli.rb
404
- - lib/meroku/cli/admin_user.rb
443
+ - lib/meroku/cli/help.rb
444
+ - lib/meroku/cli/secrets.rb
405
445
  - lib/meroku/cli/session.rb
406
- - lib/meroku/cli/user.rb
446
+ - lib/meroku/extensions.rb
407
447
  - lib/meroku/infrastructure.rb
408
- - lib/meroku/infrastructure/node.rb
409
- - lib/meroku/tunnel.rb
448
+ - lib/meroku/infrastructure/server.rb
449
+ - lib/meroku/node.rb
450
+ - lib/meroku/tunnelable.rb
410
451
  - lib/meroku/version.rb
411
452
  - meroku.gemspec
412
453
  - modified-cedar-14.sh