vps_cli 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/.travis.yml +7 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +62 -0
- data/LICENSE.txt +21 -0
- data/README.md +72 -0
- data/Rakefile +20 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/bin/vps-cli +6 -0
- data/example_credentials.yaml +39 -0
- data/exe/vps-cli +6 -0
- data/lib/vps_cli/access.rb +176 -0
- data/lib/vps_cli/cli.rb +99 -0
- data/lib/vps_cli/configuration.rb +78 -0
- data/lib/vps_cli/configurations/default_configuration.rb +44 -0
- data/lib/vps_cli/configurations/testing_configuration.rb +25 -0
- data/lib/vps_cli/copy.rb +146 -0
- data/lib/vps_cli/helpers/access_helper.rb +132 -0
- data/lib/vps_cli/helpers/file_helper.rb +146 -0
- data/lib/vps_cli/helpers/github_http.rb +107 -0
- data/lib/vps_cli/install.rb +137 -0
- data/lib/vps_cli/packages.rb +22 -0
- data/lib/vps_cli/pull.rb +110 -0
- data/lib/vps_cli/setup.rb +105 -0
- data/lib/vps_cli/version.rb +3 -0
- data/lib/vps_cli.rb +90 -0
- data/sops_testing_key.asc +125 -0
- data/unencrypted_example_credentials.yaml +19 -0
- data/vps_cli.gemspec +46 -0
- metadata +176 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: a0e19909989845fd3c3a95b31f5f025d8f47369c17a0ad1f9b7b8d8ba79d1b37
|
4
|
+
data.tar.gz: f889b50b324d113cd785dae1e9c5c3768ab12984fce81796d362a398dd9abf34
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ed9fc281ebb3054329678be63293a8c21486dac410579d51605851fbb5dc071d984f15e9548355983aa87cb69efc4d0984cfa2848b27db1307ba50d5d87866c0
|
7
|
+
data.tar.gz: 37746dfe75d5275ad634e534742d4e3459ba80fb794a285d6be330dfacdfc84df12add713f9768822ca5f65536878e6ea69c1d9bbc0e101a821e4571b2cea179
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
vps_cli (0.1.4)
|
5
|
+
thor (~> 0.20)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
coderay (1.1.2)
|
11
|
+
ffi (1.10.0)
|
12
|
+
formatador (0.2.5)
|
13
|
+
guard (2.15.0)
|
14
|
+
formatador (>= 0.2.4)
|
15
|
+
listen (>= 2.7, < 4.0)
|
16
|
+
lumberjack (>= 1.0.12, < 2.0)
|
17
|
+
nenv (~> 0.1)
|
18
|
+
notiffany (~> 0.0)
|
19
|
+
pry (>= 0.9.12)
|
20
|
+
shellany (~> 0.0)
|
21
|
+
thor (>= 0.18.1)
|
22
|
+
guard-compat (1.2.1)
|
23
|
+
guard-minitest (2.4.6)
|
24
|
+
guard-compat (~> 1.2)
|
25
|
+
minitest (>= 3.0)
|
26
|
+
listen (3.1.5)
|
27
|
+
rb-fsevent (~> 0.9, >= 0.9.4)
|
28
|
+
rb-inotify (~> 0.9, >= 0.9.7)
|
29
|
+
ruby_dep (~> 1.2)
|
30
|
+
lumberjack (1.0.13)
|
31
|
+
method_source (0.9.2)
|
32
|
+
minitest (5.11.3)
|
33
|
+
nenv (0.3.0)
|
34
|
+
notiffany (0.1.1)
|
35
|
+
nenv (~> 0.1)
|
36
|
+
shellany (~> 0.0)
|
37
|
+
pry (0.12.2)
|
38
|
+
coderay (~> 1.1.0)
|
39
|
+
method_source (~> 0.9.0)
|
40
|
+
rake (10.5.0)
|
41
|
+
rb-fsevent (0.10.3)
|
42
|
+
rb-inotify (0.10.0)
|
43
|
+
ffi (~> 1.0)
|
44
|
+
ruby_dep (1.5.0)
|
45
|
+
shellany (0.0.1)
|
46
|
+
thor (0.20.3)
|
47
|
+
yard (0.9.19)
|
48
|
+
|
49
|
+
PLATFORMS
|
50
|
+
ruby
|
51
|
+
|
52
|
+
DEPENDENCIES
|
53
|
+
bundler (~> 2.0)
|
54
|
+
guard (~> 2.15)
|
55
|
+
guard-minitest (~> 2.4)
|
56
|
+
minitest (~> 5.0)
|
57
|
+
rake (~> 10.0)
|
58
|
+
vps_cli!
|
59
|
+
yard (~> 0.9)
|
60
|
+
|
61
|
+
BUNDLED WITH
|
62
|
+
2.0.1
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2019 paramagicdev
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
# VpsCli
|
2
|
+
|
3
|
+
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/vps_cli`. To experiment with that code, run `bin/console` for an interactive prompt.
|
4
|
+
|
5
|
+
This gem is currently unfinished and purely for my own personal use.
|
6
|
+
This project of pulling and pushing dotfiles as well as performing installations
|
7
|
+
etc has taken many iterations and this is its 3rd iteration
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
gem 'vps_cli', git: 'https://github.com/ParamagicDev/vps_cli'
|
15
|
+
```
|
16
|
+
|
17
|
+
And then execute:
|
18
|
+
|
19
|
+
$ bundle
|
20
|
+
|
21
|
+
Or install it yourself as:
|
22
|
+
|
23
|
+
$ gem install vps_cli
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
This is a personal gem intended to help keep dotfiles the and packages
|
28
|
+
the same across installations
|
29
|
+
|
30
|
+
General usage is as follows:
|
31
|
+
|
32
|
+
```bash
|
33
|
+
vps-cli init
|
34
|
+
```
|
35
|
+
|
36
|
+
This will create a .vps_cli file in your home folder.
|
37
|
+
|
38
|
+
You should check out the contents of this file because this will provide
|
39
|
+
the defaults used for configuration
|
40
|
+
|
41
|
+
This opens up further commands like:
|
42
|
+
|
43
|
+
```bash
|
44
|
+
vps-cli pull
|
45
|
+
# pulls in all the dotfiles to your specified dotfiles and misc_files
|
46
|
+
|
47
|
+
vps-cli copy
|
48
|
+
# copies all the dotfiles and misc files to your specified local_dir
|
49
|
+
|
50
|
+
vps-cli git_pull
|
51
|
+
# pulls in changes to your config_files directory
|
52
|
+
|
53
|
+
vps-cli git_push
|
54
|
+
# pushes changes in your config_files directory
|
55
|
+
|
56
|
+
vps-cli
|
57
|
+
# will list all available commands
|
58
|
+
```
|
59
|
+
|
60
|
+
## Development
|
61
|
+
|
62
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
63
|
+
|
64
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
65
|
+
|
66
|
+
## Contributing
|
67
|
+
|
68
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/vps_cli.
|
69
|
+
|
70
|
+
## License
|
71
|
+
|
72
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bundler/gem_tasks'
|
4
|
+
require 'rake/testtask'
|
5
|
+
|
6
|
+
Rake::TestTask.new(:test_task) do |t|
|
7
|
+
t.libs << 'test'
|
8
|
+
t.libs << 'lib'
|
9
|
+
t.test_files = FileList['test/**/*_test.rb']
|
10
|
+
end
|
11
|
+
|
12
|
+
task :import_pgp_key do
|
13
|
+
puts "Importing sops_testing_keys.asc...\n\n"
|
14
|
+
sh('gpg -q --import sops_testing_key.asc')
|
15
|
+
puts ""
|
16
|
+
end
|
17
|
+
|
18
|
+
task test: %i[import_pgp_key test_task]
|
19
|
+
|
20
|
+
task default: :test
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "vps_cli"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
data/bin/vps-cli
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
github:
|
2
|
+
username: ENC[AES256_GCM,data:QWu5q5V41jA=,iv:mSGsgJqA8umM3Iov5jEmdtlCoqi1G2HZqkAtyvMnra4=,tag:YdgUYCnGkQaN7L7P1bb5BA==,type:str]
|
3
|
+
email: ENC[AES256_GCM,data:D56889RUJ6PyZXWXYtZceAM=,iv:pq0NGFRlTBurjL+PNJNgAgTqMOLLHzWKH9XYi76Tjd0=,tag:qin+BiG5jo8ifcdfw8BIoQ==,type:str]
|
4
|
+
api_token: ENC[AES256_GCM,data:fM3gSjIWDxq/PJ6wB9N0DmiA,iv:cFKlhPc41wa9EXXdcoyjR6F3kKHqBGnT5G7r8sZBrG8=,tag:SleMk4xyZEa5EhAxu6i/qQ==,type:str]
|
5
|
+
heroku_unencrypted:
|
6
|
+
- The values of heroku can be obtained from $HOME/.netrc
|
7
|
+
- If you have logged in via the following commands before
|
8
|
+
- heroku login or heroku login --interactive
|
9
|
+
heroku:
|
10
|
+
api:
|
11
|
+
machine: ENC[AES256_GCM,data:5YPhnneMN0Tz8dOmgQW5IIXqwYrrxA==,iv:lc98tNybmTwn8wvTi2zLBUkiUFQvv5cfX6QQFq3GDgA=,tag:xv/kvlO3n46fyX63/94mkg==,type:str]
|
12
|
+
login: ENC[AES256_GCM,data:uD352OlvbHBAdSWdYPoyFQN2Cbvn,iv:JoR8WUjMdeTfgwOoXCFv/hOJjZE17xwez8bWoeenUj0=,tag:Tj8zqaNVVxjSecDO4wdY7A==,type:str]
|
13
|
+
password: ENC[AES256_GCM,data:gnt+Ku6RhluVhVMlOTXYUQhDLv8x,iv:BchO+5RYoM6yNPJ5jWr6Dcb3nOykH3gUlenuBWy0Niw=,tag:0CFEVfcLIvzE6U3mWcQn/w==,type:str]
|
14
|
+
git:
|
15
|
+
machine: ENC[AES256_GCM,data:VUmZZfRYBzf5VTavYYzBUVuO5sB9/g==,iv:JZ/GMiNryOvBYmNBsSXFyc3+Y/Z3TlJHuVFkvmr+BIA=,tag:+XbC5wVlAhk38+H0xCMM2Q==,type:str]
|
16
|
+
login: ENC[AES256_GCM,data:qbomNJOdE42zEyqQvLRqyitC4kOh,iv:HkcpOWED3ygKsJ1N5//Lhj/DI59MW4QCIOTuXuz7xMk=,tag:rCKVGETjVNdvdq4makkGFg==,type:str]
|
17
|
+
password: ENC[AES256_GCM,data:jjif+u2jccL1LY6zvMnPJ6eokTtjbCAhTns=,iv:2HFpvGoa9kghMnrnUWa2gkZXT7Nzrbk6Cq1c2Ac2tRo=,tag:ZouL+57G/mL4HFCoNI8uSA==,type:str]
|
18
|
+
sops:
|
19
|
+
kms: []
|
20
|
+
gcp_kms: []
|
21
|
+
azure_kv: []
|
22
|
+
lastmodified: '2019-04-04T08:15:58Z'
|
23
|
+
mac: ENC[AES256_GCM,data:+SOfo1TYp88Kv7HODrSUkkja7iR0TIdiI+BxQERax5Iw+wrYhrkpcauESvPktWzNAFSNLCLF39JjkN3MsGsq5UcCzv8PoYCXRlbJDagxiH1UWdIniQAaYS96GBqE195QSm8rZbWzRO1TKckMrvBZ8RrYaH889NtqzWt9TDUoCjw=,iv:zvPGaOyrFtXm0x0VaLvOlMZOAGA2JmRuaktfB3vxFus=,tag:sJUU5aSS8ATVf2pGstQ8Ng==,type:str]
|
24
|
+
pgp:
|
25
|
+
- created_at: '2019-04-04T08:10:01Z'
|
26
|
+
enc: |-
|
27
|
+
-----BEGIN PGP MESSAGE-----
|
28
|
+
|
29
|
+
wYwDEEVDpnzXnMABBACHm3C+7xuMCAgWTim8tCwWY/RyNjk3NsOiJSj9XQ1VuI7/
|
30
|
+
3RKOY++j3MR6vHb2LdHsUDHr3+WyKq+uJqX6D600v4ghu/8tDoV03ozqtmucFcW4
|
31
|
+
YIv/iS4xlaGRjAMzjvGZpOGdoT68QZd61GIca4JwqShWg9sN/GCAvhKw/Q1RA9Lg
|
32
|
+
AeT0ZQDWQ+jhNLYLEf4SOCwN4V9i4G7g8OFFgeAh4hC19QLg0OWlgkIUlR8Vhl2T
|
33
|
+
qfIyGtIwAPneQviEqvcZ+ySRGaZ3SeCO5CHU4/p7vzfb/RqNEyBT1/Li9QPiy+Gm
|
34
|
+
oQA=
|
35
|
+
=AE0i
|
36
|
+
-----END PGP MESSAGE-----
|
37
|
+
fp: 1022470DE3F0BC54BC6AB62DE05550BC07FB1A0A
|
38
|
+
unencrypted_suffix: _unencrypted
|
39
|
+
version: 3.2.0
|
data/exe/vps-cli
ADDED
@@ -0,0 +1,176 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @see https://ruby-doc.org/stdlib-2.6.0.preview2/libdoc/open3/rdoc/Open3.html
|
4
|
+
require 'open3'
|
5
|
+
require 'json'
|
6
|
+
require 'vps_cli/helpers/access_helper'
|
7
|
+
require 'vps_cli/helpers/github_http'
|
8
|
+
|
9
|
+
module VpsCli
|
10
|
+
# Used for various things related to logins, ssh keys, etc
|
11
|
+
class Access
|
12
|
+
extend AccessHelper
|
13
|
+
# logs into various things either via a .yaml file or via cmd line
|
14
|
+
# Accepts a Configuration object or a hash
|
15
|
+
# @see https://github.com/mozilla/sops
|
16
|
+
# @see VpsCli::Access#decrypt
|
17
|
+
# @see https://github.com/settings/tokens
|
18
|
+
# I prefer to use authentication tokens versus sending
|
19
|
+
# regular access info
|
20
|
+
# @return void
|
21
|
+
|
22
|
+
# fixing to accept a configuration
|
23
|
+
def self.provide_credentials(config = VpsCli.configuration)
|
24
|
+
if File.exist?(config.credentials)
|
25
|
+
file_login(yaml_file: config.credentials, netrc_file: config.netrc)
|
26
|
+
else
|
27
|
+
command_line_login
|
28
|
+
end
|
29
|
+
|
30
|
+
# originally accepts an opts arguemnt
|
31
|
+
generate_ssh_key
|
32
|
+
post_github_ssh_key(config)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Provides all login credentials via a SOPS encrypted yaml file
|
36
|
+
# @param yaml_file [File] File formatted in yaml and encrypted with SOPS
|
37
|
+
# @param netrc_file [File] ($HOME/.netrc) Location of the .netrc for heroku
|
38
|
+
# @return void
|
39
|
+
def self.file_login(yaml_file:, netrc_file: nil)
|
40
|
+
netrc_file ||= File.join(Dir.home, '.netrc')
|
41
|
+
git_file_login(yaml_file: yaml_file)
|
42
|
+
heroku_file_login(yaml_file: yaml_file, netrc_file: netrc_file)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Logs in via the command line if no yaml_file given
|
46
|
+
def self.command_line_login
|
47
|
+
set_git_config
|
48
|
+
heroku_login
|
49
|
+
end
|
50
|
+
|
51
|
+
# Sets the .gitconfig file
|
52
|
+
# @param username [String] Username to set in .gitconfig
|
53
|
+
# @param email [String] email to use for .gitconfig
|
54
|
+
# @return void
|
55
|
+
def self.set_git_config(username = nil, email = nil)
|
56
|
+
puts 'Please enter your git username:'
|
57
|
+
username ||= $stdin.gets.chomp
|
58
|
+
Rake.sh("git config --global user.name #{username}")
|
59
|
+
|
60
|
+
puts 'Please enter your email:'
|
61
|
+
email ||= $stdin.gets.chomp
|
62
|
+
Rake.sh("git config --global user.email #{email}")
|
63
|
+
|
64
|
+
puts "Git config complete.\n"
|
65
|
+
rescue RuntimeError => error
|
66
|
+
msg = 'Something went wrong. Make sure to set your .gitconfig manually'
|
67
|
+
|
68
|
+
VpsCli.errors << error.exception("#{error}\n\n#{msg}")
|
69
|
+
end
|
70
|
+
|
71
|
+
# Command line heroku login
|
72
|
+
# @return void
|
73
|
+
def self.heroku_login
|
74
|
+
puts 'Please login to heroku:'
|
75
|
+
Rake.sh('heroku login --interactive')
|
76
|
+
rescue RuntimeError => error
|
77
|
+
message = "\nUnable not login to heroku. To login, type: 'heroku login'"
|
78
|
+
VpsCli.errors << error.exception("#{error}\n\n#{message}")
|
79
|
+
end
|
80
|
+
|
81
|
+
# Logs into git by setting it in your .gitconfig file
|
82
|
+
# @param yaml_file [File] Sets your git login via the values in your
|
83
|
+
# yaml_file
|
84
|
+
# @return nil
|
85
|
+
def self.git_file_login(yaml_file:)
|
86
|
+
username_key = dig_for_path(:github, :username)
|
87
|
+
email_key = dig_for_path(:github, :email)
|
88
|
+
|
89
|
+
username = decrypt(yaml_file: yaml_file, path: username_key)
|
90
|
+
email = decrypt(yaml_file: yaml_file, path: email_key)
|
91
|
+
|
92
|
+
set_git_config(username, email)
|
93
|
+
end
|
94
|
+
|
95
|
+
# Logs into heroku if given an encrypted yaml_file
|
96
|
+
# @param yaml_file [File] The yaml file to be decrypted
|
97
|
+
# @param netrc_file [File] The netrc file to write to
|
98
|
+
# @return void
|
99
|
+
def self.heroku_file_login(yaml_file:, netrc_file: nil)
|
100
|
+
netrc_file ||= File.join(Dir.home, '.netrc')
|
101
|
+
|
102
|
+
api_string = heroku_api_string(yaml_file: yaml_file)
|
103
|
+
git_string = heroku_git_string(yaml_file: yaml_file)
|
104
|
+
|
105
|
+
netrc_string = api_string + "\n" + git_string
|
106
|
+
|
107
|
+
write_to_netrc(netrc_file: netrc_file, string: netrc_string)
|
108
|
+
end
|
109
|
+
|
110
|
+
# Generates an ssh key with the given values for opts
|
111
|
+
# this has not been extensively tested by myself so proceed with caution
|
112
|
+
# @param opts [Hash] Options hash
|
113
|
+
# @option opts [String] :type ('rsa') What kind of encryption
|
114
|
+
# You want for your ssh key
|
115
|
+
# @option opts [Fixnum] :bits (4096) Strength of encryption
|
116
|
+
# @option opts [String] :email (#get_email) The email comment
|
117
|
+
# to add to the end of the ssh key
|
118
|
+
# @option opts [String, File] :output_file (~/.ssh/id_rsa)
|
119
|
+
# Where you want the key to be saved
|
120
|
+
# @option opts [Boolean] :create_password (nil)
|
121
|
+
# if true, prompt to create a password
|
122
|
+
def self.generate_ssh_key
|
123
|
+
o_file = File.join(Dir.home, '.ssh', 'id_rsa')
|
124
|
+
|
125
|
+
return puts 'ssh key already exists' if File.exist?(o_file)
|
126
|
+
|
127
|
+
type = 'rsa'
|
128
|
+
bits = 4096
|
129
|
+
email = get_email
|
130
|
+
|
131
|
+
no_pass = ' -P ""' unless opts[:create_password]
|
132
|
+
|
133
|
+
# if opts[:create_password] is false, make a blank password
|
134
|
+
# if its true, go through ssh-keygen
|
135
|
+
# this will also autoprompt overwrite as well
|
136
|
+
cmd = "ssh-keygen -t #{type} -b #{bits} -C #{email} -f #{o_file}#{no_pass}"
|
137
|
+
Rake.sh(cmd)
|
138
|
+
end
|
139
|
+
|
140
|
+
# the wrapper around the GithubHTTP class to be able to send the ssh key
|
141
|
+
# @param opts [Hash] Options parameter meant for cli usage
|
142
|
+
# @option opts [String] :uri (URI('https://api.github.com/user/keys'))
|
143
|
+
# url of the api youd like to hit
|
144
|
+
# @option opts [File] :yaml_file (nil) the file to decrypt values with.
|
145
|
+
#
|
146
|
+
def self.post_github_ssh_key(config = VpsCli.configuration)
|
147
|
+
uri = URI('https://api.github.com/user/keys')
|
148
|
+
|
149
|
+
api_token = proc do |yaml, path|
|
150
|
+
decrypt(yaml_file: yaml, path: path)
|
151
|
+
end
|
152
|
+
|
153
|
+
api_path = dig_for_path(:github, :api_token)
|
154
|
+
|
155
|
+
token = api_token.call(config.credentials, api_path)
|
156
|
+
ssh_file = File.join(Dir.home, '.ssh', 'id_rsa.pub')
|
157
|
+
title = get_title
|
158
|
+
|
159
|
+
github = GithubHTTP.new(uri: uri, token: token,
|
160
|
+
ssh_file: ssh_file, title: title)
|
161
|
+
github.push_ssh_key
|
162
|
+
end
|
163
|
+
|
164
|
+
def self.get_email
|
165
|
+
puts "\n"
|
166
|
+
puts 'please enter an email for your ssh key:'
|
167
|
+
$stdin.gets.chomp
|
168
|
+
end
|
169
|
+
|
170
|
+
def self.get_title
|
171
|
+
puts "\n"
|
172
|
+
puts 'please enter a title for your ssh key'
|
173
|
+
$stdin.gets.chomp
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
data/lib/vps_cli/cli.rb
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'thor'
|
4
|
+
require 'open3'
|
5
|
+
|
6
|
+
module VpsCli
|
7
|
+
# The CLI component of this library
|
8
|
+
# Integrates Thor
|
9
|
+
# @see http://whatisthor.com/
|
10
|
+
class Cli < Thor
|
11
|
+
# this is available as a flag for all methods
|
12
|
+
class_option :config, aliases: :c, default: File.join(Dir.home, '.vps_cli')
|
13
|
+
|
14
|
+
desc 'fresh_install', 'accepts no arguments, my own personal command'
|
15
|
+
def fresh_install
|
16
|
+
VpsCli.load_configuration(options[:config])
|
17
|
+
Copy.all
|
18
|
+
Install.all_install
|
19
|
+
|
20
|
+
Access.provide_credentials
|
21
|
+
|
22
|
+
VpsCli.errors.each { |error| puts error.message }
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
desc 'init [-c (File)]', 'Creates a default vps_cli configuration file in the home directory'
|
27
|
+
def init(file = options[:config])
|
28
|
+
VpsCli.create_configuration(file)
|
29
|
+
end
|
30
|
+
|
31
|
+
desc 'install_gems', 'runs gem install on all gems in packages.rb'
|
32
|
+
def install_gems
|
33
|
+
Packages::GEMS.each do |g|
|
34
|
+
Rake.sh("gem install #{g}")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
desc 'copy [OPTIONS]', 'Copies files from <vps_cli/config_files>'
|
39
|
+
def copy
|
40
|
+
VpsCli.load_configuration(options[:config])
|
41
|
+
Copy.all
|
42
|
+
end
|
43
|
+
|
44
|
+
desc 'pull [OPTIONS]', 'Pulls files into your vps_cli repo'
|
45
|
+
options %i[dotfiles_dir misc_files_dir]
|
46
|
+
def pull
|
47
|
+
VpsCli.load_configuration(options[:config])
|
48
|
+
Pull.all
|
49
|
+
end
|
50
|
+
|
51
|
+
desc 'install [OPTIONS]', 'installs based on the flag provided'
|
52
|
+
def install
|
53
|
+
msg = puts 'Only VpsCli::Install#all_install has been implemented'
|
54
|
+
return msg unless options[:all]
|
55
|
+
|
56
|
+
Install.all_install
|
57
|
+
|
58
|
+
return if VpsCli.errors.empty?
|
59
|
+
|
60
|
+
VpsCli.errors.each do |error|
|
61
|
+
if error.responds_to?(:message)
|
62
|
+
puts error.message
|
63
|
+
else
|
64
|
+
puts error
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
desc 'git_pull', 'Automatically pulls in changes in your config_files repo'
|
70
|
+
def git_pull
|
71
|
+
swap_dir { Rake.sh('git pull') }
|
72
|
+
end
|
73
|
+
|
74
|
+
desc 'git_push [message]', 'Automatically pushes changes of your config_files'
|
75
|
+
def git_push(message = nil)
|
76
|
+
|
77
|
+
message ||= "auto push files"
|
78
|
+
|
79
|
+
swap_dir do
|
80
|
+
Rake.sh('git add -A')
|
81
|
+
Rake.sh("git commit -m \"#{message}\"")
|
82
|
+
Rake.sh('git push')
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
desc 'git_status', 'provides the status of your config_files'
|
87
|
+
def git_status
|
88
|
+
swap_dir { Rake.sh('git status') }
|
89
|
+
end
|
90
|
+
|
91
|
+
no_commands do
|
92
|
+
def swap_dir
|
93
|
+
VpsCli.load_configuration(options[:config])
|
94
|
+
Rake.cd(VpsCli.configuration.config_files)
|
95
|
+
yield
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module VpsCli
|
4
|
+
# Used for keeping a consistent config across the entire project
|
5
|
+
class Configuration
|
6
|
+
# local files
|
7
|
+
attr_accessor :local_dir, :backup_dir, :local_sshd_config
|
8
|
+
attr_accessor :sshd_backup
|
9
|
+
|
10
|
+
# configuration files to be used
|
11
|
+
attr_accessor :config_files, :misc_files, :dotfiles
|
12
|
+
attr_accessor :credentials, :netrc
|
13
|
+
|
14
|
+
# used for displaying info
|
15
|
+
attr_accessor :verbose, :interactive, :testing
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
# Values for items to be copied to
|
19
|
+
@local_dir = Dir.home
|
20
|
+
@backup_dir = File.join(Dir.home, 'backup_files')
|
21
|
+
@local_sshd_config = File.join(Dir.home, '.ssh', 'sshd_config')
|
22
|
+
@sshd_backup = File.join(@backup_dir, 'sshd_config.orig')
|
23
|
+
|
24
|
+
# values for items to be copied from
|
25
|
+
# set to nil so that someone must set a path
|
26
|
+
@config_files = nil
|
27
|
+
@dotfiles = nil
|
28
|
+
@misc_files = nil
|
29
|
+
|
30
|
+
# Location of your SOPS encrypted yaml file
|
31
|
+
@credentials = nil
|
32
|
+
@netrc = nil
|
33
|
+
|
34
|
+
# used for displaying info
|
35
|
+
@verbose = false
|
36
|
+
@interactive = true
|
37
|
+
@testing = false
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.configure
|
42
|
+
@configuration ||= Configuration.new
|
43
|
+
yield(configuration)
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.configuration
|
47
|
+
@configuration ||= Configuration.new
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.reset_configuration
|
51
|
+
@configuration = Configuration.new
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.load_test_configuration
|
55
|
+
test_config = File.join(File.expand_path(__dir__), 'configurations', 'testing_configuration.rb')
|
56
|
+
load_configuration(test_config)
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.load_configuration(file = File.join(Dir.home, '.vps_cli'))
|
60
|
+
msg = 'Unable to location a configuration file. The default location is'
|
61
|
+
msg += '$HOME/.vps_cli'
|
62
|
+
msg += "\nTo create a standard default config, run 'vps-cli init'"
|
63
|
+
|
64
|
+
raise Exception, msg unless File.exist?(file)
|
65
|
+
|
66
|
+
load file
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.create_configuration(file = File.join(Dir.home, '.vps_cli'))
|
70
|
+
msg = "Creating a default configuration files @ $HOME/.vps_cli"
|
71
|
+
msg += "\nPlease modify any values that are nil"
|
72
|
+
|
73
|
+
puts msg
|
74
|
+
default_config = File.join(File.expand_path(__dir__), 'configurations', 'default_configuration.rb')
|
75
|
+
|
76
|
+
Rake.cp(default_config, file)
|
77
|
+
end
|
78
|
+
end
|