trocla 0.4.0 → 0.5.0

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.
data/lib/trocla/util.rb CHANGED
@@ -1,30 +1,30 @@
1
1
  require 'securerandom'
2
2
  class Trocla
3
+ # Utils
3
4
  class Util
4
5
  class << self
5
- def random_str(length=12, charset='default')
6
- _charsets = charsets[charset] || charsets['default']
7
- (1..length).collect{|a| _charsets[SecureRandom.random_number(_charsets.size)] }.join.to_s
6
+ def random_str(length = 12, charset = 'default')
7
+ char = charsets[charset] || charsets['default']
8
+ charsets_size = char.size
9
+ (1..length).collect { |_| char[rand_num(charsets_size)] }.join.to_s
8
10
  end
9
11
 
10
- def salt(length=8)
11
- alphanumeric_size = alphanumeric.size
12
- (1..length).collect{|a| alphanumeric[SecureRandom.random_number(alphanumeric_size)] }.join.to_s
12
+ def salt(length = 8)
13
+ random_str(length, 'alphanumeric')
13
14
  end
14
15
 
15
16
  private
16
17
 
18
+ def rand_num(n)
19
+ SecureRandom.random_number(n)
20
+ end
21
+
17
22
  def charsets
18
23
  @charsets ||= begin
19
24
  h = {
20
- 'default' => chars,
21
- 'alphanumeric' => alphanumeric,
22
- 'shellsafe' => shellsafe,
23
- 'windowssafe' => windowssafe,
24
- 'numeric' => numeric,
25
- 'hexadecimal' => hexadecimal,
26
- 'consolesafe' => consolesafe,
27
- 'typesafe' => typesafe,
25
+ 'default' => chars, 'alphanumeric' => alphanumeric, 'shellsafe' => shellsafe,
26
+ 'windowssafe' => windowssafe, 'numeric' => numeric, 'hexadecimal' => hexadecimal,
27
+ 'consolesafe' => consolesafe, 'typesafe' => typesafe
28
28
  }
29
29
  h.each { |k, v| h[k] = v.uniq }
30
30
  end
@@ -33,36 +33,47 @@ class Trocla
33
33
  def chars
34
34
  @chars ||= shellsafe + special_chars
35
35
  end
36
+
36
37
  def shellsafe
37
38
  @shellsafe ||= alphanumeric + shellsafe_chars
38
39
  end
40
+
39
41
  def windowssafe
40
42
  @windowssafe ||= alphanumeric + windowssafe_chars
41
43
  end
44
+
42
45
  def consolesafe
43
46
  @consolesafe ||= alphanumeric + consolesafe_chars
44
47
  end
48
+
45
49
  def hexadecimal
46
50
  @hexadecimal ||= numeric + ('a'..'f').to_a
47
51
  end
52
+
48
53
  def alphanumeric
49
54
  @alphanumeric ||= ('a'..'z').to_a + ('A'..'Z').to_a + numeric
50
55
  end
56
+
51
57
  def numeric
52
58
  @numeric ||= ('0'..'9').to_a
53
59
  end
60
+
54
61
  def typesafe
55
62
  @typesafe ||= ('a'..'x').to_a - ['i'] - ['l'] + ('A'..'X').to_a - ['I'] - ['L'] + ('1'..'9').to_a
56
63
  end
64
+
57
65
  def special_chars
58
- @special_chars ||= "*()&![]{}-".split(//)
66
+ @special_chars ||= '*()&![]{}-'.split(//)
59
67
  end
68
+
60
69
  def shellsafe_chars
61
- @shellsafe_chars ||= "+%/@=?_.,:".split(//)
70
+ @shellsafe_chars ||= '+%/@=?_.,:'.split(//)
62
71
  end
72
+
63
73
  def windowssafe_chars
64
- @windowssafe_chars ||= "+%/@=?_.,".split(//)
74
+ @windowssafe_chars ||= '+%/@=?_.,'.split(//)
65
75
  end
76
+
66
77
  def consolesafe_chars
67
78
  @consolesafe_chars ||= '+.-,_'.split(//)
68
79
  end
@@ -1,20 +1,23 @@
1
1
  # encoding: utf-8
2
+
2
3
  class Trocla
4
+ # VERSION
3
5
  class VERSION
4
6
  version = {}
5
7
  File.read(File.join(File.dirname(__FILE__), '../', 'VERSION')).each_line do |line|
6
- type, value = line.chomp.split(":")
8
+ type, value = line.chomp.split(':')
7
9
  next if type =~ /^\s+$/ || value =~ /^\s+$/
10
+
8
11
  version[type] = value
9
12
  end
10
-
13
+
11
14
  MAJOR = version['major']
12
15
  MINOR = version['minor']
13
16
  PATCH = version['patch']
14
17
  BUILD = version['build']
15
-
18
+
16
19
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
17
-
20
+
18
21
  def self.version
19
22
  STRING
20
23
  end
data/lib/trocla.rb CHANGED
@@ -4,16 +4,17 @@ require 'trocla/formats'
4
4
  require 'trocla/encryptions'
5
5
  require 'trocla/stores'
6
6
 
7
+ # Trocla class
7
8
  class Trocla
8
- def initialize(config_file=nil)
9
+ def initialize(config_file = nil)
9
10
  if config_file
10
11
  @config_file = File.expand_path(config_file)
11
- elsif File.exists?(def_config_file=File.expand_path('~/.troclarc.yaml')) || File.exists?(def_config_file=File.expand_path('/etc/troclarc.yaml'))
12
+ elsif File.exist?(def_config_file = File.expand_path('~/.troclarc.yaml')) || File.exist?(def_config_file = File.expand_path('/etc/troclarc.yaml'))
12
13
  @config_file = def_config_file
13
14
  end
14
15
  end
15
16
 
16
- def self.open(config_file=nil)
17
+ def self.open(config_file = nil)
17
18
  trocla = Trocla.new(config_file)
18
19
 
19
20
  if block_given?
@@ -24,78 +25,76 @@ class Trocla
24
25
  end
25
26
  end
26
27
 
27
- def password(key,format,options={})
28
+ def password(key, format, options={})
28
29
  # respect a default profile, but let the
29
30
  # profiles win over the default options
30
31
  options['profiles'] ||= config['options']['profiles']
31
- if options['profiles']
32
- options = merge_profiles(options['profiles']).merge(options)
33
- end
32
+ options = merge_profiles(options['profiles']).merge(options) if options['profiles']
34
33
  options = config['options'].merge(options)
35
34
 
36
35
  raise "Format #{format} is not supported! Supported formats: #{Trocla::Formats.all.join(', ')}" unless Trocla::Formats::available?(format)
37
36
 
38
- unless (password=get_password(key,format,options)).nil?
37
+ unless (password = get_password(key, format, options)).nil?
39
38
  return password
40
39
  end
41
40
 
42
- plain_pwd = get_password(key,'plain',options)
41
+ plain_pwd = get_password(key, 'plain', options)
43
42
  if options['random'] && plain_pwd.nil?
44
- plain_pwd = Trocla::Util.random_str(options['length'].to_i,options['charset'])
45
- set_password(key,'plain',plain_pwd,options) unless format == 'plain'
43
+ plain_pwd = Trocla::Util.random_str(options['length'].to_i, options['charset'])
44
+ set_password(key, 'plain', plain_pwd, options) unless format == 'plain'
46
45
  elsif !options['random'] && plain_pwd.nil?
47
46
  raise "Password must be present as plaintext if you don't want a random password"
48
47
  end
49
- pwd = self.formats(format).format(plain_pwd,options)
48
+ pwd = self.formats(format).format(plain_pwd, options)
50
49
  # it's possible that meanwhile another thread/process was faster in
51
50
  # formating the password. But we want todo that second lookup
52
51
  # only for expensive formats
53
52
  if self.formats(format).expensive?
54
- get_password(key,format,options) || set_password(key, format, pwd, options)
53
+ get_password(key, format, options) || set_password(key, format, pwd, options)
55
54
  else
56
55
  set_password(key, format, pwd, options)
57
56
  end
58
57
  end
59
58
 
60
- def get_password(key, format, options={})
61
- render(format,decrypt(store.get(key,format)),options)
59
+ def get_password(key, format, options = {})
60
+ render(format, decrypt(store.get(key, format)), options)
62
61
  end
63
62
 
64
- def reset_password(key,format,options={})
65
- delete_password(key,format)
66
- password(key,format,options)
63
+ def reset_password(key, format, options = {})
64
+ delete_password(key, format)
65
+ password(key, format, options)
67
66
  end
68
67
 
69
- def delete_password(key,format=nil,options={})
70
- v = store.delete(key,format)
68
+ def delete_password(key, format = nil, options = {})
69
+ v = store.delete(key, format)
71
70
  if v.is_a?(Hash)
72
- Hash[*v.map do |f,encrypted_value|
73
- [f,render(format,decrypt(encrypted_value),options)]
71
+ Hash[*v.map do |f, encrypted_value|
72
+ [f, render(format, decrypt(encrypted_value), options)]
74
73
  end.flatten]
75
74
  else
76
- render(format,decrypt(v),options)
75
+ render(format, decrypt(v), options)
77
76
  end
78
77
  end
79
78
 
80
- def set_password(key,format,password,options={})
81
- store.set(key,format,encrypt(password),options)
82
- render(format,password,options)
79
+ def set_password(key, format, password, options = {})
80
+ store.set(key, format, encrypt(password), options)
81
+ render(format, password, options)
83
82
  end
84
83
 
85
- def available_format(key, options={})
86
- render(false,store.formats(key),options)
84
+ def available_format(key, options = {})
85
+ render(false, store.formats(key), options)
87
86
  end
88
87
 
89
- def search_key(key, options={})
90
- render(false,store.search(key),options)
88
+ def search_key(key, options = {})
89
+ render(false, store.search(key), options)
91
90
  end
92
91
 
93
92
  def formats(format)
94
- (@format_cache||={})[format] ||= Trocla::Formats[format].new(self)
93
+ (@format_cache ||= {})[format] ||= Trocla::Formats[format].new(self)
95
94
  end
96
95
 
97
96
  def encryption
98
- @encryption ||= Trocla::Encryptions[config['encryption']].new(config['encryption_options'],self)
97
+ @encryption ||= Trocla::Encryptions[config['encryption']].new(config['encryption_options'], self)
99
98
  end
100
99
 
101
100
  def config
@@ -107,6 +106,7 @@ class Trocla
107
106
  end
108
107
 
109
108
  private
109
+
110
110
  def store
111
111
  @store ||= build_store
112
112
  end
@@ -114,19 +114,20 @@ class Trocla
114
114
  def build_store
115
115
  s = config['store']
116
116
  clazz = if s.is_a?(Symbol)
117
- Trocla::Stores[s]
118
- else
119
- require config['store_require'] if config['store_require']
120
- eval(s)
121
- end
122
- clazz.new(config['store_options'],self)
117
+ Trocla::Stores[s]
118
+ else
119
+ require config['store_require'] if config['store_require']
120
+ eval(s)
121
+ end
122
+ clazz.new(config['store_options'], self)
123
123
  end
124
124
 
125
125
  def read_config
126
126
  if @config_file.nil?
127
127
  default_config
128
128
  else
129
- raise "Configfile #{@config_file} does not exist!" unless File.exists?(@config_file)
129
+ raise "Configfile #{@config_file} does not exist!" unless File.exist?(@config_file)
130
+
130
131
  c = default_config.merge(YAML.load(File.read(@config_file)))
131
132
  c['profiles'] = default_config['profiles'].merge(c['profiles'])
132
133
  # migrate all options to new store options
@@ -144,12 +145,13 @@ class Trocla
144
145
 
145
146
  def decrypt(value)
146
147
  return nil if value.nil?
148
+
147
149
  encryption.decrypt(value)
148
150
  end
149
151
 
150
- def render(format,output,options={})
151
- if format && output && f=self.formats(format)
152
- f.render(output,options['render']||{})
152
+ def render(format, output, options = {})
153
+ if format && output && f = self.formats(format)
154
+ f.render(output, options['render'] || {})
153
155
  else
154
156
  output
155
157
  end
@@ -157,14 +159,14 @@ class Trocla
157
159
 
158
160
  def default_config
159
161
  require 'yaml'
160
- YAML.load(File.read(File.expand_path(File.join(File.dirname(__FILE__),'trocla','default_config.yaml'))))
162
+ YAML.load(File.read(File.expand_path(File.join(File.dirname(__FILE__), 'trocla', 'default_config.yaml'))))
161
163
  end
162
164
 
163
165
  def merge_profiles(profiles)
164
- Array(profiles).inject({}) do |res,profile|
166
+ Array(profiles).inject({}) do |res, profile|
165
167
  raise "No such profile #{profile} defined" unless profile_hash = config['profiles'][profile]
168
+
166
169
  profile_hash.merge(res)
167
170
  end
168
171
  end
169
-
170
172
  end
@@ -0,0 +1,25 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe 'Trocla::Format::Pgsql' do
4
+ before(:each) do
5
+ expect_any_instance_of(Trocla).to receive(:read_config).and_return(test_config)
6
+ @trocla = Trocla.new
7
+ end
8
+
9
+ describe 'default pgsql' do
10
+ it 'create a pgsql password keypair without options in sha256' do
11
+ pass = @trocla.password('pgsql_password_sh256', 'pgsql', {})
12
+ expect(pass).to match(/^SCRAM-SHA-256\$(.*):(.*)\$(.*):/)
13
+ end
14
+ end
15
+
16
+ describe 'pgsql in md5 encode' do
17
+ it 'create a pgsql password in md5 encode' do
18
+ pass = @trocla.password(
19
+ 'pgsql_password_md5', 'pgsql',
20
+ { 'username' => 'toto', 'encode' => 'md5' }
21
+ )
22
+ expect(pass).to match(/^md5/)
23
+ end
24
+ end
25
+ end
data/spec/trocla_spec.rb CHANGED
@@ -72,6 +72,9 @@ describe "Trocla" do
72
72
  expect(pwd).not_to match(/[={}\[\]\?%\*()&!]+/)
73
73
  end
74
74
  it 'is possible to combine profiles but first profile wins 3' do
75
+ # mysql profile uses a 32 long random pwd with shell safe characters
76
+ # and we want to use a fixed random str here https://github.com/duritong/trocla/issues/55
77
+ allow(Trocla::Util).to receive(:random_str).with(32,'shellsafe') { "jmNi6+7dsUn@H?vfbXCq=ULEGPW,u:hu" }
75
78
  pwd = @trocla.password('some_test3','plain', 'profiles' => ['mysql','login'])
76
79
  expect(pwd).not_to be_empty
77
80
  expect(pwd.length).to eq(32)
data/trocla.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: trocla 0.4.0 ruby lib
5
+ # stub: trocla 0.5.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "trocla".freeze
9
- s.version = "0.4.0"
9
+ s.version = "0.5.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["mh".freeze]
14
- s.date = "2021-05-11"
14
+ s.date = "2023-01-01"
15
15
  s.description = "Trocla helps you to generate random passwords and to store them in various formats (plain, MD5, bcrypt) for later retrival.".freeze
16
16
  s.email = "mh+trocla@immerda.ch".freeze
17
17
  s.executables = ["trocla".freeze]
@@ -21,8 +21,8 @@ Gem::Specification.new do |s|
21
21
  ]
22
22
  s.files = [
23
23
  ".document",
24
+ ".github/workflows/ruby.yml",
24
25
  ".rspec",
25
- ".travis.yml",
26
26
  "CHANGELOG.md",
27
27
  "Gemfile",
28
28
  "LICENSE.txt",
@@ -47,6 +47,7 @@ Gem::Specification.new do |s|
47
47
  "lib/trocla/formats/sha512crypt.rb",
48
48
  "lib/trocla/formats/ssha.rb",
49
49
  "lib/trocla/formats/sshkey.rb",
50
+ "lib/trocla/formats/wireguard.rb",
50
51
  "lib/trocla/formats/x509.rb",
51
52
  "lib/trocla/store.rb",
52
53
  "lib/trocla/stores.rb",
@@ -59,6 +60,7 @@ Gem::Specification.new do |s|
59
60
  "spec/spec_helper.rb",
60
61
  "spec/trocla/encryptions/none_spec.rb",
61
62
  "spec/trocla/encryptions/ssl_spec.rb",
63
+ "spec/trocla/formats/pgsql_spec.rb",
62
64
  "spec/trocla/formats/sshkey_spec.rb",
63
65
  "spec/trocla/formats/x509_spec.rb",
64
66
  "spec/trocla/store/memory_spec.rb",
@@ -69,7 +71,7 @@ Gem::Specification.new do |s|
69
71
  ]
70
72
  s.homepage = "https://tech.immerda.ch/2011/12/trocla-get-hashed-passwords-out-of-puppet-manifests/".freeze
71
73
  s.licenses = ["GPLv3".freeze]
72
- s.rubygems_version = "3.1.2".freeze
74
+ s.rubygems_version = "3.3.26".freeze
73
75
  s.summary = "Trocla a simple password generator and storage".freeze
74
76
 
75
77
  if s.respond_to? :specification_version then
@@ -77,24 +79,26 @@ Gem::Specification.new do |s|
77
79
  end
78
80
 
79
81
  if s.respond_to? :add_runtime_dependency then
80
- s.add_runtime_dependency(%q<moneta>.freeze, ["~> 1.4.0"])
81
82
  s.add_runtime_dependency(%q<highline>.freeze, ["~> 2.0.0"])
83
+ s.add_runtime_dependency(%q<moneta>.freeze, ["~> 1.4.0"])
82
84
  s.add_runtime_dependency(%q<bcrypt>.freeze, [">= 0"])
85
+ s.add_runtime_dependency(%q<openssl>.freeze, [">= 0"])
83
86
  s.add_runtime_dependency(%q<sshkey>.freeze, [">= 0"])
84
- s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
85
- s.add_development_dependency(%q<rdoc>.freeze, [">= 0"])
86
- s.add_development_dependency(%q<jeweler>.freeze, [">= 0"])
87
87
  s.add_development_dependency(%q<addressable>.freeze, [">= 0"])
88
+ s.add_development_dependency(%q<jeweler>.freeze, [">= 0"])
89
+ s.add_development_dependency(%q<rdoc>.freeze, [">= 0"])
90
+ s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
88
91
  s.add_development_dependency(%q<rspec-pending_for>.freeze, [">= 0"])
89
92
  else
90
- s.add_dependency(%q<moneta>.freeze, ["~> 1.4.0"])
91
93
  s.add_dependency(%q<highline>.freeze, ["~> 2.0.0"])
94
+ s.add_dependency(%q<moneta>.freeze, ["~> 1.4.0"])
92
95
  s.add_dependency(%q<bcrypt>.freeze, [">= 0"])
96
+ s.add_dependency(%q<openssl>.freeze, [">= 0"])
93
97
  s.add_dependency(%q<sshkey>.freeze, [">= 0"])
94
- s.add_dependency(%q<rspec>.freeze, [">= 0"])
95
- s.add_dependency(%q<rdoc>.freeze, [">= 0"])
96
- s.add_dependency(%q<jeweler>.freeze, [">= 0"])
97
98
  s.add_dependency(%q<addressable>.freeze, [">= 0"])
99
+ s.add_dependency(%q<jeweler>.freeze, [">= 0"])
100
+ s.add_dependency(%q<rdoc>.freeze, [">= 0"])
101
+ s.add_dependency(%q<rspec>.freeze, [">= 0"])
98
102
  s.add_dependency(%q<rspec-pending_for>.freeze, [">= 0"])
99
103
  end
100
104
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trocla
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - mh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-11 00:00:00.000000000 Z
11
+ date: 2023-01-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: moneta
14
+ name: highline
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.4.0
19
+ version: 2.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.4.0
26
+ version: 2.0.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: highline
28
+ name: moneta
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 2.0.0
33
+ version: 1.4.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 2.0.0
40
+ version: 1.4.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bcrypt
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: openssl
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: sshkey
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -67,7 +81,7 @@ dependencies:
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
- name: rspec
84
+ name: addressable
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: rdoc
98
+ name: jeweler
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - ">="
@@ -95,7 +109,7 @@ dependencies:
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
- name: jeweler
112
+ name: rdoc
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - ">="
@@ -109,7 +123,7 @@ dependencies:
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
- name: addressable
126
+ name: rspec
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - ">="
@@ -147,8 +161,8 @@ extra_rdoc_files:
147
161
  - README.md
148
162
  files:
149
163
  - ".document"
164
+ - ".github/workflows/ruby.yml"
150
165
  - ".rspec"
151
- - ".travis.yml"
152
166
  - CHANGELOG.md
153
167
  - Gemfile
154
168
  - LICENSE.txt
@@ -173,6 +187,7 @@ files:
173
187
  - lib/trocla/formats/sha512crypt.rb
174
188
  - lib/trocla/formats/ssha.rb
175
189
  - lib/trocla/formats/sshkey.rb
190
+ - lib/trocla/formats/wireguard.rb
176
191
  - lib/trocla/formats/x509.rb
177
192
  - lib/trocla/store.rb
178
193
  - lib/trocla/stores.rb
@@ -185,6 +200,7 @@ files:
185
200
  - spec/spec_helper.rb
186
201
  - spec/trocla/encryptions/none_spec.rb
187
202
  - spec/trocla/encryptions/ssl_spec.rb
203
+ - spec/trocla/formats/pgsql_spec.rb
188
204
  - spec/trocla/formats/sshkey_spec.rb
189
205
  - spec/trocla/formats/x509_spec.rb
190
206
  - spec/trocla/store/memory_spec.rb
@@ -211,7 +227,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
211
227
  - !ruby/object:Gem::Version
212
228
  version: '0'
213
229
  requirements: []
214
- rubygems_version: 3.1.2
230
+ rubygems_version: 3.3.26
215
231
  signing_key:
216
232
  specification_version: 4
217
233
  summary: Trocla a simple password generator and storage
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- language: ruby
2
- sudo: false
3
- rvm:
4
- - jruby
5
- - 2.7.0
6
- - 3.0.0