keeper_secrets_manager 17.0.4 → 17.2.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.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +100 -16
  3. data/Gemfile +6 -3
  4. data/README.md +75 -270
  5. data/Rakefile +1 -1
  6. data/bin/console +47 -0
  7. data/keeper_secrets_manager.gemspec +36 -0
  8. data/lib/keeper_secrets_manager/cache.rb +139 -0
  9. data/lib/keeper_secrets_manager/config_keys.rb +4 -2
  10. data/lib/keeper_secrets_manager/core.rb +993 -452
  11. data/lib/keeper_secrets_manager/crypto.rb +101 -116
  12. data/lib/keeper_secrets_manager/dto/payload.rb +7 -6
  13. data/lib/keeper_secrets_manager/dto.rb +374 -38
  14. data/lib/keeper_secrets_manager/errors.rb +13 -2
  15. data/lib/keeper_secrets_manager/field_types.rb +3 -3
  16. data/lib/keeper_secrets_manager/folder_manager.rb +25 -29
  17. data/lib/keeper_secrets_manager/keeper_globals.rb +11 -17
  18. data/lib/keeper_secrets_manager/notation.rb +202 -93
  19. data/lib/keeper_secrets_manager/notation_enhancements.rb +24 -24
  20. data/lib/keeper_secrets_manager/storage.rb +38 -38
  21. data/lib/keeper_secrets_manager/totp.rb +27 -27
  22. data/lib/keeper_secrets_manager/utils.rb +85 -18
  23. data/lib/keeper_secrets_manager/version.rb +2 -2
  24. data/lib/keeper_secrets_manager.rb +11 -3
  25. metadata +39 -22
  26. data/DEVELOPER_SETUP.md +0 -0
  27. data/MANUAL_TESTING_GUIDE.md +0 -332
  28. data/RUBY_SDK_COMPLETE_DOCUMENTATION.md +0 -354
  29. data/RUBY_SDK_COMPREHENSIVE_SUMMARY.md +0 -192
  30. data/examples/01_quick_start.rb +0 -45
  31. data/examples/02_authentication.rb +0 -82
  32. data/examples/03_retrieve_secrets.rb +0 -81
  33. data/examples/04_create_update_delete.rb +0 -104
  34. data/examples/05_field_types.rb +0 -135
  35. data/examples/06_files.rb +0 -137
  36. data/examples/07_folders.rb +0 -145
  37. data/examples/08_notation.rb +0 -103
  38. data/examples/09_totp.rb +0 -100
  39. data/examples/README.md +0 -89
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: keeper_secrets_manager
3
3
  version: !ruby/object:Gem::Version
4
- version: 17.0.4
4
+ version: 17.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keeper Security
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-06-25 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2026-07-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: base64
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: logger
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
13
41
  description: Ruby SDK for Keeper Secrets Manager - A zero-knowledge platform for managing
14
42
  and protecting infrastructure secrets
15
43
  email:
@@ -21,25 +49,14 @@ files:
21
49
  - ".rspec"
22
50
  - ".ruby-version"
23
51
  - CHANGELOG.md
24
- - DEVELOPER_SETUP.md
25
52
  - Gemfile
26
53
  - LICENSE
27
- - MANUAL_TESTING_GUIDE.md
28
54
  - README.md
29
- - RUBY_SDK_COMPLETE_DOCUMENTATION.md
30
- - RUBY_SDK_COMPREHENSIVE_SUMMARY.md
31
55
  - Rakefile
32
- - examples/01_quick_start.rb
33
- - examples/02_authentication.rb
34
- - examples/03_retrieve_secrets.rb
35
- - examples/04_create_update_delete.rb
36
- - examples/05_field_types.rb
37
- - examples/06_files.rb
38
- - examples/07_folders.rb
39
- - examples/08_notation.rb
40
- - examples/09_totp.rb
41
- - examples/README.md
56
+ - bin/console
57
+ - keeper_secrets_manager.gemspec
42
58
  - lib/keeper_secrets_manager.rb
59
+ - lib/keeper_secrets_manager/cache.rb
43
60
  - lib/keeper_secrets_manager/config_keys.rb
44
61
  - lib/keeper_secrets_manager/core.rb
45
62
  - lib/keeper_secrets_manager/crypto.rb
@@ -63,7 +80,7 @@ metadata:
63
80
  homepage_uri: https://github.com/Keeper-Security/secrets-manager
64
81
  source_code_uri: https://github.com/Keeper-Security/secrets-manager
65
82
  changelog_uri: https://github.com/Keeper-Security/secrets-manager/blob/master/CHANGELOG.md
66
- post_install_message:
83
+ post_install_message:
67
84
  rdoc_options: []
68
85
  require_paths:
69
86
  - lib
@@ -71,15 +88,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
71
88
  requirements:
72
89
  - - ">="
73
90
  - !ruby/object:Gem::Version
74
- version: 2.6.0
91
+ version: 3.1.0
75
92
  required_rubygems_version: !ruby/object:Gem::Requirement
76
93
  requirements:
77
94
  - - ">="
78
95
  - !ruby/object:Gem::Version
79
96
  version: '0'
80
97
  requirements: []
81
- rubygems_version: 3.0.3.1
82
- signing_key:
98
+ rubygems_version: 3.5.22
99
+ signing_key:
83
100
  specification_version: 4
84
101
  summary: Keeper Secrets Manager SDK for Ruby
85
102
  test_files: []
data/DEVELOPER_SETUP.md DELETED
File without changes
@@ -1,332 +0,0 @@
1
- # Manual Testing Guide for Ruby SDK - Non-Ruby Developers
2
-
3
- This guide will walk you through testing the Keeper Secrets Manager Ruby SDK step-by-step, even if you're not familiar with Ruby.
4
-
5
- ## Prerequisites
6
-
7
- ### 1. Install Ruby
8
- ```bash
9
- # Check if Ruby is installed
10
- ruby --version
11
-
12
- # If not installed:
13
- # On macOS with Homebrew:
14
- brew install ruby
15
-
16
- # On Ubuntu/Debian:
17
- sudo apt-get install ruby-full
18
-
19
- # On Windows:
20
- # Download from https://rubyinstaller.org/
21
- ```
22
-
23
- **Required**: Ruby 2.7 or higher
24
-
25
- ### 2. Install Dependencies
26
- ```bash
27
- # Navigate to the Ruby SDK directory
28
- cd /Users/mustinov/Source/secrets-manager/sdk/ruby
29
-
30
- # Install bundler (Ruby's package manager)
31
- gem install bundler
32
-
33
- # Install SDK dependencies
34
- bundle install
35
- ```
36
-
37
- ### 3. Get Your Keeper Token
38
- You need a one-time token from Keeper. It looks like:
39
- ```
40
- US:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
41
- ```
42
-
43
- ## Step-by-Step Testing
44
-
45
- ### Step 1: Create Test Script
46
- Create a new file called `my_test.rb` in the SDK directory:
47
-
48
- ```ruby
49
- #!/usr/bin/env ruby
50
-
51
- # Load the SDK
52
- require_relative 'lib/keeper_secrets_manager'
53
-
54
- # Your token from Keeper
55
- TOKEN = 'US:YOUR_ONE_TIME_TOKEN_HERE'
56
-
57
- # Initialize the SDK
58
- puts "Initializing Keeper SDK..."
59
- sm = KeeperSecretsManager::SecretsManager.new(token: TOKEN)
60
-
61
- puts "\n=== Step 1: List All Secrets ==="
62
- begin
63
- secrets = sm.get_secrets()
64
- puts "Found #{secrets.length} secrets:"
65
- secrets.each do |secret|
66
- puts " - #{secret.title} (UID: #{secret.uid})"
67
- end
68
- rescue => e
69
- puts "Error: #{e.message}"
70
- end
71
-
72
- # Save a secret UID for later tests
73
- if secrets.any?
74
- test_secret_uid = secrets.first.uid
75
- puts "\nUsing secret '#{secrets.first.title}' for testing"
76
- end
77
-
78
- puts "\n=== Step 2: Get Secret Details ==="
79
- if test_secret_uid
80
- secret = sm.get_secrets([test_secret_uid]).first
81
- puts "Title: #{secret.title}"
82
- puts "Type: #{secret.type}"
83
- puts "Fields:"
84
- secret.fields.each do |field|
85
- puts " - #{field['type']}: #{field['value'].first rescue 'N/A'}"
86
- end
87
- end
88
-
89
- puts "\n=== Step 3: Test Notation ==="
90
- # Test notation to get password
91
- notation = "keeper://#{test_secret_uid}/field/password"
92
- password = sm.get_notation(notation)
93
- puts "Password via notation: #{password}"
94
-
95
- puts "\n=== Step 4: List Folders ==="
96
- folders = sm.get_folders()
97
- puts "Found #{folders.length} folders:"
98
- folders.each do |folder|
99
- puts " - #{folder.name} (UID: #{folder.uid})"
100
- end
101
-
102
- # Save folder UID for record creation
103
- if folders.any?
104
- test_folder_uid = folders.first.uid
105
- puts "\nWill use folder '#{folders.first.name}' for new records"
106
- end
107
-
108
- puts "\n=== Step 5: Create New Secret ==="
109
- if test_folder_uid
110
- new_record = KeeperSecretsManager::Dto::KeeperRecord.new(
111
- title: "Test Record - #{Time.now.strftime('%Y-%m-%d %H:%M')}",
112
- type: 'login',
113
- fields: [
114
- { 'type' => 'login', 'value' => ['testuser@example.com'] },
115
- { 'type' => 'password', 'value' => ['MySecurePassword123!'] },
116
- { 'type' => 'url', 'value' => ['https://example.com'] }
117
- ],
118
- notes: 'Created by Ruby SDK test'
119
- )
120
-
121
- options = KeeperSecretsManager::Dto::CreateOptions.new
122
- options.folder_uid = test_folder_uid
123
-
124
- new_uid = sm.create_secret(new_record, options)
125
- puts "Created new secret with UID: #{new_uid}"
126
-
127
- # Save for cleanup
128
- created_uid = new_uid
129
- else
130
- puts "No folders found - skipping record creation"
131
- end
132
-
133
- puts "\n=== Step 6: Update Secret ==="
134
- if created_uid
135
- # Fetch the created record
136
- record = sm.get_secrets([created_uid]).first
137
-
138
- # Update password
139
- record.set_field('password', 'UpdatedPassword456!')
140
- record.notes = "Updated at #{Time.now}"
141
-
142
- sm.update_secret(record)
143
- puts "Updated secret successfully"
144
- end
145
-
146
- puts "\n=== Step 7: File Operations ==="
147
- if created_uid
148
- # Create a test file
149
- test_content = "This is a test file created at #{Time.now}"
150
- File.write('test_upload.txt', test_content)
151
-
152
- # Upload file
153
- file_data = File.read('test_upload.txt', mode: 'rb')
154
- file_uid = sm.upload_file(created_uid, 'test_upload.txt', file_data)
155
- puts "Uploaded file with UID: #{file_uid}"
156
-
157
- # Download file
158
- downloaded = sm.download_file(file_uid)
159
- puts "Downloaded file: #{downloaded['name']} (#{downloaded['size']} bytes)"
160
-
161
- # Save downloaded file
162
- File.write('test_download.txt', downloaded['data'], mode: 'wb')
163
- puts "Saved to test_download.txt"
164
-
165
- # Cleanup
166
- File.delete('test_upload.txt') if File.exist?('test_upload.txt')
167
- File.delete('test_download.txt') if File.exist?('test_download.txt')
168
- end
169
-
170
- puts "\n=== Step 8: Test TOTP ==="
171
- # Look for a record with TOTP
172
- secrets.each do |secret|
173
- totp_url = sm.get_notation("keeper://#{secret.uid}/field/oneTimeCode") rescue nil
174
- if totp_url && totp_url.start_with?('otpauth://')
175
- puts "Found TOTP in '#{secret.title}'"
176
- params = KeeperSecretsManager::TOTP.parse_url(totp_url)
177
- code = KeeperSecretsManager::TOTP.generate_code(params['secret'])
178
- puts "Current TOTP code: #{code}"
179
- break
180
- end
181
- end
182
-
183
- puts "\n=== Step 9: Cleanup ==="
184
- if created_uid
185
- print "Delete test record? (y/n): "
186
- if gets.chomp.downcase == 'y'
187
- sm.delete_secret([created_uid])
188
- puts "Deleted test record"
189
- else
190
- puts "Kept test record"
191
- end
192
- end
193
-
194
- puts "\n=== Testing Complete! ==="
195
- puts "All basic operations tested successfully"
196
- ```
197
-
198
- ### Step 2: Run the Test
199
-
200
- ```bash
201
- # Make sure you're in the Ruby SDK directory
202
- cd /Users/mustinov/Source/secrets-manager/sdk/ruby
203
-
204
- # Run the test
205
- ruby my_test.rb
206
- ```
207
-
208
- ## Common Issues and Solutions
209
-
210
- ### Issue 1: "No such file or directory"
211
- ```bash
212
- # Make sure you're in the right directory
213
- pwd # Should show: /Users/mustinov/Source/secrets-manager/sdk/ruby
214
- ```
215
-
216
- ### Issue 2: "Missing gems"
217
- ```bash
218
- # Install missing gems
219
- bundle install
220
- ```
221
-
222
- ### Issue 3: "Invalid token"
223
- - Make sure your token starts with region code (e.g., `US:`)
224
- - Token is one-time use only - get a new one if it fails
225
-
226
- ### Issue 4: "No folders found"
227
- - The SDK requires folders to create records
228
- - Create a folder in Keeper first, or use existing ones
229
-
230
- ## Quick Test Commands
231
-
232
- ### Test 1: Basic Connection
233
- ```ruby
234
- ruby -e "require_relative 'lib/keeper_secrets_manager'; sm = KeeperSecretsManager::SecretsManager.new(token: 'YOUR_TOKEN'); puts sm.get_secrets.length"
235
- ```
236
-
237
- ### Test 2: List Secret Titles
238
- ```ruby
239
- ruby -e "require_relative 'lib/keeper_secrets_manager'; sm = KeeperSecretsManager::SecretsManager.new(token: 'YOUR_TOKEN'); sm.get_secrets.each { |s| puts s.title }"
240
- ```
241
-
242
- ### Test 3: Using Config File
243
- First run saves config, subsequent runs use saved config:
244
- ```ruby
245
- # First run with token
246
- ruby -e "require_relative 'lib/keeper_secrets_manager'; config = KeeperSecretsManager::FileStorage.new('my-config.json'); sm = KeeperSecretsManager::SecretsManager.new(token: 'YOUR_TOKEN', config: config); puts 'Config saved!'"
247
-
248
- # Subsequent runs without token
249
- ruby -e "require_relative 'lib/keeper_secrets_manager'; config = KeeperSecretsManager::FileStorage.new('my-config.json'); sm = KeeperSecretsManager::SecretsManager.new(config: config); puts sm.get_secrets.length"
250
- ```
251
-
252
- ## Interactive Ruby Console
253
-
254
- For exploring the SDK interactively:
255
-
256
- ```bash
257
- # Start Ruby console
258
- irb
259
-
260
- # In the console, type:
261
- require_relative 'lib/keeper_secrets_manager'
262
- sm = KeeperSecretsManager::SecretsManager.new(token: 'YOUR_TOKEN')
263
- secrets = sm.get_secrets
264
- secrets.first.title
265
- secrets.first.fields
266
- exit
267
- ```
268
-
269
- ## What to Test
270
-
271
- 1. **Authentication**: Token works and connects to Keeper
272
- 2. **Read Operations**: Can list and read secrets
273
- 3. **Notation**: Can use keeper:// URIs
274
- 4. **Create**: Can create new records (requires folder)
275
- 5. **Update**: Can modify existing records
276
- 6. **Delete**: Can remove records
277
- 7. **Files**: Can upload/download attachments
278
- 8. **TOTP**: Can generate one-time codes
279
- 9. **Folders**: Can list and manage folders
280
-
281
- ## Expected Output
282
-
283
- Successful run should show:
284
- ```
285
- Initializing Keeper SDK...
286
-
287
- === Step 1: List All Secrets ===
288
- Found 5 secrets:
289
- - My Login (UID: xxxxx)
290
- - API Keys (UID: xxxxx)
291
- ...
292
-
293
- === Step 2: Get Secret Details ===
294
- Title: My Login
295
- Type: login
296
- Fields:
297
- - login: user@example.com
298
- - password: ********
299
- ...
300
-
301
- [continues through all steps]
302
-
303
- === Testing Complete! ===
304
- All basic operations tested successfully
305
- ```
306
-
307
- ## Cleanup
308
-
309
- After testing:
310
- ```bash
311
- # Remove any test files
312
- rm -f my_test.rb test_upload.txt test_download.txt my-config.json
313
-
314
- # Remove any test records created in Keeper
315
- ```
316
-
317
- ## Next Steps
318
-
319
- 1. Try modifying the test script to test specific features
320
- 2. Use the examples in the `examples/` directory
321
- 3. Check `test/integration/` for more test scenarios
322
- 4. Review the README.md for API documentation
323
-
324
- ## Need Help?
325
-
326
- - Check error messages - they usually indicate what's wrong
327
- - Ensure Ruby version is 2.7 or higher
328
- - Make sure you're in the correct directory
329
- - Token must be valid and unused
330
- - Records need to be in folders for creation
331
-
332
- Good luck with your testing!