1
0
mirror of https://github.com/getsops/sops.git synced 2026-02-05 12:45:21 +01:00

41 Commits

Author SHA1 Message Date
Felix Fontein
4bd0a14e1f Address review comments.
Signed-off-by: Felix Fontein <felix@fontein.de>
2025-09-28 07:43:45 +02:00
Felix Fontein
3dda744d8d Move dotenv.IsComplexValue to stores.
Signed-off-by: Felix Fontein <felix@fontein.de>
2025-09-27 20:37:04 +02:00
Felix Fontein
d893aa148e Do not put sensitive value into error message when the key can be printed as well.
Signed-off-by: Felix Fontein <felix@fontein.de>
2025-09-27 20:37:04 +02:00
Felix Fontein
6bb6621897 Make SingleValueStore extend Store instead of the other way around.
Signed-off-by: Felix Fontein <felix@fontein.de>
2025-09-27 20:17:14 +02:00
Felix Fontein
ffc1e265bb Ignore encryption selection options for binary store (and warn when they are used).
Signed-off-by: Felix Fontein <felix@fontein.de>
2025-09-27 20:17:14 +02:00
billy4479
ba010428ee Avoid panic when values are numbers
When decrypting to dotenv we try to escape new line in the values
without taking into account the possibility that the value could be
something different than a string (e.g. an int).

This used to cause a panic when using `decrypt --output-format dotenv`.

Signed-off-by: billy4479 <giachi.ellero@gmail.com>
2025-09-11 00:07:36 +02:00
Felix Fontein
daabd14700 Do not use DotEnv store for exec-env.
This avoids quoting problems, fixes #784, and also better handles
various problems that can arise, like '=' in keys and non-string
keys and values.

Signed-off-by: Felix Fontein <felix@fontein.de>
2024-06-15 17:53:38 +02:00
Felix Fontein
618b60e99c Create a constant for the 'sops' metadata key.
Signed-off-by: Felix Fontein <felix@fontein.de>
2023-12-29 22:55:57 +01:00
Felix Fontein
1bda828b69 Make check whether file contains invalid keys for encryption dependent on output store.
Signed-off-by: Felix Fontein <felix@fontein.de>
2023-12-29 22:22:01 +01:00
Felix Fontein
56d765a46b shamir_threshold is an integer.
Signed-off-by: Felix Fontein <felix@fontein.de>
2023-12-28 17:37:41 +01:00
Lance Rushing
b67a83d408 Move non-string and newline function calls outside of encode/decode
Signed-off-by: Lance Rushing <lance@lancerushing.com>
2023-12-28 15:56:07 +01:00
Lance Rushing
32dbc6be13 Add dedicated functions for \n and non string encoding
Signed-off-by: Lance Rushing <lance@lancerushing.com>
2023-12-28 15:56:07 +01:00
Lance Rushing
1161ec17a1 Consolidate Flatten/Unflatten pre/post processing
Fixes #1353

Consolidate the common json marshalling and \n handing to stores/flatten.go
Make existing functions unexported.
Add casts for MACOnlyEncrypted

Signed-off-by: Lance Rushing <lance@lancerushing.com>
2023-12-28 15:56:07 +01:00
Bastien Wermeille
d2ee8df5de Implement feedback
Co-authored-by: Felix Fontein <felix@fontein.de>
Signed-off-by: Bastien Wermeille <bastien.wermeille@gmail.com>
2023-11-24 07:41:14 +01:00
James J. Goodhouse
e9e2346fdd Add configuration for stores
this will allow for setting of parameters specific to each store, such
as indentation level for YAML

Co-authored-by: Bastien Wermeille <bastien.wermeille@gmail.com>
Signed-off-by: James J. Goodhouse <jgoodhouse@newrelic.com>
2023-11-24 07:41:14 +01:00
Hidde Beydals
ca0e15eda3 *: solve go vet errors
```
stores/dotenv/store.go:74:12: github.com/getsops/sops/v3.Comment struct literal uses unkeyed fields
stores/dotenv/store_test.go:29:10: github.com/getsops/sops/v3.Comment struct literal uses unkeyed fields
keyservice/server.go:149:9: assignment copies lock value to key: github.com/getsops/sops/v3/keyservice.Key contains google.golang.org/protobuf/internal/impl.MessageState contains sync.Mutex
keyservice/server.go:206:20: call of ks.prompt copies lock value: github.com/getsops/sops/v3/keyservice.Key contains google.golang.org/protobuf/internal/impl.MessageState contains sync.Mutex
keyservice/server.go:214:22: keyToString passes lock by value: github.com/getsops/sops/v3/keyservice.Key contains google.golang.org/protobuf/internal/impl.MessageState contains sync.Mutex
keyservice/server.go:231:29: prompt passes lock by value: github.com/getsops/sops/v3/keyservice.Key contains google.golang.org/protobuf/internal/impl.MessageState contains sync.Mutex
keyservice/server.go:232:27: call of keyToString copies lock value: github.com/getsops/sops/v3/keyservice.Key contains google.golang.org/protobuf/internal/impl.MessageState contains sync.Mutex
keyservice/server.go:251:9: assignment copies lock value to key: github.com/getsops/sops/v3/keyservice.Key contains google.golang.org/protobuf/internal/impl.MessageState contains sync.Mutex
keyservice/server.go:308:20: call of ks.prompt copies lock value: github.com/getsops/sops/v3/keyservice.Key contains google.golang.org/protobuf/internal/impl.MessageState contains sync.Mutex
stores/yaml/store_test.go:27:11: github.com/getsops/sops/v3.Comment struct literal uses unkeyed fields
stores/yaml/store_test.go:39:11: github.com/getsops/sops/v3.Comment struct literal uses unkeyed fields
stores/yaml/store_test.go:107:5: github.com/getsops/sops/v3.Comment struct literal uses unkeyed fields
stores/yaml/store_test.go:139:13: github.com/getsops/sops/v3.Comment struct literal uses unkeyed fields
decrypt/example_test.go:34:1: ExampleDecryptFile refers to unknown identifier: DecryptFile
```

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-08-17 00:14:20 +02:00
Andraz Bajt
700eea7119 Add a test for dotenv output ordering
Signed-off-by: Andraz Bajt <andraz@bajt.me>
2023-08-16 11:21:13 +02:00
Jason Banich
e25c1d9c2d Sort sops parameters in dotenv file 2023-08-16 11:19:55 +02:00
Hidde Beydals
f2a1d4c782 Rename Go module to github.com/getsops/sops/v3
This commit renames the Go module from `go.mozilla.org/sops/v3` to
`github.com/getsops/sops/v3` without a major version bump, to align
with new stewardship.

For more information around this change, refer to
https://github.com/getsops/sops/issues/1246.

For a one-liner to change the `go.mod` and any import paths in your
Go project making use of this module, run:

```
find /path/to/repo -type f \( -name "*.go" -o -name "go.mod" \) -exec sed -i 's|go.mozilla.org/sops/v3|github.com/getsops/sops/v3|g' {} \;
find /path/to/repo -type f \( -name "*.go" -o -name "go.mod" \) -exec sed -i '' 's|go.mozilla.org/sops/v3|github.com/getsops/sops/v3|g' {} \;
```

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-07-31 22:51:36 +02:00
Rene Hernandez
8aca3cb790 Add support for --unencrypted-regex (#715)
* Add support for --unencrypted-regex

* Fix grammar mistake

* Add gofmt'd files
2020-09-02 19:15:50 +02:00
Adrian Utrilla
5d32d9a3ee Revert "Add standard newline/quoting behavior to dotenv store (#622)" (#706)
This reverts commit 4507019a33.
2020-07-27 22:20:37 +02:00
Vaibhav Kaushik
e4abd871c7 Add HashiCorp Vault support (#655)
* feat: initial adding of vualt transit backend to sops
initial work on integration
feat(vault): added cli coomands working for vualt"

fix(vault): fixed config with correct tests

fix(vault): added vault to keygroup and to keyservice server

fixed metadata load

* feat(docs): added docs in README.md and in command help

fix(doc): fix rst formatting"

fix(doc): fix rst formatting

* fix(vault): addressed typos and fixes from autrilla

feat(cli): moved vault to hc-vault naming

* fix(test): typo while rebasing

* fix typos and imporve error messages for vault kms

* rename package from vault to hcvault

* refactor vault keysource url validation

* add negative test cases  for vault keysource

* add hc vault transit config option via objects
additional to URIs

* remove vault_example.yml

* streamline key name to snake case

* rename `BackendPath` to `EnginePath` for hc vault

* correction in hc-vault-transit commands

Signed-off-by: vnzongzna <github@vaibhavk.in>

* resolving conflict

Signed-off-by: vnzongzna <github@vaibhavk.in>

* Apply suggestions from code review

Co-Authored-By: Adrian Utrilla <adrianutrilla@gmail.com>

* allowing only hc_vault_transit_uri as input

Co-Authored-By: gitirabassi
Co-Authored-By: ldue
Signed-off-by: vnzongzna <github@vaibhavk.in>

Co-authored-by: gitirabassi <giacomo@tirabassi.eu>
Co-authored-by: ldue <larsduennwald@gmail.com>
Co-authored-by: Vaibhav Kaushik <vaibhavkaushik@vaibhavka-ltm1.internal.salesforce.com>
Co-authored-by: Adrian Utrilla <adrianutrilla@gmail.com>
2020-05-04 21:27:51 +02:00
Spencer Judd
4507019a33 Add standard newline/quoting behavior to dotenv store (#622)
Rationale
=========

The dotenv store as it exists right now performs splitting on newlines
to determine where a new key-value pair or comment begins. This works
remarkably well, up until you need to handle values that contain
newlines.

While I couldn't find an offical dotenv file format spec, I sampled a
number of open-source dotenv parsers and it seems that they typically
apply the following rules:

Comments:

* Comments may be written by starting a line with the `#` character.

Newline handling:

* If a value is unquoted or single-quoted and contains the character
  sequence `\n` (`0x5c6e`), it IS NOT decoded to a line feed (`0x0a`).

* If a value is double-quoted and contains the character sequence `\n`
  (`0x5c6e`), it IS decoded to a line feed (`0x0a`).

Whitespace trimming:

* For comments, the whitespace immediately after the `#` character and any
  trailing whitespace is trimmed.

* If a value is unquoted and contains any leading or trailing whitespace, it
  is trimmed.

* If a value is either single- or double-quoted and contains any leading or
  trailing whitespace, it is left untrimmed.

Quotation handling:

* If a value is surrounded by single- or double-quotes, the quotation marks
  are interpreted and not included in the value.

* Any number of single-quote characters may appear in a double-quoted
  value, or within a single-quoted value if they are escaped (i.e.,
  `'foo\'bar'`).

* Any number of double-quote characters may appear in a single-quoted
  value, or within a double-quoted value if they are escaped (i.e.,
  `"foo\"bar"`).

Because single- and double-quoted values may contain actual newlines,
we cannot split our input data on newlines as this may be in the middle
of a quoted value. This, along with the other rules around handling
quoted values, prompted me to try and implement a more robust parsing
solution. This commit is my first stab at that.

Special Considerations
======================

This is _not_ a backwards-compatible change:

* The `dotenv` files produced by this version of SOPS _cannot_ be read
  by an earlier version.

* The `dotenv` files produced by an earlier version of SOPS _can_ be
  read by this version, with the understanding that the semantics around
  quotations and newlines have changed.

Examples
========

The below examples show how double-quoted values are passed to the
running environment:

```console
$ echo 'FOO="foo\\nbar\\nbaz"' > plaintext.env
$ sops -e --output ciphertext.env plaintext.env
$ sops exec-env ciphertext.env 'env | grep FOO | xxd'
00000000: 464f 4f3d 666f 6f5c 6e62 6172 5c6e 6261  FOO=foo\nbar\nba
00000010: 7a0a                                     z.
```

```console
$ echo 'FOO="foo\nbar\nbaz"' > plaintext.env
$ sops -e --output ciphertext.env plaintext.env
$ sops exec-env ciphertext.env 'env | grep -A2 FOO | xxd'
00000000: 464f 4f3d 666f 6f0a 6261 720a 6261 7a0a  FOO=foo.bar.baz.
```
2020-03-20 22:47:14 +01:00
Spencer Judd
16343503c2 Fix newline encoding for dotenv store (#612)
When reading and writing dotenv files, we need to make sure to
encode/decode newline characters. SOPS does not currently do this, as
can be seen from the below:

```console
$ echo '{"foo": "foo\nbar\nbaz"}' > plaintext.json
$ sops -e --output ciphertext.json plaintext.json
$ sops -d --output-type dotenv ciphertext.json
foo=foo
bar
baz
```

This output, is invalid and cannot even be fed back into SOPS:

```console
$ sops -d --output-type dotenv --output plaintext.env ciphertext.json
$ sops -e plaintext.env
Error unmarshalling file: invalid dotenv input line: bar
```

This commit fixes the issue, such that the final `sops -d ...` command
above produces the correct output:

```console
$ sops -d --output-type dotenv ciphertext.json
foo=foo\nbar\nbaz
```
2020-01-24 18:03:34 +01:00
AJ Bahnken
8e21de8dbc Upgrade sops to go 1.13 (#566) 2019-11-18 10:06:58 -08:00
Adrian Utrilla
9998e16c3e Merge pull request #491 from adrianosela/golint
Address Go Lint messages
2019-07-16 11:36:51 +02:00
Adriano
4b99fa18b3 go lint 2019-07-11 10:30:32 -07:00
Adriano
87adc130eb code cleanup [1/5] - go fmt 2019-07-08 09:46:36 -07:00
Adrian Utrilla
2712e3770f Merge branch 'master' into consolidate-example-trees 2019-02-27 22:03:21 +01:00
Adrian Utrilla
d77ae5b1be Add comment support to dotenv store 2019-01-23 11:07:05 +01:00
Adrian Utrilla
bbf17b3d84 Consolidate example trees 2019-01-23 10:54:27 +01:00
James Robson
dfa150bf75 Add multidoc encrypt/decrypt for YAML sources 2018-11-21 09:00:49 -07:00
Adrian Utrilla
2a99f0411e Add test for dotenv EmitValue 2018-10-31 18:19:55 -04:00
Adrian Utrilla
9b45e33cbd Refactor flattening and unflattening code 2018-10-31 16:01:17 -04:00
Joost Cassee
a05f8627c7 Flatten sops metadata into variables 2018-10-31 15:08:25 +01:00
Joost Cassee
5fc86c12fa Implement flattened metadata for dotenv files
This commit contains a bug in the metadata handling.
2018-10-30 16:55:00 +01:00
Joost Cassee
39fbb27c2c Implement dotenv store.EmitValue function 2018-10-30 15:01:15 +01:00
Adrian Utrilla
f475b5cecd Cast input bytes to string when creating a TreeItem 2018-10-30 08:12:52 -04:00
Joost Cassee
700455adff Refactor the code base on review comments
- Ran goimports on store.go and store_test.go.
- LoadPlainFile uses bytes.Split.
2018-10-30 09:53:02 +01:00
Joost Cassee
985943c037 Attempt to output metadata items 2018-10-29 23:49:10 +01:00
Joost Cassee
eadef71162 Rename "env" store to "dotenv" 2018-10-29 21:50:13 +01:00