rake_secrets 0.1.0.pre.1 → 0.1.0.pre.3

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: af937c9a5fbea99d7a4aaca80b06798d815c10756179009fcc11ac30b7806958
4
- data.tar.gz: b76e39b7f89e8c6ca0a8144ddb7cdcd415809edd7c1f53d0b8d6110cc3260ccd
3
+ metadata.gz: 74d4dd4e8fc036cfe4489f8998c46d8841b298cdd0b50583c7233e8fdd5d8aed
4
+ data.tar.gz: b1e2cba8af58326856a87aaaa0cc60d494b4892e52b8be21850b17ba1030156e
5
5
  SHA512:
6
- metadata.gz: 316029e4aee29d648f671009258c0de6e922c1f12288b848a974552e4ca46aabe7c5e62956c76d257d86352181af376eb49771d1855908fa2aa3d9618479fa7d
7
- data.tar.gz: 6e380a6ee636e0d4ae291feed8df07236e6da769eff0effe7dcf3bf86714084c6794d6e9e44bd541af92fc23838f907951c8eee767f8cd2d2a875fbfe2bbcfe5
6
+ metadata.gz: da7bd3843a0d2bf0515e6c92f00427d97d3d589f7971c406e8b6ee94e5cd73ca8036a73c856525724a6cc8b416e225eb2cd368af540ba42a99f4123887d5463b
7
+ data.tar.gz: '080cfd5e18baeee7134bcd6285483b4bfdf0790656842fc28f391e3ec11a34a9ff1f8daf5042bde61077122798008c9cfc0535e5cc65ac0182ab3e04ec73fa12'
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rake_secrets (0.1.0.pre.1)
4
+ rake_secrets (0.1.0.pre.3)
5
5
  colored2 (~> 3.1)
6
6
  rake_factory (= 0.32.0.pre.2)
7
7
 
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rake_factory'
4
+
5
+ module RakeSecrets
6
+ module Storage
7
+ class UnsupportedOperationError < StandardError
8
+ end
9
+
10
+ class Base
11
+ def store(_path, _content)
12
+ raise(UnsupportedOperationError, '#store not supported.')
13
+ end
14
+
15
+ def remove(_path)
16
+ raise(UnsupportedOperationError, '#remove not supported.')
17
+ end
18
+
19
+ def get(_path)
20
+ raise(UnsupportedOperationError, '#get not supported.')
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './base'
4
+
5
+ module RakeSecrets
6
+ module Storage
7
+ class InMemory < Base
8
+ def initialize(persistence = {})
9
+ super()
10
+ @persistence = persistence
11
+ end
12
+
13
+ def store(path, content)
14
+ @persistence[path] = content
15
+ end
16
+
17
+ def remove(path)
18
+ @persistence.delete(path)
19
+ end
20
+
21
+ def get(path)
22
+ @persistence[path]
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'storage/in_memory'
4
+
5
+ module RakeSecrets
6
+ module Storage
7
+ class << self
8
+ def in_memory(initial = {})
9
+ InMemory.new(initial)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rake_factory'
4
+
5
+ require_relative '../transformers'
6
+
7
+ module RakeSecrets
8
+ module Tasks
9
+ class Generate < RakeFactory::Task
10
+ default_name :generate
11
+ default_description(RakeFactory::DynamicValue.new do |t|
12
+ "Generates and stores the '#{t.id}' secret."
13
+ end)
14
+
15
+ parameter :id, required: true
16
+ parameter :specification, required: true
17
+ parameter :backend, required: true
18
+ parameter :path, required: true
19
+ parameter :transformer, default: Transformers.identity
20
+
21
+ action do
22
+ puts("Generating '#{id}' secret...")
23
+ secret = specification.generate
24
+ transformed = transformer.transform(secret)
25
+ backend.store(path, transformed)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'tasks/placeholder'
3
+ require_relative 'tasks/generate'
4
4
 
5
5
  module RakeSecrets
6
6
  module Tasks
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'erb'
4
+
5
+ module RakeSecrets
6
+ class Template
7
+ def self.from_file(path)
8
+ new(File.read(path))
9
+ end
10
+
11
+ def initialize(contents)
12
+ @contents = contents
13
+ end
14
+
15
+ def render(parameters = {})
16
+ context = Object.new
17
+ parameters.each do |key, value|
18
+ context.instance_variable_set("@#{key}", value)
19
+ end
20
+ context_binding = context.instance_eval { binding }
21
+ ERB.new(@contents).result(context_binding)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../template'
4
+
5
+ module RakeSecrets
6
+ module Transformers
7
+ class ERBTemplate
8
+ def initialize(opts)
9
+ super()
10
+ @template = Template.new(opts[:content])
11
+ end
12
+
13
+ def transform(value)
14
+ @template.render(value: value)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RakeSecrets
4
+ module Transformers
5
+ class Identity
6
+ def transform(value)
7
+ value
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'transformers/erb_template'
4
+ require_relative 'transformers/identity'
5
+
6
+ module RakeSecrets
7
+ module Transformers
8
+ class << self
9
+ def erb_template(opts)
10
+ ERBTemplate.new(opts)
11
+ end
12
+
13
+ def identity
14
+ Identity.new
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './character_set'
4
+
5
+ module RakeSecrets
6
+ module Types
7
+ class Alphabetic
8
+ LOWERCASE_CHARACTERS = ('a'..'z').to_a
9
+ UPPERCASE_CHARACTERS = ('A'..'Z').to_a
10
+
11
+ def initialize(opts = {})
12
+ @delegate = CharacterSet.new(
13
+ character_set(opts[:case]),
14
+ length: opts[:length] || 32
15
+ )
16
+ end
17
+
18
+ def generate
19
+ @delegate.generate
20
+ end
21
+
22
+ private
23
+
24
+ def character_set(case_type)
25
+ characters = []
26
+ characters += UPPERCASE_CHARACTERS if %i[upper both].include?(case_type)
27
+ characters += LOWERCASE_CHARACTERS unless case_type == :upper
28
+ characters
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './character_set'
4
+
5
+ module RakeSecrets
6
+ module Types
7
+ class Alphanumeric
8
+ LOWERCASE_CHARACTERS = ('a'..'z').to_a
9
+ UPPERCASE_CHARACTERS = ('A'..'Z').to_a
10
+ NUMBER_CHARACTERS = ('0'..'9').to_a
11
+
12
+ def initialize(opts = {})
13
+ @delegate = CharacterSet.new(
14
+ character_set(opts[:case]),
15
+ length: opts[:length] || 32
16
+ )
17
+ end
18
+
19
+ def generate
20
+ @delegate.generate
21
+ end
22
+
23
+ private
24
+
25
+ def character_set(case_type)
26
+ characters = NUMBER_CHARACTERS
27
+ characters += UPPERCASE_CHARACTERS if %i[upper both].include?(case_type)
28
+ characters += LOWERCASE_CHARACTERS unless case_type == :upper
29
+ characters
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ module RakeSecrets
6
+ module Types
7
+ class CharacterSet
8
+ def initialize(character_set, opts = {})
9
+ @character_set = character_set
10
+ @character_count = character_set.length
11
+ @length = opts[:length] || 32
12
+ end
13
+
14
+ def generate
15
+ (1..@length)
16
+ .collect { @character_set[random_index] }
17
+ .join
18
+ end
19
+
20
+ private
21
+
22
+ def random_index
23
+ SecureRandom.random_number(@character_count)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RakeSecrets
4
+ module Types
5
+ class Constant
6
+ def initialize(value)
7
+ @value = value
8
+ end
9
+
10
+ def generate
11
+ @value
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './character_set'
4
+
5
+ module RakeSecrets
6
+ module Types
7
+ class Numeric
8
+ NUMBER_CHARACTERS = ('0'..'9').to_a
9
+
10
+ def initialize(opts = {})
11
+ @delegate = CharacterSet.new(
12
+ NUMBER_CHARACTERS,
13
+ length: opts[:length] || 32
14
+ )
15
+ end
16
+
17
+ def generate
18
+ @delegate.generate
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'types/constant'
4
+ require_relative 'types/character_set'
5
+ require_relative 'types/alphabetic'
6
+ require_relative 'types/alphanumeric'
7
+ require_relative 'types/numeric'
8
+
9
+ module RakeSecrets
10
+ module Types
11
+ class << self
12
+ def constant(value)
13
+ Constant.new(value)
14
+ end
15
+
16
+ def character_set(set, opts = {})
17
+ CharacterSet.new(set, opts)
18
+ end
19
+
20
+ def alphabetic(opts = {})
21
+ Alphabetic.new(opts)
22
+ end
23
+
24
+ def alphanumeric(opts = {})
25
+ Alphanumeric.new(opts)
26
+ end
27
+
28
+ def numeric(opts = {})
29
+ Numeric.new(opts)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RakeSecrets
4
- VERSION = '0.1.0.pre.1'
4
+ VERSION = '0.1.0.pre.3'
5
5
  end
data/lib/rake_secrets.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rake_secrets/tasks'
4
+ require 'rake_secrets/storage'
5
+ require 'rake_secrets/types'
6
+ require 'rake_secrets/transformers'
4
7
  require 'rake_secrets/version'
5
8
 
6
9
  module RakeSecrets
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake_secrets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre.1
4
+ version: 0.1.0.pre.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - InfraBlocks Maintainers
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-02-06 00:00:00.000000000 Z
11
+ date: 2023-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colored2
@@ -55,8 +55,21 @@ files:
55
55
  - bin/setup
56
56
  - lib/rake_secrets.rb
57
57
  - lib/rake_secrets/mixins/support.rb
58
+ - lib/rake_secrets/storage.rb
59
+ - lib/rake_secrets/storage/base.rb
60
+ - lib/rake_secrets/storage/in_memory.rb
58
61
  - lib/rake_secrets/tasks.rb
59
- - lib/rake_secrets/tasks/placeholder.rb
62
+ - lib/rake_secrets/tasks/generate.rb
63
+ - lib/rake_secrets/template.rb
64
+ - lib/rake_secrets/transformers.rb
65
+ - lib/rake_secrets/transformers/erb_template.rb
66
+ - lib/rake_secrets/transformers/identity.rb
67
+ - lib/rake_secrets/types.rb
68
+ - lib/rake_secrets/types/alphabetic.rb
69
+ - lib/rake_secrets/types/alphanumeric.rb
70
+ - lib/rake_secrets/types/character_set.rb
71
+ - lib/rake_secrets/types/constant.rb
72
+ - lib/rake_secrets/types/numeric.rb
60
73
  - lib/rake_secrets/version.rb
61
74
  - rake_secrets.gemspec
62
75
  homepage: https://github.com/infrablocks/rake_secrets
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rake_factory'
4
-
5
- module RakeSecrets
6
- module Tasks
7
- class Placeholder < RakeFactory::Task
8
- default_name :placeholder
9
- default_description 'Create a placeholder secrets for testing access etc.'
10
-
11
- action do
12
- puts('Creating placeholder secret...')
13
- end
14
- end
15
- end
16
- end