rake_gpg 0.17.0.pre.2 → 0.17.0.pre.5

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
  SHA256:
3
- metadata.gz: 86d251c0b326cc63028ca66d592a9ed7e25516450d402d2ce054cf5b73017b2c
4
- data.tar.gz: 125bfa5dae41b5cd82b0be81a9679c745d3a04496bad95b7e8234d08eabf6c40
3
+ metadata.gz: 7e6b8c2a2b2d2780f22aadb8ef10441a6748e9250f6c8ba511d1dfbd193e14c6
4
+ data.tar.gz: 80d6cc4c0ecaa5725f49f67fc318c31efb15183bc687badb215ce235d14b270d
5
5
  SHA512:
6
- metadata.gz: fe7d099294bdac2d5c0b06b4141e07e7d412438e4b2bc85b51dc10bf19664c3ab6892b3ef8657a0861c0955d4ad060b680c7d3c69de68fe01c020c632d5cfc40
7
- data.tar.gz: 95b4198f60a99faf61cd649998a3606acc1cdee285cc81edc31da5811e23412a776b1ea6130713b455e9e1a94f54c1426fce54c59b6b63e9b93e6881e8281f7d
6
+ metadata.gz: 38385f52fcfe168dead379ee4f808484bd182b47ceac2a5f24b1044c4e86b851d50681cf600692d8097764a2d795e1f0c35899f7756bc3bf50271ff24504ff41
7
+ data.tar.gz: f713f5c3612073b2d90f23806579efee8389e2023d6267bcb32cef0d98e9b54536fb0e0d16121937be1a4100dcaf8b33726b9aec8805574ded974255bb4bd50a
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in rake_leiningen.gemspec
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rake_gpg (0.17.0.pre.2)
4
+ rake_gpg (0.17.0.pre.5)
5
5
  rake_factory (~> 0.23)
6
6
  ruby_gpg2 (~> 0.6)
7
7
 
@@ -15,6 +15,7 @@ GEM
15
15
  tzinfo (~> 2.0)
16
16
  addressable (2.8.0)
17
17
  public_suffix (>= 2.0.2, < 5.0)
18
+ ast (2.4.2)
18
19
  colored2 (3.1.2)
19
20
  concurrent-ruby (1.1.9)
20
21
  diff-lcs (1.5.0)
@@ -58,7 +59,11 @@ GEM
58
59
  faraday (>= 0.9)
59
60
  sawyer (~> 0.8.0, >= 0.5.3)
60
61
  open4 (1.3.4)
62
+ parallel (1.22.1)
63
+ parser (3.1.1.0)
64
+ ast (~> 2.4.1)
61
65
  public_suffix (4.0.6)
66
+ rainbow (3.1.1)
62
67
  rake (13.0.6)
63
68
  rake_circle_ci (0.9.0)
64
69
  colored2 (~> 3.1)
@@ -77,6 +82,8 @@ GEM
77
82
  colored2 (~> 3.1)
78
83
  rake_factory (~> 0.23)
79
84
  sshkey (~> 2.0)
85
+ regexp_parser (2.2.1)
86
+ rexml (3.2.5)
80
87
  rspec (3.11.0)
81
88
  rspec-core (~> 3.11.0)
82
89
  rspec-expectations (~> 3.11.0)
@@ -90,13 +97,28 @@ GEM
90
97
  diff-lcs (>= 1.2.0, < 2.0)
91
98
  rspec-support (~> 3.11.0)
92
99
  rspec-support (3.11.0)
100
+ rubocop (1.26.1)
101
+ parallel (~> 1.10)
102
+ parser (>= 3.1.0.0)
103
+ rainbow (>= 2.2.2, < 4.0)
104
+ regexp_parser (>= 1.8, < 3.0)
105
+ rexml
106
+ rubocop-ast (>= 1.16.0, < 2.0)
107
+ ruby-progressbar (~> 1.7)
108
+ unicode-display_width (>= 1.4.0, < 3.0)
109
+ rubocop-ast (1.16.0)
110
+ parser (>= 3.1.1.0)
111
+ rubocop-rake (0.6.0)
112
+ rubocop (~> 1.0)
113
+ rubocop-rspec (2.9.0)
114
+ rubocop (~> 1.19)
115
+ ruby-progressbar (1.11.0)
93
116
  ruby2_keywords (0.0.5)
94
117
  ruby_gpg2 (0.8.0)
95
118
  lino (>= 1.5)
96
119
  sawyer (0.8.2)
97
120
  addressable (>= 2.3.5)
98
121
  faraday (> 0.8, < 2.0)
99
- semantic (1.6.1)
100
122
  simplecov (0.21.2)
101
123
  docile (~> 1.1)
102
124
  simplecov-html (~> 0.11)
@@ -106,6 +128,7 @@ GEM
106
128
  sshkey (2.0.0)
107
129
  tzinfo (2.0.4)
108
130
  concurrent-ruby (~> 1.0)
131
+ unicode-display_width (2.1.0)
109
132
 
110
133
  PLATFORMS
111
134
  ruby
@@ -123,8 +146,10 @@ DEPENDENCIES
123
146
  rake_gpg!
124
147
  rake_ssh
125
148
  rspec
126
- semantic
149
+ rubocop
150
+ rubocop-rake
151
+ rubocop-rspec
127
152
  simplecov
128
153
 
129
154
  BUNDLED WITH
130
- 2.3.9
155
+ 2.3.11
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2020 InfraBlocks Maintainers
3
+ Copyright (c) 2022 InfraBlocks Maintainers
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yaml'
2
4
  require 'rake_circle_ci'
3
5
  require 'rake_github'
@@ -5,17 +7,20 @@ require 'rake_ssh'
5
7
  require 'rake_gpg'
6
8
  require 'securerandom'
7
9
  require 'rspec/core/rake_task'
10
+ require 'rubocop/rake_task'
8
11
 
9
- task :default => :spec
10
-
11
- RSpec::Core::RakeTask.new(:spec)
12
+ task default: %i[
13
+ library:fix
14
+ test:unit
15
+ ]
12
16
 
13
17
  namespace :encryption do
14
18
  namespace :passphrase do
19
+ desc 'Generate encryption passphrase for CI GPG key'
15
20
  task :generate do
16
- File.open('config/secrets/ci/encryption.passphrase', 'w') do |f|
17
- f.write(SecureRandom.base64(36))
18
- end
21
+ FileUtils.mkdir_p('config/secrets/ci/')
22
+ File.write('config/secrets/ci/encryption.passphrase',
23
+ SecureRandom.base64(36))
19
24
  end
20
25
  end
21
26
  end
@@ -23,85 +28,102 @@ end
23
28
  namespace :keys do
24
29
  namespace :deploy do
25
30
  RakeSSH.define_key_tasks(
26
- path: 'config/secrets/ci/',
27
- comment: 'maintainers@infrablocks.io')
31
+ path: 'config/secrets/ci/',
32
+ comment: 'maintainers@infrablocks.io'
33
+ )
28
34
  end
29
35
 
30
36
  namespace :gpg do
31
37
  RakeGPG.define_generate_key_task(
32
- output_directory: 'config/secrets/ci',
33
- name_prefix: 'gpg',
34
- owner_name: 'InfraBlocks Maintainers',
35
- owner_email: 'maintainers@infrablocks.io',
36
- owner_comment: 'rake_gpg CI Key')
38
+ output_directory: 'config/secrets/ci',
39
+ name_prefix: 'gpg',
40
+ owner_name: 'InfraBlocks Maintainers',
41
+ owner_email: 'maintainers@infrablocks.io',
42
+ owner_comment: 'rake_gpg CI Key'
43
+ )
37
44
  end
38
45
  end
39
46
 
47
+ RuboCop::RakeTask.new
48
+
49
+ namespace :library do
50
+ desc 'Run all checks of the library'
51
+ task check: [:rubocop]
52
+
53
+ desc 'Attempt to automatically fix issues with the library'
54
+ task fix: [:'rubocop:auto_correct']
55
+ end
56
+
57
+ namespace :test do
58
+ RSpec::Core::RakeTask.new(:unit)
59
+ end
60
+
40
61
  RakeCircleCI.define_project_tasks(
41
- namespace: :circle_ci,
42
- project_slug: 'github/infrablocks/rake_gpg'
62
+ namespace: :circle_ci,
63
+ project_slug: 'github/infrablocks/rake_gpg'
43
64
  ) do |t|
44
65
  circle_ci_config =
45
- YAML.load_file('config/secrets/circle_ci/config.yaml')
66
+ YAML.load_file('config/secrets/circle_ci/config.yaml')
46
67
 
47
- t.api_token = circle_ci_config["circle_ci_api_token"]
68
+ t.api_token = circle_ci_config['circle_ci_api_token']
48
69
  t.environment_variables = {
49
- ENCRYPTION_PASSPHRASE:
50
- File.read('config/secrets/ci/encryption.passphrase')
51
- .chomp
70
+ ENCRYPTION_PASSPHRASE:
71
+ File.read('config/secrets/ci/encryption.passphrase')
72
+ .chomp
52
73
  }
53
74
  t.checkout_keys = []
54
75
  t.ssh_keys = [
55
- {
56
- hostname: "github.com",
57
- private_key: File.read('config/secrets/ci/ssh.private')
58
- }
76
+ {
77
+ hostname: 'github.com',
78
+ private_key: File.read('config/secrets/ci/ssh.private')
79
+ }
59
80
  ]
60
81
  end
61
82
 
62
83
  RakeGithub.define_repository_tasks(
63
- namespace: :github,
64
- repository: 'infrablocks/rake_gpg',
84
+ namespace: :github,
85
+ repository: 'infrablocks/rake_gpg'
65
86
  ) do |t, args|
66
87
  github_config =
67
- YAML.load_file('config/secrets/github/config.yaml')
88
+ YAML.load_file('config/secrets/github/config.yaml')
68
89
 
69
- t.access_token = github_config["github_personal_access_token"]
90
+ t.access_token = github_config['github_personal_access_token']
70
91
  t.deploy_keys = [
71
- {
72
- title: 'CircleCI',
73
- public_key: File.read('config/secrets/ci/ssh.public')
74
- }
92
+ {
93
+ title: 'CircleCI',
94
+ public_key: File.read('config/secrets/ci/ssh.public')
95
+ }
75
96
  ]
76
97
  t.branch_name = args.branch_name
77
98
  t.commit_message = args.commit_message
78
99
  end
79
100
 
80
101
  namespace :pipeline do
81
- task :prepare => [
82
- :'circle_ci:project:follow',
83
- :'circle_ci:env_vars:ensure',
84
- :'circle_ci:checkout_keys:ensure',
85
- :'circle_ci:ssh_keys:ensure',
86
- :'github:deploy_keys:ensure'
102
+ desc 'Prepare CircleCI Pipeline'
103
+ task prepare: %i[
104
+ circle_ci:project:follow
105
+ circle_ci:env_vars:ensure
106
+ circle_ci:checkout_keys:ensure
107
+ circle_ci:ssh_keys:ensure
108
+ github:deploy_keys:ensure
87
109
  ]
88
110
  end
89
111
 
90
112
  namespace :version do
91
- desc "Bump version for specified type (pre, major, minor, patch)"
113
+ desc 'Bump version for specified type (pre, major, minor, patch)'
92
114
  task :bump, [:type] do |_, args|
93
115
  bump_version_for(args.type)
94
116
  end
95
117
  end
96
118
 
97
- desc "Release gem"
119
+ desc 'Release gem'
98
120
  task :release do
99
- sh "gem release --tag --push"
121
+ sh 'gem release --tag --push'
100
122
  end
101
123
 
102
124
  def bump_version_for(version_type)
103
- sh "gem bump --version #{version_type} " +
104
- "&& bundle install " +
105
- "&& export LAST_MESSAGE=\"$(git log -1 --pretty=%B)\" " +
106
- "&& git commit -a --amend -m \"${LAST_MESSAGE} [ci skip]\""
125
+ sh "gem bump --version #{version_type} " \
126
+ '&& bundle install ' \
127
+ '&& export LAST_MESSAGE="$(git log -1 --pretty=%B)" ' \
128
+ '&& git commit -a --amend -m "${LAST_MESSAGE} [ci skip]"'
107
129
  end
data/bin/console CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "bundler/setup"
4
- require "rake_leiningen"
4
+ require 'bundler/setup'
5
+ require 'rake_leiningen'
5
6
 
6
7
  # You can add fixtures and/or initialization code here to make experimenting
7
8
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +11,5 @@ require "rake_leiningen"
10
11
  # require "pry"
11
12
  # Pry.start
12
13
 
13
- require "irb"
14
+ require 'irb'
14
15
  IRB.start(__FILE__)
data/lib/rake_gpg/home.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RakeGPG
2
4
  class Home
3
5
  def initialize(work_directory, home_directory)
@@ -5,15 +7,13 @@ module RakeGPG
5
7
  @home_directory = home_directory
6
8
  end
7
9
 
8
- def with_resolved_directory
10
+ def with_resolved_directory(&block)
9
11
  if @home_directory == :temporary
10
- Dir.mktmpdir('home', @work_directory) do |home_directory|
11
- yield home_directory
12
- end
12
+ Dir.mktmpdir('home', @work_directory, &block)
13
13
  else
14
14
  FileUtils.mkdir_p(@home_directory)
15
15
  yield @home_directory
16
16
  end
17
17
  end
18
18
  end
19
- end
19
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rake_factory'
2
4
  require 'ruby_gpg2'
3
5
 
@@ -8,7 +10,7 @@ module RakeGPG
8
10
  module Encryption
9
11
  class Decrypt < RakeFactory::Task
10
12
  default_name :decrypt
11
- default_description "Decrypt a file using GPG"
13
+ default_description 'Decrypt a file using GPG'
12
14
 
13
15
  parameter :key_file_path, required: true
14
16
  parameter :input_file_path, required: true
@@ -20,29 +22,62 @@ module RakeGPG
20
22
  parameter :trust_mode, default: :always
21
23
  parameter :passphrase
22
24
 
23
- action do |t|
24
- mkdir_p(t.work_directory)
25
+ action do
26
+ make_work_directory
27
+ log_decrypting
28
+ in_home_directory do |home_directory|
29
+ import_key(home_directory)
30
+ make_output_directory
31
+ decrypt(home_directory)
32
+ end
33
+ log_done
34
+ end
35
+
36
+ private
25
37
 
26
- puts "Decrypting #{t.input_file_path} with key #{t.key_file_path}..."
27
- Home.new(t.work_directory, t.home_directory)
38
+ def in_home_directory(&block)
39
+ Home.new(work_directory, home_directory)
28
40
  .with_resolved_directory do |home_directory|
29
- RubyGPG2.import(
30
- key_file_paths: [t.key_file_path],
31
- work_directory: t.work_directory,
32
- home_directory: home_directory)
33
-
34
- mkdir_p(File.dirname(t.output_file_path))
35
-
36
- RubyGPG2.decrypt(
37
- input_file_path: t.input_file_path,
38
- output_file_path: t.output_file_path,
39
- home_directory: home_directory,
40
- trust_mode: t.trust_mode,
41
- passphrase: t.passphrase,
42
- pinentry_mode: t.passphrase ? :loopback : nil,
43
- without_passphrase: !t.passphrase)
41
+ block.call(home_directory)
44
42
  end
45
- puts "Done."
43
+ end
44
+
45
+ def import_key(home_directory)
46
+ RubyGPG2.import(
47
+ key_file_paths: [key_file_path],
48
+ work_directory: work_directory,
49
+ home_directory: home_directory
50
+ )
51
+ end
52
+
53
+ def make_work_directory
54
+ mkdir_p(work_directory)
55
+ end
56
+
57
+ def make_output_directory
58
+ mkdir_p(File.dirname(output_file_path))
59
+ end
60
+
61
+ def decrypt(home_directory)
62
+ RubyGPG2.decrypt(
63
+ input_file_path: input_file_path,
64
+ output_file_path: output_file_path,
65
+ home_directory: home_directory,
66
+ trust_mode: trust_mode,
67
+ passphrase: passphrase,
68
+ pinentry_mode: passphrase ? :loopback : nil,
69
+ without_passphrase: !passphrase
70
+ )
71
+ end
72
+
73
+ def log_decrypting
74
+ $stdout.puts(
75
+ "Decrypting #{input_file_path} with key #{key_file_path}..."
76
+ )
77
+ end
78
+
79
+ def log_done
80
+ $stdout.puts('Done.')
46
81
  end
47
82
  end
48
83
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rake_factory'
2
4
  require 'ruby_gpg2'
3
5
 
@@ -8,7 +10,7 @@ module RakeGPG
8
10
  module Encryption
9
11
  class Encrypt < RakeFactory::Task
10
12
  default_name :encrypt
11
- default_description "Encrypt a file using GPG"
13
+ default_description 'Encrypt a file using GPG'
12
14
 
13
15
  parameter :key_file_path, required: true
14
16
  parameter :input_file_path, required: true
@@ -20,35 +22,68 @@ module RakeGPG
20
22
  parameter :armor, default: true
21
23
  parameter :trust_mode, default: :always
22
24
 
23
- action do |t|
24
- mkdir_p(t.work_directory)
25
+ action do
26
+ make_work_directory
27
+ log_encrypting
28
+ in_home_directory do |home_directory|
29
+ result = import_key(home_directory)
30
+ key_fingerprint = lookup_key_fingerprint(result)
31
+ make_output_directory
32
+ encrypt(home_directory, key_fingerprint)
33
+ end
34
+ log_done
35
+ end
25
36
 
26
- puts "Encrypting #{t.input_file_path} for key #{t.key_file_path}..."
27
- Home.new(t.work_directory, t.home_directory)
37
+ private
38
+
39
+ def in_home_directory(&block)
40
+ Home.new(work_directory, home_directory)
28
41
  .with_resolved_directory do |home_directory|
29
- result = RubyGPG2.import(
30
- key_file_paths: [t.key_file_path],
31
- work_directory: t.work_directory,
32
- home_directory: home_directory,
33
- with_status: true)
34
-
35
- key_fingerprint = result
36
- .status
37
- .filter_by_type(:import_ok)
38
- .first_line
39
- .key_fingerprint
40
-
41
- mkdir_p(File.dirname(t.output_file_path))
42
-
43
- RubyGPG2.encrypt(
44
- recipient: key_fingerprint,
45
- input_file_path: t.input_file_path,
46
- output_file_path: t.output_file_path,
47
- home_directory: home_directory,
48
- armor: t.armor,
49
- trust_mode: t.trust_mode)
42
+ block.call(home_directory)
50
43
  end
51
- puts "Done."
44
+ end
45
+
46
+ def make_work_directory
47
+ mkdir_p(work_directory)
48
+ end
49
+
50
+ def make_output_directory
51
+ mkdir_p(File.dirname(output_file_path))
52
+ end
53
+
54
+ def import_key(home_directory)
55
+ RubyGPG2.import(
56
+ key_file_paths: [key_file_path],
57
+ work_directory: work_directory,
58
+ home_directory: home_directory,
59
+ with_status: true
60
+ )
61
+ end
62
+
63
+ def lookup_key_fingerprint(result)
64
+ result.status.filter_by_type(:import_ok)
65
+ .first_line.key_fingerprint
66
+ end
67
+
68
+ def encrypt(home_directory, key_fingerprint)
69
+ RubyGPG2.encrypt(
70
+ recipient: key_fingerprint,
71
+ input_file_path: input_file_path,
72
+ output_file_path: output_file_path,
73
+ home_directory: home_directory,
74
+ armor: armor,
75
+ trust_mode: trust_mode
76
+ )
77
+ end
78
+
79
+ def log_encrypting
80
+ $stdout.puts(
81
+ "Encrypting #{input_file_path} for key #{key_file_path}..."
82
+ )
83
+ end
84
+
85
+ def log_done
86
+ $stdout.puts('Done.')
52
87
  end
53
88
  end
54
89
  end
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'encryption/decrypt'
2
4
  require_relative 'encryption/encrypt'
3
5
 
4
6
  module RakeGPG
5
7
  module Tasks
6
8
  module Encryption
7
-
8
9
  end
9
10
  end
10
11
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rake_factory'
2
4
  require 'ruby_gpg2'
3
5
 
@@ -6,9 +8,10 @@ require_relative '../../home'
6
8
  module RakeGPG
7
9
  module Tasks
8
10
  module Keys
11
+ # rubocop:disable Metrics/ClassLength
9
12
  class Generate < RakeFactory::Task
10
13
  default_name :generate
11
- default_description "Generate a GPG key"
14
+ default_description 'Generate a GPG key'
12
15
 
13
16
  parameter :name_prefix, default: 'gpg'
14
17
  parameter :armor, default: true
@@ -29,55 +32,109 @@ module RakeGPG
29
32
  parameter :expiry, default: :never
30
33
  parameter :passphrase
31
34
 
32
- action do |t|
33
- mkdir_p(t.work_directory)
35
+ action do
36
+ make_work_directory
37
+ log_generating_key
38
+ in_home_directory do |home_directory|
39
+ result = generate_key(home_directory)
40
+ key_fingerprint = lookup_key_fingerprint(result)
41
+ log_generated_key(key_fingerprint)
42
+ maybe_export_key(home_directory, key_fingerprint)
43
+ end
44
+ log_done
45
+ end
46
+
47
+ private
34
48
 
35
- puts "Generating GPG key for #{t.owner_name} <#{t.owner_email}>..."
36
- Home.new(t.work_directory, t.home_directory)
49
+ def in_home_directory(&block)
50
+ Home.new(work_directory, home_directory)
37
51
  .with_resolved_directory do |home_directory|
38
- mkdir_p t.output_directory if t.output_directory
39
-
40
- result = RubyGPG2::ParameterFileContents
41
- .new(t.parameter_values)
42
- .in_temp_file(t.work_directory) do |f|
43
- RubyGPG2.generate_key(
44
- parameter_file_path: f.path,
45
- home_directory: home_directory,
46
- work_directory: t.work_directory,
47
- without_passphrase: t.passphrase.nil?,
48
- with_status: true)
49
- end
50
-
51
- key_fingerprint = result
52
- .status
53
- .filter_by_type(:key_created)
54
- .first_line
55
- .key_fingerprint
56
-
57
- puts "Generated GPG key with fingerprint #{key_fingerprint}."
58
-
59
- if t.output_directory
60
- puts 'Export requested. ' +
61
- "Exporting GPG key to #{t.output_directory}..."
62
- RubyGPG2.export(
63
- names: [key_fingerprint],
64
- output_file_path:
65
- "#{t.output_directory}/#{t.name_prefix}.public",
66
- armor: t.armor,
67
- home_directory: home_directory)
68
- RubyGPG2.export_secret_keys(
69
- names: [key_fingerprint],
70
- output_file_path:
71
- "#{t.output_directory}/#{t.name_prefix}.private",
72
- armor: t.armor,
73
- passphrase: t.passphrase,
74
- pinentry_mode: t.passphrase.nil? ? nil : :loopback,
75
- home_directory: home_directory)
76
- end
52
+ block.call(home_directory)
53
+ end
54
+ end
55
+
56
+ def make_work_directory
57
+ mkdir_p(work_directory)
58
+ end
59
+
60
+ def make_output_directory
61
+ mkdir_p(output_directory)
62
+ end
63
+
64
+ def lookup_key_fingerprint(result)
65
+ result.status.filter_by_type(:key_created)
66
+ .first_line.key_fingerprint
67
+ end
68
+
69
+ # rubocop:disable Metrics/MethodLength
70
+ def generate_key(home_directory)
71
+ RubyGPG2::ParameterFileContents
72
+ .new(parameter_values)
73
+ .in_temp_file(work_directory) do |f|
74
+ RubyGPG2.generate_key(
75
+ parameter_file_path: f.path,
76
+ home_directory: home_directory,
77
+ work_directory: work_directory,
78
+ without_passphrase: passphrase.nil?,
79
+ with_status: true
80
+ )
77
81
  end
78
- puts "Done."
82
+ end
83
+ # rubocop:enable Metrics/MethodLength
84
+
85
+ def maybe_export_key(home_directory, key_fingerprint)
86
+ return unless output_directory
87
+
88
+ log_exporting_key
89
+ make_output_directory
90
+ export_public_key(home_directory, key_fingerprint)
91
+ export_private_key(home_directory, key_fingerprint)
92
+ end
93
+
94
+ def export_public_key(home_directory, key_fingerprint)
95
+ RubyGPG2.export(
96
+ names: [key_fingerprint],
97
+ output_file_path: "#{output_directory}/#{name_prefix}.public",
98
+ armor: armor,
99
+ home_directory: home_directory
100
+ )
101
+ end
102
+
103
+ def export_private_key(home_directory, key_fingerprint)
104
+ RubyGPG2.export_secret_keys(
105
+ names: [key_fingerprint],
106
+ output_file_path: "#{output_directory}/#{name_prefix}.private",
107
+ armor: armor,
108
+ passphrase: passphrase,
109
+ pinentry_mode: passphrase.nil? ? nil : :loopback,
110
+ home_directory: home_directory
111
+ )
112
+ end
113
+
114
+ def log_generating_key
115
+ $stdout.puts(
116
+ "Generating GPG key for #{owner_name} <#{owner_email}>..."
117
+ )
118
+ end
119
+
120
+ def log_generated_key(key_fingerprint)
121
+ $stdout.puts(
122
+ "Generated GPG key with fingerprint #{key_fingerprint}."
123
+ )
124
+ end
125
+
126
+ def log_exporting_key
127
+ $stdout.puts(
128
+ 'Export requested. Exporting GPG key to '\
129
+ "#{output_directory}..."
130
+ )
131
+ end
132
+
133
+ def log_done
134
+ $stdout.puts('Done.')
79
135
  end
80
136
  end
137
+ # rubocop:enable Metrics/ClassLength
81
138
  end
82
139
  end
83
140
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rake_factory'
2
4
  require 'ruby_gpg2'
3
5
 
@@ -8,24 +10,49 @@ module RakeGPG
8
10
  module Keys
9
11
  class Import < RakeFactory::Task
10
12
  default_name :import
11
- default_description "Import a GPG key"
13
+ default_description 'Import a GPG key'
12
14
 
13
15
  parameter :key_file_path, required: true
14
16
  parameter :work_directory, default: '/tmp'
15
17
  parameter :home_directory, default: :temporary
16
18
 
17
- action do |t|
18
- mkdir_p(t.work_directory)
19
+ action do
20
+ make_work_directory
21
+ log_importing_key
22
+ in_home_directory do |home_directory|
23
+ import(home_directory)
24
+ end
25
+ log_done
26
+ end
27
+
28
+ private
19
29
 
20
- puts "Importing GPG key from #{t.key_file_path} " +
21
- "into #{home_directory}..."
22
- Home.new(t.work_directory, t.home_directory)
30
+ def in_home_directory(&block)
31
+ Home.new(work_directory, home_directory)
23
32
  .with_resolved_directory do |home_directory|
24
- RubyGPG2.import(
25
- key_file_paths: [t.key_file_path],
26
- home_directory: home_directory)
33
+ block.call(home_directory)
27
34
  end
28
- puts "Done."
35
+ end
36
+
37
+ def make_work_directory
38
+ mkdir_p(work_directory)
39
+ end
40
+
41
+ def import(home_directory)
42
+ RubyGPG2.import(
43
+ key_file_paths: [key_file_path],
44
+ home_directory: home_directory
45
+ )
46
+ end
47
+
48
+ def log_importing_key
49
+ $stdout.puts(
50
+ "Importing GPG key from #{key_file_path} into #{home_directory}..."
51
+ )
52
+ end
53
+
54
+ def log_done
55
+ $stdout.puts 'Done.'
29
56
  end
30
57
  end
31
58
  end
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'keys/generate'
2
4
  require_relative 'keys/import'
3
5
 
4
6
  module RakeGPG
5
7
  module Tasks
6
8
  module Keys
7
-
8
9
  end
9
10
  end
10
11
  end
@@ -1,8 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'tasks/keys'
2
4
  require_relative 'tasks/encryption'
3
5
 
4
6
  module RakeGPG
5
7
  module Tasks
6
-
7
8
  end
8
9
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RakeGPG
2
- VERSION = '0.17.0.pre.2'
4
+ VERSION = '0.17.0.pre.5'
3
5
  end
data/lib/rake_gpg.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rake_gpg/tasks'
2
4
  require 'rake_gpg/version'
3
5
 
data/rake_gpg.gemspec ADDED
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'rake_gpg/version'
6
+
7
+ files = %w[
8
+ bin
9
+ lib
10
+ CODE_OF_CONDUCT.md
11
+ rake_gpg.gemspec
12
+ Gemfile
13
+ LICENSE.txt
14
+ Rakefile
15
+ README.md
16
+ ]
17
+
18
+ Gem::Specification.new do |spec|
19
+ spec.name = 'rake_gpg'
20
+ spec.version = RakeGPG::VERSION
21
+ spec.authors = ['InfraBlocks Maintainers']
22
+ spec.email = ['maintainers@infrablocks.io']
23
+
24
+ spec.summary = 'Rake tasks for managing GPG activities.'
25
+ spec.description = 'Rake tasks for common GPG related activities allowing ' \
26
+ 'keys to be managed and content to be encrypted and '\
27
+ 'decrypted.'
28
+ spec.homepage = 'https://github.com/infrablocks/rake_gpg'
29
+ spec.license = 'MIT'
30
+
31
+ spec.files = `git ls-files -z`.split("\x0").select do |f|
32
+ f.match(/^(#{files.map { |g| Regexp.escape(g) }.join('|')})/)
33
+ end
34
+ spec.bindir = 'exe'
35
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
36
+ spec.require_paths = ['lib']
37
+
38
+ spec.required_ruby_version = '>= 2.7'
39
+
40
+ spec.add_dependency 'rake_factory', '~> 0.23'
41
+ spec.add_dependency 'ruby_gpg2', '~> 0.6'
42
+
43
+ spec.add_development_dependency 'activesupport'
44
+ spec.add_development_dependency 'bundler'
45
+ spec.add_development_dependency 'fakefs'
46
+ spec.add_development_dependency 'gem-release'
47
+ spec.add_development_dependency 'rake'
48
+ spec.add_development_dependency 'rake_circle_ci'
49
+ spec.add_development_dependency 'rake_github'
50
+ spec.add_development_dependency 'rake_gpg'
51
+ spec.add_development_dependency 'rake_ssh'
52
+ spec.add_development_dependency 'rspec'
53
+ spec.add_development_dependency 'rubocop'
54
+ spec.add_development_dependency 'rubocop-rake'
55
+ spec.add_development_dependency 'rubocop-rspec'
56
+ spec.add_development_dependency 'simplecov'
57
+
58
+ spec.metadata['rubygems_mfa_required'] = 'false'
59
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake_gpg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.0.pre.2
4
+ version: 0.17.0.pre.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - InfraBlocks Maintainers
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-13 00:00:00.000000000 Z
11
+ date: 2022-04-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake_factory
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.6'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -53,7 +67,7 @@ dependencies:
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
- name: rake
70
+ name: fakefs
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - ">="
@@ -67,7 +81,7 @@ dependencies:
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
- name: rake_circle_ci
84
+ name: gem-release
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - ">="
@@ -81,7 +95,7 @@ dependencies:
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
- name: rake_github
98
+ name: rake
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - ">="
@@ -95,7 +109,21 @@ dependencies:
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
- name: rake_ssh
112
+ name: rake_circle_ci
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rake_github
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
129
  - - ">="
@@ -123,7 +151,7 @@ dependencies:
123
151
  - !ruby/object:Gem::Version
124
152
  version: '0'
125
153
  - !ruby/object:Gem::Dependency
126
- name: rspec
154
+ name: rake_ssh
127
155
  requirement: !ruby/object:Gem::Requirement
128
156
  requirements:
129
157
  - - ">="
@@ -137,7 +165,7 @@ dependencies:
137
165
  - !ruby/object:Gem::Version
138
166
  version: '0'
139
167
  - !ruby/object:Gem::Dependency
140
- name: gem-release
168
+ name: rspec
141
169
  requirement: !ruby/object:Gem::Requirement
142
170
  requirements:
143
171
  - - ">="
@@ -151,7 +179,7 @@ dependencies:
151
179
  - !ruby/object:Gem::Version
152
180
  version: '0'
153
181
  - !ruby/object:Gem::Dependency
154
- name: semantic
182
+ name: rubocop
155
183
  requirement: !ruby/object:Gem::Requirement
156
184
  requirements:
157
185
  - - ">="
@@ -165,7 +193,7 @@ dependencies:
165
193
  - !ruby/object:Gem::Version
166
194
  version: '0'
167
195
  - !ruby/object:Gem::Dependency
168
- name: activesupport
196
+ name: rubocop-rake
169
197
  requirement: !ruby/object:Gem::Requirement
170
198
  requirements:
171
199
  - - ">="
@@ -179,7 +207,7 @@ dependencies:
179
207
  - !ruby/object:Gem::Version
180
208
  version: '0'
181
209
  - !ruby/object:Gem::Dependency
182
- name: fakefs
210
+ name: rubocop-rspec
183
211
  requirement: !ruby/object:Gem::Requirement
184
212
  requirements:
185
213
  - - ">="
@@ -232,10 +260,12 @@ files:
232
260
  - lib/rake_gpg/tasks/keys/generate.rb
233
261
  - lib/rake_gpg/tasks/keys/import.rb
234
262
  - lib/rake_gpg/version.rb
263
+ - rake_gpg.gemspec
235
264
  homepage: https://github.com/infrablocks/rake_gpg
236
265
  licenses:
237
266
  - MIT
238
- metadata: {}
267
+ metadata:
268
+ rubygems_mfa_required: 'false'
239
269
  post_install_message:
240
270
  rdoc_options: []
241
271
  require_paths: