dry-credentials 0.2.0 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 80d0cd76bf93e1c24651a2f55d9b2ca8493a33aab603e97bcf68db5ad1b3d88a
4
- data.tar.gz: 14e831c767bb3b4b302b6cd042af12af3ebc21402290c9311773572ffd39dbf0
3
+ metadata.gz: a87f2e29c53fafba34356002ee07e2eb2d31fba25135d51b9098b34171a771cb
4
+ data.tar.gz: d675791b951d5220f8dafc35330deb022eea62cd2bc82f7e84963d9504441763
5
5
  SHA512:
6
- metadata.gz: 0057adafdb86c53b705125c7ef9317673010633b41a3856d1ac3cd27fd050925d0a8ded61b92b13e13bff9edbe3c7d85937445ec4a1aa9d07f627a4a6f5d135e
7
- data.tar.gz: 46f17ca1795ad86c964fa78605b02c84a36c598cd1466823dac843181fb79d71b2f9a162c3cfea3482a80105d9a5543cf9da6c2b34fab5cf2facca939506afd4
6
+ metadata.gz: 0a13c705e06e11791408562219391cf524d7e1d17069cfcfd1d9469cb41187bf7649be21df8b230435c487621b90a2d86f05b19d54bb52dab7a09f215a042b25
7
+ data.tar.gz: 0c07cae029dc55ba469e469a4f250f36ae73064ec8d5529b6a9f6f9239757eb1ce95ceae7471bb6d959c60e2419fd559de3a6169204bf99c2d15bae726431c43
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -2,9 +2,24 @@
2
2
 
3
3
  Nothing so far
4
4
 
5
+ ## 0.3.0
6
+
7
+ #### Additions
8
+
9
+ * Support generic fallback environment variable +CREDENTIALS_KEY+
10
+
11
+ ## 0.2.1
12
+
13
+ ## 0.2.1
14
+
15
+ #### Additions
16
+
17
+ * Add square brackets setter for settings
18
+ * Explain integrations for Bridgetown, Hanami 2 and Rodbot
19
+
5
20
  ## 0.2.0
6
21
 
7
- #### Breaking Changes
22
+ #### Breaking changes
8
23
 
9
24
  * Fall back to `APP_ENV` instead of `RACK_ENV`
10
25
 
@@ -14,7 +29,7 @@ Nothing so far
14
29
 
15
30
  ## 0.1.0
16
31
 
17
- #### Initial Implementation
32
+ #### Initial implementation
18
33
 
19
34
  * Require Ruby 3.0 or newer
20
35
  * Class mixin featuring the `credentials` macro:
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  [![Version](https://img.shields.io/gem/v/dry-credentials.svg?style=flat)](https://rubygems.org/gems/dry-credentials)
2
2
  [![Tests](https://img.shields.io/github/actions/workflow/status/svoop/dry-credentials/test.yml?style=flat&label=tests)](https://github.com/svoop/dry-credentials/actions?workflow=Test)
3
3
  [![Code Climate](https://img.shields.io/codeclimate/maintainability/svoop/dry-credentials.svg?style=flat)](https://codeclimate.com/github/svoop/dry-credentials/)
4
- [![Donorbox](https://img.shields.io/badge/donate-on_donorbox-yellow.svg)](https://donorbox.org/bitcetera)
4
+ [![GitHub Sponsors](https://img.shields.io/github/sponsors/svoop.svg)](https://github.com/sponsors/svoop)
5
5
 
6
6
  # Dry::Credentials
7
7
 
@@ -13,6 +13,8 @@ While similar in purpose to ActiveSupport::EncryptedConfiguration, this lightwei
13
13
  * [API](https://www.rubydoc.info/gems/dry-credentials)
14
14
  * Author: [Sven Schwyn - Bitcetera](https://bitcetera.com)
15
15
 
16
+ Thank you for supporting free and open-source software by sponsoring on [GitHub](https://github.com/sponsors/svoop) or on [Donorbox](https://donorbox.com/bitcetera). Any gesture is appreciated, from a single Euro for a ☕️ cup of coffee to 🍹 early retirement.
17
+
16
18
  ## Install
17
19
 
18
20
  ### Security
@@ -37,6 +39,8 @@ And then install the bundle:
37
39
  bundle install --trust-policy MediumSecurity
38
40
  ```
39
41
 
42
+ See [Integrations](#integrations) below for how to integrate Dry::Credentials into frameworks.
43
+
40
44
  ## Usage
41
45
 
42
46
  Extend any class with `Dry::Credentials` to use the [default settings](#defaults):
@@ -94,6 +98,12 @@ To decrypt the credentials and use them in your app, you have to set just this o
94
98
  export SANDBOX_CREDENTIALS_KEY=68656973716a4e706e336733377245732b6e77584c6c772b5432446532456f674767664271374a623876383d
95
99
  ```
96
100
 
101
+ Alternatively, you can omit the first part of the variable name. Such a key will be used for any app environment, but a more specific key will always take precedence. This is particularly useful when working with containerized setups:
102
+
103
+ ```sh
104
+ export CREDENTIALS_KEY=68656973716a4e706e336733377245732b6e77584c6c772b5432446532456f674767664271374a623876383d
105
+ ```
106
+
97
107
  With this in place, you can use the decrypted credentials anywhere in your app:
98
108
 
99
109
  ```ruby
@@ -154,6 +164,111 @@ Setting | Default | Description
154
164
  `digest` | `"sha256"` | sign digest used if the cipher doesn't support AEAD
155
165
  `serializer` | `Marshal` | serializer responding to `dump` and `load`
156
166
 
167
+ ## Integrations
168
+
169
+ ### Bridgetown
170
+
171
+ The [bridgetown_credentials gem](https://github.com/svoop/bridgetown_credentials) integrates Dry::Credentials into your [Bridgetown](https://www.bridgetownrb.com) site.
172
+
173
+ ### Hanami 2
174
+
175
+ To use credentials in a [Hanami 2](https//hanami.org) app, first add this gem to the Gemfile of the app and then create a provider `config/providers/credentials.rb`:
176
+
177
+ ```ruby
178
+ # frozen_string_literal: true
179
+
180
+ Hanami.app.register_provider :credentials do
181
+ prepare do
182
+ require "dry-credentials"
183
+
184
+ Dry::Credentials::Extension.new.then do |credentials|
185
+ credentials[:env] = Hanami.env
186
+ credentials[:dir] = Hanami.app.root.join(credentials[:dir])
187
+ credentials[:dir].mkpath
188
+ credentials.load!
189
+ register "credentials", credentials
190
+ end
191
+ end
192
+ end
193
+ ```
194
+
195
+ Next up are Rake tasks `lib/tasks/credentials.rake`:
196
+
197
+ ```ruby
198
+ namespace :credentials do
199
+ desc "Edit (or create) the encrypted credentials file"
200
+ task :edit, [:env] => [:environment] do |_, args|
201
+ Hanami.app.prepare(:credentials)
202
+ Hanami.app['credentials'].edit! args[:env]
203
+ end
204
+ end
205
+ ```
206
+
207
+ (As of Hanami 2.1, you have to [explicitly load such tasks in the Rakefile](https://github.com/hanami/hanami/issues/1375) yourself.)
208
+
209
+ You can now create a new credentials file for the development environment:
210
+
211
+ ```
212
+ rake credentials:edit
213
+ ```
214
+
215
+ This prints the credentials key you have to set in `.env`:
216
+
217
+ ```
218
+ DEVELOPMENT_CREDENTIALS_KEY=...
219
+ ```
220
+
221
+ The credentials are now available anywhere you inject them:
222
+
223
+ ```ruby
224
+ module MyHanamiApp
225
+ class ApiKeyPrinter
226
+ include Deps[
227
+ "credentials"
228
+ ]
229
+
230
+ def call
231
+ puts credentials.api_key
232
+ end
233
+ end
234
+ end
235
+ ```
236
+
237
+ You can use the credentials in other providers. Say, you want to pass the [ROM](https://rom-rb.org/) database URL (which contains the connection password) using credentials instead of settings. Simply replace `target["settings"].database_url` with `target["credentials"].database_url` and you're good to go:
238
+
239
+ ```ruby
240
+ Hanami.app.register_provider :persistence, namespace: true do
241
+ prepare do
242
+ require "rom"
243
+
244
+ config = ROM::Configuration.new(:sql, target["credentials"].database_url)
245
+
246
+ register "config", config
247
+ register "db", config.gateways[:default].connection
248
+ end
249
+
250
+ (...)
251
+ end
252
+ ```
253
+
254
+ Finally, if you have trouble using the credentials in slices, you might have to [share this app component](https://www.rubydoc.info/gems/hanami/Hanami/Config#shared_app_component_keys-instance_method) in `config/app.rb`:
255
+
256
+ ```ruby
257
+ module MyHanamiApp
258
+ class App < Hanami::App
259
+ config.shared_app_component_keys += ["credentials"]
260
+ end
261
+ end
262
+ ```
263
+
264
+ ### Ruby on Rails
265
+
266
+ ActiveSupport implements [encrypted configuration](https://www.rubydoc.info/gems/activesupport/ActiveSupport/EncryptedConfiguration) which is used by `rails credentials:edit` [out of the box]((https://guides.rubyonrails.org/security.html#custom-credentials)). There's no benefit from introducing an additional dependency like Dry::Credentials.
267
+
268
+ ### Rodbot
269
+
270
+ Dry::Credentials is integrated into [Rodbot](https://github.com/svoop/rodbot) out of the box, see [the README for more](https://github.com/svoop/rodbot/blob/main/README.md#credentials).
271
+
157
272
  ## Development
158
273
 
159
274
  To install the development dependencies and then run the test suite:
@@ -55,6 +55,14 @@ module Dry
55
55
  @settings.send(setting)
56
56
  end
57
57
 
58
+ # Change settings
59
+ #
60
+ # @param setting [String] name of the setting
61
+ # @param value [Object] new value of the setting
62
+ def []=(setting, value)
63
+ @settings.send(setting, value)
64
+ end
65
+
58
66
  end
59
67
  end
60
68
  end
@@ -75,7 +75,7 @@ module Dry
75
75
  if create?
76
76
  ENV[key_ev] = encryptor.generate_key
77
77
  else
78
- ENV[key_ev] or fail Dry::Credentials::KeyNotSetError
78
+ (ENV[key_ev] || ENV['CREDENTIALS_KEY']) or fail Dry::Credentials::KeyNotSetError
79
79
  end
80
80
  end
81
81
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Dry
4
4
  module Credentials
5
- VERSION = "0.2.0"
5
+ VERSION = "0.3.0"
6
6
  end
7
7
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-credentials
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sven Schwyn
@@ -11,8 +11,8 @@ cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
13
  MIIDODCCAiCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAjMSEwHwYDVQQDDBhydWJ5
14
- L0RDPWJpdGNldGVyYS9EQz1jb20wHhcNMjIxMTA2MTIzNjUwWhcNMjMxMTA2MTIz
15
- NjUwWjAjMSEwHwYDVQQDDBhydWJ5L0RDPWJpdGNldGVyYS9EQz1jb20wggEiMA0G
14
+ L0RDPWJpdGNldGVyYS9EQz1jb20wHhcNMjQxMTIwMjExMDIwWhcNMjUxMTIwMjEx
15
+ MDIwWjAjMSEwHwYDVQQDDBhydWJ5L0RDPWJpdGNldGVyYS9EQz1jb20wggEiMA0G
16
16
  CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDcLg+IHjXYaUlTSU7R235lQKD8ZhEe
17
17
  KMhoGlSUonZ/zo1OT3KXcqTCP1iMX743xYs6upEGALCWWwq+nxvlDdnWRjF3AAv7
18
18
  ikC+Z2BEowjyeCCT/0gvn4ohKcR0JOzzRaIlFUVInlGSAHx2QHZ2N8ntf54lu7nd
@@ -21,16 +21,30 @@ cert_chain:
21
21
  PVa0i729A4IhroNnFNmw4wOC93ARNbM1+LW36PLMmKjKudf5Exg8VmDVAgMBAAGj
22
22
  dzB1MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBSfK8MtR62mQ6oN
23
23
  yoX/VKJzFjLSVDAdBgNVHREEFjAUgRJydWJ5QGJpdGNldGVyYS5jb20wHQYDVR0S
24
- BBYwFIEScnVieUBiaXRjZXRlcmEuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQAYG2na
25
- ye8OE2DANQIFM/xDos/E4DaPWCJjX5xvFKNKHMCeQYPeZvLICCwyw2paE7Otwk6p
26
- uvbg2Ks5ykXsbk5i6vxDoeeOLvmxCqI6m+tHb8v7VZtmwRJm8so0eSX0WvTaKnIf
27
- CAn1bVUggczVdNoBXw9WAILKyw9bvh3Ft740XZrR74sd+m2pGwjCaM8hzLvrVbGP
28
- DyYhlBeRWyQKQ0WDIsiTSRhzK8HwSTUWjvPwx7SEdIU/HZgyrk0ETObKPakVu6bH
29
- kAyiRqgxF4dJviwtqI7mZIomWL63+kXLgjOjMe1SHxfIPo/0ji6+r1p4KYa7o41v
30
- fwIwU1MKlFBdsjkd
24
+ BBYwFIEScnVieUBiaXRjZXRlcmEuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQDSeB1x
25
+ 8QK8F/ML37isgvwGiQxovDUqu6Sq14cQ1qE9y5prUBmL2AsDuCBpXXctcvamFqNC
26
+ PgfJtj7ZZcXmY0SfKCog7T1btkr6zYxPXpxwUqB45n0I6v5qc0UCNvMEfBzxlak5
27
+ VW7UMNlKD9qukeN55hxuLF2F/sLldMcHUo/ATgdV4zk1t3sK6A9+02wz5K5qfWdM
28
+ Mi+XWXmGd57uojk3RcIXNwBRRP4DTKcKgVXhuyHb7q1vjTXrS6bw1Ortu0KmWOIk
29
+ jTyRsT1gymASS2KHe+BaCTwD74GqO8q4woYLZgXnJ/PvgcFgY2FEi2Kn/sXLp4JE
30
+ boIgxQCMT+nxBHCD
31
31
  -----END CERTIFICATE-----
32
- date: 2023-10-30 00:00:00.000000000 Z
32
+ date: 2024-12-08 00:00:00.000000000 Z
33
33
  dependencies:
34
+ - !ruby/object:Gem::Dependency
35
+ name: base64
36
+ requirement: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ type: :runtime
42
+ prerelease: false
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
34
48
  - !ruby/object:Gem::Dependency
35
49
  name: debug
36
50
  requirement: !ruby/object:Gem::Requirement
@@ -73,6 +87,20 @@ dependencies:
73
87
  - - ">="
74
88
  - !ruby/object:Gem::Version
75
89
  version: '0'
90
+ - !ruby/object:Gem::Dependency
91
+ name: minitest-substitute
92
+ requirement: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ type: :development
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
76
104
  - !ruby/object:Gem::Dependency
77
105
  name: minitest-flash
78
106
  requirement: !ruby/object:Gem::Requirement
@@ -203,7 +231,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
203
231
  - !ruby/object:Gem::Version
204
232
  version: '0'
205
233
  requirements: []
206
- rubygems_version: 3.4.21
234
+ rubygems_version: 3.5.23
207
235
  signing_key:
208
236
  specification_version: 4
209
237
  summary: A mixin to use encrypted credentials in your classes
metadata.gz.sig CHANGED
Binary file