meroku 2.0.8 → 2.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +9 -5
- data/bin/meroku +1 -1
- data/circle.yml +23 -0
- data/frontend/Gemfile +5 -2
- data/frontend/Gemfile.lock +5 -2
- data/frontend/app/controllers/application_controller.rb +1 -0
- data/frontend/app/controllers/apps_controller.rb +46 -48
- data/frontend/app/controllers/publickeys_controller.rb +45 -46
- data/frontend/app/controllers/users/registrations_controller.rb +0 -15
- data/frontend/app/controllers/users/sessions_controller.rb +12 -3
- data/frontend/app/lib/cmd.rb +11 -0
- data/frontend/app/models/app.rb +18 -11
- data/frontend/app/models/publickey.rb +1 -1
- data/frontend/app/models/user.rb +5 -4
- data/frontend/app/policies/application_policy.rb +53 -0
- data/frontend/app/policies/publickey_policy.rb +7 -0
- data/frontend/app/serializable/serializable_user.rb +2 -1
- data/frontend/app/views/layouts/application.html.erb +1 -1
- data/frontend/config/database.yml +72 -10
- data/frontend/config/routes.rb +6 -14
- data/frontend/db/migrate/20171028150506_add_apisecret_to_users.rb +6 -0
- data/frontend/etc_nginx_sites-enabled_default +1 -1
- data/frontend/public/Meroku.html +140 -0
- data/frontend/public/Meroku/Api.html +129 -0
- data/frontend/public/Meroku/Api/Request.html +221 -0
- data/frontend/public/Meroku/Aws.html +212 -0
- data/frontend/public/Meroku/Aws/Ec2.html +477 -0
- data/frontend/public/Meroku/CLI.html +784 -0
- data/frontend/public/Meroku/CLI/AdminUser.html +192 -0
- data/frontend/public/Meroku/CLI/Help.html +224 -0
- data/frontend/public/Meroku/CLI/Secrets.html +191 -0
- data/frontend/public/Meroku/CLI/Session.html +460 -0
- data/frontend/public/Meroku/CLI/User.html +182 -0
- data/frontend/public/Meroku/Extensions.html +405 -0
- data/frontend/public/Meroku/Infrastructure.html +279 -0
- data/frontend/public/Meroku/Infrastructure/Node.html +785 -0
- data/frontend/public/Meroku/Infrastructure/Server.html +373 -0
- data/frontend/public/Meroku/Node.html +845 -0
- data/frontend/public/Meroku/Tunnel.html +701 -0
- data/frontend/public/Meroku/Tunnelable.html +243 -0
- data/frontend/public/_index.html +273 -0
- data/frontend/public/class_list.html +51 -0
- data/frontend/public/css/common.css +1 -0
- data/frontend/public/css/full_list.css +58 -0
- data/frontend/public/css/style.css +492 -0
- data/frontend/public/file.README.html +181 -0
- data/frontend/public/file_list.html +56 -0
- data/frontend/public/frames.html +17 -0
- data/frontend/public/index.html +181 -0
- data/frontend/public/js/app.js +248 -0
- data/frontend/public/js/full_list.js +216 -0
- data/frontend/public/js/jquery.js +4 -0
- data/frontend/public/method_list.html +395 -0
- data/frontend/public/robots.txt +2 -1
- data/frontend/public/top-level-namespace.html +110 -0
- data/frontend/test/policies/publickey_policy_test.rb +19 -0
- data/lib/meroku.rb +9 -7
- data/lib/meroku/api.rb +8 -0
- data/lib/meroku/api/request.rb +17 -0
- data/lib/meroku/aws.rb +14 -0
- data/lib/meroku/aws/ec2.rb +59 -0
- data/lib/meroku/cli.rb +80 -81
- data/lib/meroku/cli/help.rb +27 -0
- data/lib/meroku/cli/secrets.rb +13 -0
- data/lib/meroku/cli/session.rb +32 -51
- data/lib/meroku/extensions.rb +32 -0
- data/lib/meroku/infrastructure.rb +14 -17
- data/lib/meroku/infrastructure/server.rb +20 -0
- data/lib/meroku/node.rb +113 -0
- data/lib/meroku/tunnelable.rb +31 -0
- data/lib/meroku/version.rb +1 -1
- data/modified-cedar-14.sh +0 -4
- metadata +50 -9
- data/frontend/app/controllers/pages_controller.rb +0 -4
- data/frontend/app/views/pages/landing.html.erb +0 -2
- data/frontend/db/migrate/20171025193627_add_token_to_users.rb +0 -5
- data/lib/meroku/cli/admin_user.rb +0 -20
- data/lib/meroku/cli/user.rb +0 -14
- data/lib/meroku/infrastructure/node.rb +0 -102
- 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
|
data/lib/meroku/cli/session.rb
CHANGED
@@ -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::
|
8
|
-
|
9
|
-
|
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
|
12
|
-
case
|
13
|
-
when
|
16
|
+
def process_user_login_command(arguments)
|
17
|
+
case arguments
|
18
|
+
when /\Asignup/
|
14
19
|
signup
|
15
|
-
when
|
16
|
-
|
17
|
-
|
18
|
-
|
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
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
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
|
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
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
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
|
16
|
-
|
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
|
data/lib/meroku/node.rb
ADDED
@@ -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
|
data/lib/meroku/version.rb
CHANGED
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.
|
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-
|
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/
|
443
|
+
- lib/meroku/cli/help.rb
|
444
|
+
- lib/meroku/cli/secrets.rb
|
405
445
|
- lib/meroku/cli/session.rb
|
406
|
-
- lib/meroku/
|
446
|
+
- lib/meroku/extensions.rb
|
407
447
|
- lib/meroku/infrastructure.rb
|
408
|
-
- lib/meroku/infrastructure/
|
409
|
-
- lib/meroku/
|
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
|