ops_team 0.8.0 → 0.8.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb7e6762ba43bcdd97cc72b6bc5a65bf1280d5bb69ad52eab7455f580fe1f7ea
4
- data.tar.gz: ac3102e06909139501ffef2468bc7005a3c7db215253136c5c08ff6a8d4fc2b2
3
+ metadata.gz: d595d1f23daf3cab0833a010f9fc99feadaee8fe63e5f98f6a6943b7e39db0f0
4
+ data.tar.gz: af36bed405ec7982a89e6d4837098ccb92d227d37a6beba086dc0b7e33ab33c2
5
5
  SHA512:
6
- metadata.gz: 2195cba85da82ef592d6368300eaac3bfe856cec816352c82c0acb07c54488ead3abf9e3963d78c4f658c593714e7819834728fa75f6a4cf6432b131da46bb3b
7
- data.tar.gz: 459f5ad1db23e335cb5ec9f15919a84546f66b98abd4fbb286dce0ddb66ae71c034d298507256317ca382f10572d9898c03fcdc2df741add7ad02811606ee3dd
6
+ metadata.gz: d50db908a70f94f1d3db693856dc664900386e95c33c90a77aedc8766c8e1b33d72d742668230dcf2c2b546ecee132e8320c6c9fa58df02065fb43a134b3364b
7
+ data.tar.gz: 88b9e6bb4410fe491673ec101a65d48b7f51746682e55dea06ba2747a250b0ba1fdb23849171b3a17ac2fd3690331fb5155463edad23451fcdd5f00ef2ad049c
data/Gemfile CHANGED
@@ -4,7 +4,11 @@ source "https://rubygems.org"
4
4
 
5
5
  git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
6
 
7
+ gem "bcrypt_pbkdf"
7
8
  gem "colorize"
9
+ gem "ed25519"
10
+ gem "ejson"
11
+ gem "net-ssh"
8
12
  gem "require_all"
9
13
 
10
14
  group :test do
@@ -9,7 +9,7 @@ module Dependencies
9
9
  end
10
10
 
11
11
  def meet
12
- execute("mkdir #{name}")
12
+ execute("mkdir -p #{name}")
13
13
  end
14
14
 
15
15
  def unmeet
@@ -1,22 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'net/ssh'
4
+
3
5
  require 'dependency'
4
6
 
5
7
  module Dependencies
6
8
  class Sshkey < Dependency
7
9
  DEFAULT_KEY_SIZE = 2048
8
10
  DEFAULT_KEY_ALGO = "rsa"
11
+ DEFAULT_KEY_LIFETIME_S = 3600
9
12
 
10
13
  def met?
11
- File.exist?(priv_key_name) && File.exist?(pub_key_name)
14
+ # we always need to at least update the key lifetime in the agent
15
+ false
12
16
  end
13
17
 
14
18
  def meet
15
- Secrets.load if Options.get("sshkey.load_secrets")
19
+ Secrets.load
16
20
 
17
21
  FileUtils.mkdir_p(dir_name) unless File.directory?(dir_name)
18
22
 
19
- execute("ssh-keygen -b #{key_size} -t #{key_algo} -f #{priv_key_name} -q -N '#{passphrase}'")
23
+ generate_key unless File.exist?(priv_key_name) && File.exist?(pub_key_name)
24
+ add_key if success? && should_add_key?
20
25
  end
21
26
 
22
27
  def unmeet
@@ -29,6 +34,31 @@ module Dependencies
29
34
 
30
35
  private
31
36
 
37
+ def generate_key
38
+ execute("ssh-keygen -b #{opt_key_size} -t #{opt_key_algo} -f #{priv_key_name} -q -N '#{passphrase}'")
39
+ end
40
+
41
+ def add_key
42
+ Net::SSH::Authentication::Agent.connect.add_identity(
43
+ unencrypted_key,
44
+ key_comment,
45
+ lifetime: opt_key_lifetime
46
+ )
47
+ end
48
+
49
+ def should_add_key?
50
+ ENV["SSH_AUTH_SOCK"] && opt_add_keys?
51
+ end
52
+
53
+ def unencrypted_key
54
+ Net::SSH::KeyFactory.load_private_key(priv_key_name, passphrase)
55
+ end
56
+
57
+ def key_comment
58
+ # the current directory is usually named for the project
59
+ File.basename(::Dir.pwd)
60
+ end
61
+
32
62
  def dir_name
33
63
  `echo #{File.dirname(name)}`.chomp
34
64
  end
@@ -41,20 +71,28 @@ module Dependencies
41
71
  "#{priv_key_name}.pub"
42
72
  end
43
73
 
44
- def key_size
74
+ def opt_key_size
45
75
  Options.get("sshkey.key_size") || DEFAULT_KEY_SIZE
46
76
  end
47
77
 
48
- def key_algo
49
- Options.get("sshkey.key_algo") || DEFAULT_KEY_ALGO
78
+ def opt_key_algo
79
+ DEFAULT_KEY_ALGO
50
80
  end
51
81
 
52
82
  def passphrase
53
- `echo #{configured_passphrase}`.chomp
83
+ `echo #{opt_passphrase}`.chomp
54
84
  end
55
85
 
56
- def configured_passphrase
86
+ def opt_passphrase
57
87
  Options.get("sshkey.passphrase")
58
88
  end
89
+
90
+ def opt_add_keys?
91
+ Options.get("sshkey.add_keys").nil? ? true : Options.get("sshkey.add_keys")
92
+ end
93
+
94
+ def opt_key_lifetime
95
+ Options.get("sshkey.key_lifetime") || DEFAULT_KEY_LIFETIME_S
96
+ end
59
97
  end
60
98
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'ops_team'
5
- s.version = '0.8.0'
5
+ s.version = '0.8.7'
6
6
  s.authors = [
7
7
  'nickthecook@gmail.com'
8
8
  ]
@@ -22,7 +22,11 @@ Gem::Specification.new do |s|
22
22
  ]
23
23
  s.executables << 'ops'
24
24
  s.required_ruby_version = '~> 2.5'
25
+ s.add_runtime_dependency 'bcrypt_pbkdf', '~> 1.0', '>= 1.0.1'
25
26
  s.add_runtime_dependency 'colorize', '~> 0.8', '>= 0.8.1'
27
+ s.add_runtime_dependency 'ed25519', '~> 1.2', '>= 1.2.4'
28
+ s.add_runtime_dependency 'ejson', '~> 1.2', '>= 1.2.1'
29
+ s.add_runtime_dependency 'net-ssh', '~> 6.1', '>= 6.1.0'
26
30
  s.add_runtime_dependency 'require_all', '~> 1.1', '>= 1.1.6'
27
31
  s.license = 'GPL-3.0-only'
28
32
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ops_team
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - nickthecook@gmail.com
@@ -10,6 +10,26 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2020-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bcrypt_pbkdf
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.1
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.1
13
33
  - !ruby/object:Gem::Dependency
14
34
  name: colorize
15
35
  requirement: !ruby/object:Gem::Requirement
@@ -30,6 +50,66 @@ dependencies:
30
50
  - - ">="
31
51
  - !ruby/object:Gem::Version
32
52
  version: 0.8.1
53
+ - !ruby/object:Gem::Dependency
54
+ name: ed25519
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '1.2'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 1.2.4
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '1.2'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 1.2.4
73
+ - !ruby/object:Gem::Dependency
74
+ name: ejson
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '1.2'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 1.2.1
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.2'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 1.2.1
93
+ - !ruby/object:Gem::Dependency
94
+ name: net-ssh
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: 6.1.0
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '6.1'
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: 6.1.0
110
+ - - "~>"
111
+ - !ruby/object:Gem::Version
112
+ version: '6.1'
33
113
  - !ruby/object:Gem::Dependency
34
114
  name: require_all
35
115
  requirement: !ruby/object:Gem::Requirement