makit 0.0.168 → 0.0.169
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 +4 -4
- data/README.md +41 -41
- data/exe/makit +5 -5
- data/lib/makit/apache.rb +28 -28
- data/lib/makit/auto.rb +48 -48
- data/lib/makit/azure/blob_storage.rb +257 -257
- data/lib/makit/azure/cli.rb +284 -284
- data/lib/makit/azure-pipelines.rb +187 -187
- data/lib/makit/cli/base.rb +17 -17
- data/lib/makit/cli/build_commands.rb +500 -500
- data/lib/makit/cli/generators/base_generator.rb +74 -74
- data/lib/makit/cli/generators/dotnet_generator.rb +50 -50
- data/lib/makit/cli/generators/generator_factory.rb +49 -49
- data/lib/makit/cli/generators/node_generator.rb +50 -50
- data/lib/makit/cli/generators/ruby_generator.rb +77 -77
- data/lib/makit/cli/generators/rust_generator.rb +50 -50
- data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -167
- data/lib/makit/cli/generators/templates/node_templates.rb +161 -161
- data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -26
- data/lib/makit/cli/generators/templates/ruby/gemspec.rb +41 -41
- data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -33
- data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -35
- data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -63
- data/lib/makit/cli/generators/templates/ruby/test.rb +39 -39
- data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -29
- data/lib/makit/cli/generators/templates/ruby/version.rb +29 -29
- data/lib/makit/cli/generators/templates/rust_templates.rb +128 -128
- data/lib/makit/cli/main.rb +78 -78
- data/lib/makit/cli/pipeline_commands.rb +311 -311
- data/lib/makit/cli/project_commands.rb +868 -868
- data/lib/makit/cli/repository_commands.rb +661 -661
- data/lib/makit/cli/strategy_commands.rb +207 -207
- data/lib/makit/cli/utility_commands.rb +521 -521
- data/lib/makit/commands/factory.rb +359 -359
- data/lib/makit/commands/middleware/base.rb +73 -73
- data/lib/makit/commands/middleware/cache.rb +248 -248
- data/lib/makit/commands/middleware/command_logger.rb +312 -312
- data/lib/makit/commands/middleware/validator.rb +269 -269
- data/lib/makit/commands/request.rb +316 -316
- data/lib/makit/commands/result.rb +323 -323
- data/lib/makit/commands/runner.rb +386 -386
- data/lib/makit/commands/strategies/base.rb +171 -171
- data/lib/makit/commands/strategies/child_process.rb +162 -162
- data/lib/makit/commands/strategies/factory.rb +136 -136
- data/lib/makit/commands/strategies/synchronous.rb +139 -139
- data/lib/makit/commands.rb +50 -50
- data/lib/makit/configuration/dotnet_project.rb +48 -48
- data/lib/makit/configuration/gitlab_helper.rb +61 -61
- data/lib/makit/configuration/project.rb +292 -292
- data/lib/makit/configuration/rakefile_helper.rb +43 -43
- data/lib/makit/configuration/step.rb +34 -34
- data/lib/makit/configuration/timeout.rb +74 -74
- data/lib/makit/configuration.rb +21 -21
- data/lib/makit/content/default_gitignore.rb +7 -7
- data/lib/makit/content/default_gitignore.txt +225 -225
- data/lib/makit/content/default_rakefile.rb +13 -13
- data/lib/makit/content/gem_rakefile.rb +16 -16
- data/lib/makit/context.rb +1 -1
- data/lib/makit/data.rb +49 -49
- data/lib/makit/directories.rb +170 -170
- data/lib/makit/directory.rb +262 -262
- data/lib/makit/docs/files.rb +89 -89
- data/lib/makit/docs/rake.rb +102 -102
- data/lib/makit/dotnet/cli.rb +224 -224
- data/lib/makit/dotnet/project.rb +217 -217
- data/lib/makit/dotnet/solution.rb +38 -38
- data/lib/makit/dotnet/solution_classlib.rb +239 -239
- data/lib/makit/dotnet/solution_console.rb +264 -264
- data/lib/makit/dotnet/solution_maui.rb +354 -354
- data/lib/makit/dotnet/solution_wasm.rb +275 -275
- data/lib/makit/dotnet/solution_wpf.rb +304 -304
- data/lib/makit/dotnet.rb +110 -110
- data/lib/makit/email.rb +90 -90
- data/lib/makit/environment.rb +142 -142
- data/lib/makit/examples/runner.rb +370 -370
- data/lib/makit/exceptions.rb +45 -45
- data/lib/makit/fileinfo.rb +32 -32
- data/lib/makit/files.rb +43 -43
- data/lib/makit/gems.rb +49 -49
- data/lib/makit/git/cli.rb +103 -103
- data/lib/makit/git/repository.rb +100 -100
- data/lib/makit/git.rb +104 -104
- data/lib/makit/github_actions.rb +202 -202
- data/lib/makit/gitlab/pipeline.rb +857 -857
- data/lib/makit/gitlab/pipeline_service_impl.rb +1535 -1535
- data/lib/makit/gitlab_runner.rb +59 -59
- data/lib/makit/humanize.rb +218 -218
- data/lib/makit/indexer.rb +47 -47
- data/lib/makit/io/filesystem.rb +111 -111
- data/lib/makit/io/filesystem_service_impl.rb +337 -337
- data/lib/makit/lint.rb +212 -212
- data/lib/makit/logging/configuration.rb +309 -309
- data/lib/makit/logging/format_registry.rb +84 -84
- data/lib/makit/logging/formatters/base.rb +39 -39
- data/lib/makit/logging/formatters/console_formatter.rb +140 -140
- data/lib/makit/logging/formatters/json_formatter.rb +65 -65
- data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
- data/lib/makit/logging/formatters/text_formatter.rb +64 -64
- data/lib/makit/logging/log_request.rb +119 -119
- data/lib/makit/logging/logger.rb +199 -199
- data/lib/makit/logging/sinks/base.rb +91 -91
- data/lib/makit/logging/sinks/console.rb +72 -72
- data/lib/makit/logging/sinks/file_sink.rb +92 -92
- data/lib/makit/logging/sinks/structured.rb +123 -123
- data/lib/makit/logging/sinks/unified_file_sink.rb +296 -296
- data/lib/makit/logging.rb +578 -578
- data/lib/makit/markdown.rb +75 -75
- data/lib/makit/mp/basic_object_mp.rb +17 -17
- data/lib/makit/mp/command_mp.rb +13 -13
- data/lib/makit/mp/command_request.mp.rb +17 -17
- data/lib/makit/mp/project_mp.rb +199 -199
- data/lib/makit/mp/string_mp.rb +205 -205
- data/lib/makit/nuget.rb +460 -458
- data/lib/makit/podman/podman.rb +458 -458
- data/lib/makit/podman/podman_service_impl.rb +1081 -1081
- data/lib/makit/port.rb +32 -32
- data/lib/makit/process.rb +377 -377
- data/lib/makit/protoc.rb +112 -112
- data/lib/makit/rake/cli.rb +196 -196
- data/lib/makit/rake/trace_controller.rb +174 -174
- data/lib/makit/rake.rb +81 -81
- data/lib/makit/ruby/cli.rb +185 -185
- data/lib/makit/ruby.rb +25 -25
- data/lib/makit/rubygems.rb +137 -137
- data/lib/makit/secrets/azure_key_vault.rb +322 -322
- data/lib/makit/secrets/azure_secrets.rb +221 -221
- data/lib/makit/secrets/local_secrets.rb +72 -72
- data/lib/makit/secrets/secrets_manager.rb +105 -105
- data/lib/makit/secrets.rb +96 -96
- data/lib/makit/serializer.rb +130 -130
- data/lib/makit/services/builder.rb +186 -186
- data/lib/makit/services/error_handler.rb +226 -226
- data/lib/makit/services/repository_manager.rb +367 -367
- data/lib/makit/services/validator.rb +112 -112
- data/lib/makit/setup/classlib.rb +101 -101
- data/lib/makit/setup/gem.rb +268 -268
- data/lib/makit/setup/pages.rb +11 -11
- data/lib/makit/setup/razorclasslib.rb +101 -101
- data/lib/makit/setup/runner.rb +54 -54
- data/lib/makit/setup.rb +5 -5
- data/lib/makit/show.rb +110 -110
- data/lib/makit/storage.rb +126 -126
- data/lib/makit/symbols.rb +175 -175
- data/lib/makit/task_info.rb +130 -130
- data/lib/makit/tasks/at_exit.rb +15 -15
- data/lib/makit/tasks/build.rb +22 -22
- data/lib/makit/tasks/bump.rb +7 -7
- data/lib/makit/tasks/clean.rb +13 -13
- data/lib/makit/tasks/configure.rb +10 -10
- data/lib/makit/tasks/format.rb +10 -10
- data/lib/makit/tasks/hook_manager.rb +443 -443
- data/lib/makit/tasks/info.rb +368 -368
- data/lib/makit/tasks/init.rb +49 -49
- data/lib/makit/tasks/integrate.rb +60 -60
- data/lib/makit/tasks/pull_incoming.rb +13 -13
- data/lib/makit/tasks/secrets.rb +7 -7
- data/lib/makit/tasks/setup.rb +16 -16
- data/lib/makit/tasks/sync.rb +14 -14
- data/lib/makit/tasks/tag.rb +27 -27
- data/lib/makit/tasks/task_monkey_patch.rb +81 -81
- data/lib/makit/tasks/test.rb +22 -22
- data/lib/makit/tasks/update.rb +21 -21
- data/lib/makit/tasks/version.rb +6 -6
- data/lib/makit/tasks.rb +24 -24
- data/lib/makit/test_cache.rb +239 -239
- data/lib/makit/tree.rb +37 -37
- data/lib/makit/v1/configuration/project_service_impl.rb +370 -370
- data/lib/makit/v1/git/git_repository_service_impl.rb +295 -295
- data/lib/makit/v1/makit.v1_pb.rb +35 -35
- data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
- data/lib/makit/v1/services/repository_manager_service_impl.rb +572 -572
- data/lib/makit/version.rb +661 -661
- data/lib/makit/version_util.rb +21 -21
- data/lib/makit/wix.rb +95 -95
- data/lib/makit/yaml.rb +29 -29
- data/lib/makit/zip.rb +17 -17
- data/lib/makit copy.rb +44 -44
- data/lib/makit.rb +121 -121
- metadata +2 -2
|
@@ -1,105 +1,105 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative "local_secrets"
|
|
4
|
-
|
|
5
|
-
module Makit
|
|
6
|
-
module Secrets
|
|
7
|
-
# Manager class for secrets management
|
|
8
|
-
# Uses AzureSecrets if Azure Key Vault environment variables are set,
|
|
9
|
-
# otherwise falls back to LocalSecrets
|
|
10
|
-
class SecretsManager
|
|
11
|
-
def initialize
|
|
12
|
-
@secrets_backend = choose_backend
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
private
|
|
16
|
-
|
|
17
|
-
def choose_backend
|
|
18
|
-
# Check if Azure Key Vault environment variables are set
|
|
19
|
-
if azure_keyvault_configured?
|
|
20
|
-
require_relative "azure_secrets"
|
|
21
|
-
AzureSecrets.new
|
|
22
|
-
else
|
|
23
|
-
LocalSecrets.new
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def azure_keyvault_configured?
|
|
28
|
-
# Check for Azure Key Vault configuration
|
|
29
|
-
# Requires both AZURE_SERVICE_PRINCIPAL_APP_ID and AZURE_KEYVAULT_NAME
|
|
30
|
-
ENV["AZURE_SERVICE_PRINCIPAL_APP_ID"] && !ENV["AZURE_SERVICE_PRINCIPAL_APP_ID"].empty? &&
|
|
31
|
-
ENV["AZURE_KEYVAULT_NAME"] && !ENV["AZURE_KEYVAULT_NAME"].empty?
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
public
|
|
35
|
-
|
|
36
|
-
def add(key, value)
|
|
37
|
-
@secrets_backend.add(key, value)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def remove(key)
|
|
41
|
-
@secrets_backend.remove(key)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def has_key?(key)
|
|
45
|
-
@secrets_backend.has_key?(key)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def key?(key)
|
|
49
|
-
@secrets_backend.has_key?(key)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def get(key)
|
|
53
|
-
@secrets_backend.get(key)
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def set(key, value)
|
|
57
|
-
@secrets_backend.set(key, value)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def get_secrets_filename
|
|
61
|
-
@secrets_backend.get_secrets_filename
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def get_secrets_hash
|
|
65
|
-
@secrets_backend.get_secrets_hash
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def save_secrets_hash(hash)
|
|
69
|
-
@secrets_backend.save_secrets_hash(hash)
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def info
|
|
73
|
-
backend_name = backend_type
|
|
74
|
-
puts " Backend: #{backend_name}"
|
|
75
|
-
|
|
76
|
-
backend_class_name = @secrets_backend.class.name
|
|
77
|
-
if backend_class_name == "Makit::Secrets::AzureSecrets"
|
|
78
|
-
puts " Key Vault: #{@secrets_backend.instance_variable_get(:@keyvault_name)}"
|
|
79
|
-
secret_name = Makit::Secrets::AzureKeyVault.secret_name
|
|
80
|
-
puts " Secret Name: #{secret_name}"
|
|
81
|
-
prefix = @secrets_backend.instance_variable_get(:@secret_prefix)
|
|
82
|
-
puts " Secret Prefix: #{prefix}" if prefix
|
|
83
|
-
elsif backend_class_name == "Makit::Secrets::LocalSecrets"
|
|
84
|
-
puts " Secrets File: #{@secrets_backend.get_secrets_filename}"
|
|
85
|
-
end
|
|
86
|
-
puts ""
|
|
87
|
-
@secrets_backend.info
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
private
|
|
91
|
-
|
|
92
|
-
def backend_type
|
|
93
|
-
backend_class_name = @secrets_backend.class.name
|
|
94
|
-
case backend_class_name
|
|
95
|
-
when "Makit::Secrets::AzureSecrets"
|
|
96
|
-
"Azure Key Vault"
|
|
97
|
-
when "Makit::Secrets::LocalSecrets"
|
|
98
|
-
"LocalSecrets"
|
|
99
|
-
else
|
|
100
|
-
backend_class_name.split("::").last
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "local_secrets"
|
|
4
|
+
|
|
5
|
+
module Makit
|
|
6
|
+
module Secrets
|
|
7
|
+
# Manager class for secrets management
|
|
8
|
+
# Uses AzureSecrets if Azure Key Vault environment variables are set,
|
|
9
|
+
# otherwise falls back to LocalSecrets
|
|
10
|
+
class SecretsManager
|
|
11
|
+
def initialize
|
|
12
|
+
@secrets_backend = choose_backend
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
def choose_backend
|
|
18
|
+
# Check if Azure Key Vault environment variables are set
|
|
19
|
+
if azure_keyvault_configured?
|
|
20
|
+
require_relative "azure_secrets"
|
|
21
|
+
AzureSecrets.new
|
|
22
|
+
else
|
|
23
|
+
LocalSecrets.new
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def azure_keyvault_configured?
|
|
28
|
+
# Check for Azure Key Vault configuration
|
|
29
|
+
# Requires both AZURE_SERVICE_PRINCIPAL_APP_ID and AZURE_KEYVAULT_NAME
|
|
30
|
+
ENV["AZURE_SERVICE_PRINCIPAL_APP_ID"] && !ENV["AZURE_SERVICE_PRINCIPAL_APP_ID"].empty? &&
|
|
31
|
+
ENV["AZURE_KEYVAULT_NAME"] && !ENV["AZURE_KEYVAULT_NAME"].empty?
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
public
|
|
35
|
+
|
|
36
|
+
def add(key, value)
|
|
37
|
+
@secrets_backend.add(key, value)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def remove(key)
|
|
41
|
+
@secrets_backend.remove(key)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def has_key?(key)
|
|
45
|
+
@secrets_backend.has_key?(key)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def key?(key)
|
|
49
|
+
@secrets_backend.has_key?(key)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def get(key)
|
|
53
|
+
@secrets_backend.get(key)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def set(key, value)
|
|
57
|
+
@secrets_backend.set(key, value)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def get_secrets_filename
|
|
61
|
+
@secrets_backend.get_secrets_filename
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def get_secrets_hash
|
|
65
|
+
@secrets_backend.get_secrets_hash
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def save_secrets_hash(hash)
|
|
69
|
+
@secrets_backend.save_secrets_hash(hash)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def info
|
|
73
|
+
backend_name = backend_type
|
|
74
|
+
puts " Backend: #{backend_name}"
|
|
75
|
+
|
|
76
|
+
backend_class_name = @secrets_backend.class.name
|
|
77
|
+
if backend_class_name == "Makit::Secrets::AzureSecrets"
|
|
78
|
+
puts " Key Vault: #{@secrets_backend.instance_variable_get(:@keyvault_name)}"
|
|
79
|
+
secret_name = Makit::Secrets::AzureKeyVault.secret_name
|
|
80
|
+
puts " Secret Name: #{secret_name}"
|
|
81
|
+
prefix = @secrets_backend.instance_variable_get(:@secret_prefix)
|
|
82
|
+
puts " Secret Prefix: #{prefix}" if prefix
|
|
83
|
+
elsif backend_class_name == "Makit::Secrets::LocalSecrets"
|
|
84
|
+
puts " Secrets File: #{@secrets_backend.get_secrets_filename}"
|
|
85
|
+
end
|
|
86
|
+
puts ""
|
|
87
|
+
@secrets_backend.info
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
private
|
|
91
|
+
|
|
92
|
+
def backend_type
|
|
93
|
+
backend_class_name = @secrets_backend.class.name
|
|
94
|
+
case backend_class_name
|
|
95
|
+
when "Makit::Secrets::AzureSecrets"
|
|
96
|
+
"Azure Key Vault"
|
|
97
|
+
when "Makit::Secrets::LocalSecrets"
|
|
98
|
+
"LocalSecrets"
|
|
99
|
+
else
|
|
100
|
+
backend_class_name.split("::").last
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
data/lib/makit/secrets.rb
CHANGED
|
@@ -1,96 +1,96 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative "secrets/local_secrets"
|
|
4
|
-
require_relative "secrets/secrets_manager"
|
|
5
|
-
|
|
6
|
-
module Makit
|
|
7
|
-
module Secrets
|
|
8
|
-
# Module for secrets management
|
|
9
|
-
# Contains LocalSecrets and SecretsManager classes
|
|
10
|
-
|
|
11
|
-
# Backward compatibility: Factory method to create a SecretsManager instance
|
|
12
|
-
def self.new
|
|
13
|
-
SecretsManager.new
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
# Get or create a default instance for module-level method calls
|
|
17
|
-
@default_instance = nil
|
|
18
|
-
|
|
19
|
-
def self.default_instance
|
|
20
|
-
@default_instance ||= SecretsManager.new
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Module-level method: Check if a key exists
|
|
24
|
-
# @param key [String] The secret key to check
|
|
25
|
-
# @return [Boolean] true if key exists, false otherwise
|
|
26
|
-
def self.has_key?(key)
|
|
27
|
-
default_instance.has_key?(key)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
# Module-level method: Get a secret value
|
|
31
|
-
# @param key [String] The secret key to retrieve
|
|
32
|
-
# @return [String, nil] The secret value, or nil if not found
|
|
33
|
-
def self.get(key)
|
|
34
|
-
default_instance.get(key)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# Module-level method: Set a secret value
|
|
38
|
-
# If value is not provided, prompts user for password input
|
|
39
|
-
# @param key [String] The secret key to set
|
|
40
|
-
# @param value [String, nil] The secret value (optional, will prompt if nil)
|
|
41
|
-
# @return [void]
|
|
42
|
-
def self.set(key, value = nil)
|
|
43
|
-
# If value is not provided, prompt user for password
|
|
44
|
-
if value.nil?
|
|
45
|
-
print "Enter password for '#{key}': "
|
|
46
|
-
|
|
47
|
-
# Try to use noecho for secure password input
|
|
48
|
-
begin
|
|
49
|
-
require "io/console"
|
|
50
|
-
value = $stdin.noecho { $stdin.gets }
|
|
51
|
-
rescue LoadError, NoMethodError
|
|
52
|
-
# Fallback to regular input if io/console is not available
|
|
53
|
-
value = $stdin.gets
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
value = value.chomp if value
|
|
57
|
-
|
|
58
|
-
puts "" # New line after password input
|
|
59
|
-
|
|
60
|
-
if value.nil? || value.empty?
|
|
61
|
-
raise "Password cannot be empty"
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
default_instance.set(key, value)
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
# Module-level method: Add a secret (alias for set)
|
|
69
|
-
# @param key [String] The secret key to add
|
|
70
|
-
# @param value [String] The secret value
|
|
71
|
-
# @return [void]
|
|
72
|
-
def self.add(key, value)
|
|
73
|
-
default_instance.add(key, value)
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
# Module-level method: Remove a secret
|
|
77
|
-
# @param key [String] The secret key to remove
|
|
78
|
-
# @return [void]
|
|
79
|
-
def self.remove(key)
|
|
80
|
-
default_instance.remove(key)
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
# Module-level method: Check if a key exists (alias for has_key?)
|
|
84
|
-
# @param key [String] The secret key to check
|
|
85
|
-
# @return [Boolean] true if key exists, false otherwise
|
|
86
|
-
def self.key?(key)
|
|
87
|
-
default_instance.key?(key)
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
# Module-level method: Display secrets information
|
|
91
|
-
# @return [void]
|
|
92
|
-
def self.info
|
|
93
|
-
default_instance.info
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "secrets/local_secrets"
|
|
4
|
+
require_relative "secrets/secrets_manager"
|
|
5
|
+
|
|
6
|
+
module Makit
|
|
7
|
+
module Secrets
|
|
8
|
+
# Module for secrets management
|
|
9
|
+
# Contains LocalSecrets and SecretsManager classes
|
|
10
|
+
|
|
11
|
+
# Backward compatibility: Factory method to create a SecretsManager instance
|
|
12
|
+
def self.new
|
|
13
|
+
SecretsManager.new
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Get or create a default instance for module-level method calls
|
|
17
|
+
@default_instance = nil
|
|
18
|
+
|
|
19
|
+
def self.default_instance
|
|
20
|
+
@default_instance ||= SecretsManager.new
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Module-level method: Check if a key exists
|
|
24
|
+
# @param key [String] The secret key to check
|
|
25
|
+
# @return [Boolean] true if key exists, false otherwise
|
|
26
|
+
def self.has_key?(key)
|
|
27
|
+
default_instance.has_key?(key)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Module-level method: Get a secret value
|
|
31
|
+
# @param key [String] The secret key to retrieve
|
|
32
|
+
# @return [String, nil] The secret value, or nil if not found
|
|
33
|
+
def self.get(key)
|
|
34
|
+
default_instance.get(key)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Module-level method: Set a secret value
|
|
38
|
+
# If value is not provided, prompts user for password input
|
|
39
|
+
# @param key [String] The secret key to set
|
|
40
|
+
# @param value [String, nil] The secret value (optional, will prompt if nil)
|
|
41
|
+
# @return [void]
|
|
42
|
+
def self.set(key, value = nil)
|
|
43
|
+
# If value is not provided, prompt user for password
|
|
44
|
+
if value.nil?
|
|
45
|
+
print "Enter password for '#{key}': "
|
|
46
|
+
|
|
47
|
+
# Try to use noecho for secure password input
|
|
48
|
+
begin
|
|
49
|
+
require "io/console"
|
|
50
|
+
value = $stdin.noecho { $stdin.gets }
|
|
51
|
+
rescue LoadError, NoMethodError
|
|
52
|
+
# Fallback to regular input if io/console is not available
|
|
53
|
+
value = $stdin.gets
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
value = value.chomp if value
|
|
57
|
+
|
|
58
|
+
puts "" # New line after password input
|
|
59
|
+
|
|
60
|
+
if value.nil? || value.empty?
|
|
61
|
+
raise "Password cannot be empty"
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
default_instance.set(key, value)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Module-level method: Add a secret (alias for set)
|
|
69
|
+
# @param key [String] The secret key to add
|
|
70
|
+
# @param value [String] The secret value
|
|
71
|
+
# @return [void]
|
|
72
|
+
def self.add(key, value)
|
|
73
|
+
default_instance.add(key, value)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Module-level method: Remove a secret
|
|
77
|
+
# @param key [String] The secret key to remove
|
|
78
|
+
# @return [void]
|
|
79
|
+
def self.remove(key)
|
|
80
|
+
default_instance.remove(key)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Module-level method: Check if a key exists (alias for has_key?)
|
|
84
|
+
# @param key [String] The secret key to check
|
|
85
|
+
# @return [Boolean] true if key exists, false otherwise
|
|
86
|
+
def self.key?(key)
|
|
87
|
+
default_instance.key?(key)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Module-level method: Display secrets information
|
|
91
|
+
# @return [void]
|
|
92
|
+
def self.info
|
|
93
|
+
default_instance.info
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
data/lib/makit/serializer.rb
CHANGED
|
@@ -1,130 +1,130 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
begin
|
|
4
|
-
require "google/protobuf"
|
|
5
|
-
rescue LoadError
|
|
6
|
-
# google-protobuf gem not available, define a minimal protobuf interface
|
|
7
|
-
module Google
|
|
8
|
-
module Protobuf
|
|
9
|
-
class Message
|
|
10
|
-
def to_json(*_args)
|
|
11
|
-
{}
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
# This module provides classes for the Makit gem.
|
|
18
|
-
module Makit
|
|
19
|
-
module Proto3Formats
|
|
20
|
-
JSON = [0,
|
|
21
|
-
PRETTY_JSON = 1,
|
|
22
|
-
YAML = 2,
|
|
23
|
-
BINARY = 3].freeze
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# This class provide methods for serializing and deserializing objects.
|
|
27
|
-
#
|
|
28
|
-
class Serializer
|
|
29
|
-
attr_accessor :format_map
|
|
30
|
-
|
|
31
|
-
def self.save_as(filename, object)
|
|
32
|
-
extension = File.extname(filename)
|
|
33
|
-
case extension
|
|
34
|
-
when ".json"
|
|
35
|
-
File.write(filename, Makit::Serializer.new(Makit::Proto3Formats::PRETTY_JSON).serialize(object))
|
|
36
|
-
when ".yml"
|
|
37
|
-
File.write(filename, Makit::Serializer.new(Makit::Proto3Formats::YAML).serialize(object))
|
|
38
|
-
when ".pb"
|
|
39
|
-
File.binwrite(filename, Makit::Serializer.new(Makit::Proto3Formats::BINARY).serialize(object))
|
|
40
|
-
|
|
41
|
-
# File.write(filename, Makit::Serializer.new(Makit::Proto3Formats::BINARY).serialize(object))
|
|
42
|
-
else
|
|
43
|
-
raise "unsupported file extension: #{extension}"
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def self.open(filename, type)
|
|
48
|
-
extension = File.extname(filename)
|
|
49
|
-
case extension
|
|
50
|
-
when ".json"
|
|
51
|
-
Makit::Serializer.new(Makit::Proto3Formats::PRETTY_JSON).deserialize(type, File.read(filename))
|
|
52
|
-
when ".yml"
|
|
53
|
-
Makit::Serializer.new(Makit::Proto3Formats::YAML).deserialize(type, File.read(filename))
|
|
54
|
-
when ".pb"
|
|
55
|
-
data = File.binread(filename)
|
|
56
|
-
Makit::Serializer.new(Makit::Proto3Formats::BINARY).deserialize(type, data)
|
|
57
|
-
else
|
|
58
|
-
raise "unsupported file extension: #{extension}"
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def initialize(proto3_format = Proto3Formats::PRETTY_JSON)
|
|
63
|
-
@format_maps = {
|
|
64
|
-
::Google::Protobuf::MessageExts => proto3_format,
|
|
65
|
-
}
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
# Serialize an object to a byte[] or a string
|
|
69
|
-
def serialize(object)
|
|
70
|
-
raise "Object is nil" if object.nil?
|
|
71
|
-
raise "object is not of type ::Google::Protobuf::MessageExts" unless object.is_a? ::Google::Protobuf::MessageExts
|
|
72
|
-
|
|
73
|
-
case @format_maps[::Google::Protobuf::MessageExts]
|
|
74
|
-
when Proto3Formats::JSON
|
|
75
|
-
# puts "Serializing to protobuf json format"
|
|
76
|
-
object.to_json
|
|
77
|
-
when Proto3Formats::PRETTY_JSON
|
|
78
|
-
# puts "Serializing to protobuf pretty json format"
|
|
79
|
-
json = object.to_json
|
|
80
|
-
JSON.pretty_generate(JSON.parse(json))
|
|
81
|
-
when Proto3Formats::YAML
|
|
82
|
-
# puts "Serializing to protobuf yaml format"
|
|
83
|
-
data = JSON.parse(object.to_json)
|
|
84
|
-
data.to_yaml.sub(/^---\n/, "")
|
|
85
|
-
when Proto3Formats::BINARY
|
|
86
|
-
# puts "Serializing to protobuf binary format"
|
|
87
|
-
object.to_proto
|
|
88
|
-
else
|
|
89
|
-
raise "Unknown serialization format"
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
# Deserialize a byte[] or a string to an object
|
|
94
|
-
def deserialize(type, data)
|
|
95
|
-
raise "data is nil" if data.nil?
|
|
96
|
-
|
|
97
|
-
case @format_maps[::Google::Protobuf::MessageExts]
|
|
98
|
-
when Proto3Formats::JSON
|
|
99
|
-
raise "data is not of type string" unless data.is_a? String
|
|
100
|
-
|
|
101
|
-
json = data
|
|
102
|
-
# puts "Deserializing from protobuf json format into type #{type}"
|
|
103
|
-
# use the from_json method to deserialize the object
|
|
104
|
-
type.decode_json(json)
|
|
105
|
-
when Proto3Formats::PRETTY_JSON
|
|
106
|
-
raise "data is not of type string" unless data.is_a? String
|
|
107
|
-
|
|
108
|
-
json = data
|
|
109
|
-
# puts "Deserializing from protobuf pretty json format into type #{type}"
|
|
110
|
-
# use the from_json method to deserialize the object
|
|
111
|
-
type.decode_json(json)
|
|
112
|
-
when Proto3Formats::YAML
|
|
113
|
-
raise "data is not of type string" unless data.is_a? String
|
|
114
|
-
|
|
115
|
-
yaml = data
|
|
116
|
-
# convert yaml to json
|
|
117
|
-
json = JSON.pretty_generate(YAML.safe_load(yaml))
|
|
118
|
-
# puts "Deserializing from protobuf yaml format into type #{type}"
|
|
119
|
-
type.decode_json(json)
|
|
120
|
-
when Proto3Formats::BINARY
|
|
121
|
-
# raise "data is not of type byte[]" if !data.is_a? Array
|
|
122
|
-
bytes = data
|
|
123
|
-
# puts "Deserializing from protobuf binary format into type #{type}"
|
|
124
|
-
type.decode(bytes)
|
|
125
|
-
else
|
|
126
|
-
raise "Unknown serialization format"
|
|
127
|
-
end
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
begin
|
|
4
|
+
require "google/protobuf"
|
|
5
|
+
rescue LoadError
|
|
6
|
+
# google-protobuf gem not available, define a minimal protobuf interface
|
|
7
|
+
module Google
|
|
8
|
+
module Protobuf
|
|
9
|
+
class Message
|
|
10
|
+
def to_json(*_args)
|
|
11
|
+
{}
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
# This module provides classes for the Makit gem.
|
|
18
|
+
module Makit
|
|
19
|
+
module Proto3Formats
|
|
20
|
+
JSON = [0,
|
|
21
|
+
PRETTY_JSON = 1,
|
|
22
|
+
YAML = 2,
|
|
23
|
+
BINARY = 3].freeze
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# This class provide methods for serializing and deserializing objects.
|
|
27
|
+
#
|
|
28
|
+
class Serializer
|
|
29
|
+
attr_accessor :format_map
|
|
30
|
+
|
|
31
|
+
def self.save_as(filename, object)
|
|
32
|
+
extension = File.extname(filename)
|
|
33
|
+
case extension
|
|
34
|
+
when ".json"
|
|
35
|
+
File.write(filename, Makit::Serializer.new(Makit::Proto3Formats::PRETTY_JSON).serialize(object))
|
|
36
|
+
when ".yml"
|
|
37
|
+
File.write(filename, Makit::Serializer.new(Makit::Proto3Formats::YAML).serialize(object))
|
|
38
|
+
when ".pb"
|
|
39
|
+
File.binwrite(filename, Makit::Serializer.new(Makit::Proto3Formats::BINARY).serialize(object))
|
|
40
|
+
|
|
41
|
+
# File.write(filename, Makit::Serializer.new(Makit::Proto3Formats::BINARY).serialize(object))
|
|
42
|
+
else
|
|
43
|
+
raise "unsupported file extension: #{extension}"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def self.open(filename, type)
|
|
48
|
+
extension = File.extname(filename)
|
|
49
|
+
case extension
|
|
50
|
+
when ".json"
|
|
51
|
+
Makit::Serializer.new(Makit::Proto3Formats::PRETTY_JSON).deserialize(type, File.read(filename))
|
|
52
|
+
when ".yml"
|
|
53
|
+
Makit::Serializer.new(Makit::Proto3Formats::YAML).deserialize(type, File.read(filename))
|
|
54
|
+
when ".pb"
|
|
55
|
+
data = File.binread(filename)
|
|
56
|
+
Makit::Serializer.new(Makit::Proto3Formats::BINARY).deserialize(type, data)
|
|
57
|
+
else
|
|
58
|
+
raise "unsupported file extension: #{extension}"
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def initialize(proto3_format = Proto3Formats::PRETTY_JSON)
|
|
63
|
+
@format_maps = {
|
|
64
|
+
::Google::Protobuf::MessageExts => proto3_format,
|
|
65
|
+
}
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Serialize an object to a byte[] or a string
|
|
69
|
+
def serialize(object)
|
|
70
|
+
raise "Object is nil" if object.nil?
|
|
71
|
+
raise "object is not of type ::Google::Protobuf::MessageExts" unless object.is_a? ::Google::Protobuf::MessageExts
|
|
72
|
+
|
|
73
|
+
case @format_maps[::Google::Protobuf::MessageExts]
|
|
74
|
+
when Proto3Formats::JSON
|
|
75
|
+
# puts "Serializing to protobuf json format"
|
|
76
|
+
object.to_json
|
|
77
|
+
when Proto3Formats::PRETTY_JSON
|
|
78
|
+
# puts "Serializing to protobuf pretty json format"
|
|
79
|
+
json = object.to_json
|
|
80
|
+
JSON.pretty_generate(JSON.parse(json))
|
|
81
|
+
when Proto3Formats::YAML
|
|
82
|
+
# puts "Serializing to protobuf yaml format"
|
|
83
|
+
data = JSON.parse(object.to_json)
|
|
84
|
+
data.to_yaml.sub(/^---\n/, "")
|
|
85
|
+
when Proto3Formats::BINARY
|
|
86
|
+
# puts "Serializing to protobuf binary format"
|
|
87
|
+
object.to_proto
|
|
88
|
+
else
|
|
89
|
+
raise "Unknown serialization format"
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Deserialize a byte[] or a string to an object
|
|
94
|
+
def deserialize(type, data)
|
|
95
|
+
raise "data is nil" if data.nil?
|
|
96
|
+
|
|
97
|
+
case @format_maps[::Google::Protobuf::MessageExts]
|
|
98
|
+
when Proto3Formats::JSON
|
|
99
|
+
raise "data is not of type string" unless data.is_a? String
|
|
100
|
+
|
|
101
|
+
json = data
|
|
102
|
+
# puts "Deserializing from protobuf json format into type #{type}"
|
|
103
|
+
# use the from_json method to deserialize the object
|
|
104
|
+
type.decode_json(json)
|
|
105
|
+
when Proto3Formats::PRETTY_JSON
|
|
106
|
+
raise "data is not of type string" unless data.is_a? String
|
|
107
|
+
|
|
108
|
+
json = data
|
|
109
|
+
# puts "Deserializing from protobuf pretty json format into type #{type}"
|
|
110
|
+
# use the from_json method to deserialize the object
|
|
111
|
+
type.decode_json(json)
|
|
112
|
+
when Proto3Formats::YAML
|
|
113
|
+
raise "data is not of type string" unless data.is_a? String
|
|
114
|
+
|
|
115
|
+
yaml = data
|
|
116
|
+
# convert yaml to json
|
|
117
|
+
json = JSON.pretty_generate(YAML.safe_load(yaml))
|
|
118
|
+
# puts "Deserializing from protobuf yaml format into type #{type}"
|
|
119
|
+
type.decode_json(json)
|
|
120
|
+
when Proto3Formats::BINARY
|
|
121
|
+
# raise "data is not of type byte[]" if !data.is_a? Array
|
|
122
|
+
bytes = data
|
|
123
|
+
# puts "Deserializing from protobuf binary format into type #{type}"
|
|
124
|
+
type.decode(bytes)
|
|
125
|
+
else
|
|
126
|
+
raise "Unknown serialization format"
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|