Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package go-passbolt-cli for openSUSE:Factory
checked in at 2026-09-16 17:42:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/go-passbolt-cli (Old)
and /work/SRC/openSUSE:Factory/.go-passbolt-cli.new.383539 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "go-passbolt-cli"
Wed Sep 16 17:42:23 2026 rev:7 rq:1378147 version:0.5.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/go-passbolt-cli/go-passbolt-cli.changes
2026-07-12 16:22:21.618470729 +0200
+++
/work/SRC/openSUSE:Factory/.go-passbolt-cli.new.383539/go-passbolt-cli.changes
2026-09-16 17:44:59.265645033 +0200
@@ -1,0 +2,25 @@
+Tue Sep 15 10:55:20 UTC 2026 - Sai Karthik Karra <[email protected]>
+
+- Update to version 0.5.2:
+ * PB-54306 - Prepare CLI and SDK release
+ * PB-53937 - Update changelog
+ * PB-53937 - BumpSDK to v0.8.3
+ * PB-53937 - testenv: sign the metadata private key payload with a timestamp
+ * PB-53915 - Bump SDK to v0.8.2
+ * PB-53915 - Surface custom field functions in SDK
+ * PB-54031 - Add changelog files to SDK and CLI
+ * chore: adapt renovate config
+ * PB-54017 - Fix deprecated function call
+ * PB-54022 - Use go 1.25 syntax
+ * PB-54017 - Update dependencies in SDK and CLI
+ * PB-53686 - Update Go CLI documentation to add minimal supported API version
+ * PB-53929 - Minor upgrade for github.com/moby/go-archive (High)
+ * PB-53919 - Bump go version to 1.26.6
+ * PB-53914 - Remove community disclaimer from go cli
+ * feature/PB-53788_Update-devcontainer-version-in-go-CI
+ * PB-53356 - Minor upgrade for github.com/google/cel-go (Medium)
+ * PB-53335 - Fix crypto/tls CVE-2026-42505 - MEDIUM CVSS3.1
+ * PB-53334 - Minor upgrade for golang.org/x/text (High)
+ * Add renovate.json
+
+-------------------------------------------------------------------
Old:
----
go-passbolt-cli-0.5.1.tar.xz
New:
----
go-passbolt-cli-0.5.2.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ go-passbolt-cli.spec ++++++
--- /var/tmp/diff_new_pack.fidSgd/_old 2026-09-16 17:45:04.553865929 +0200
+++ /var/tmp/diff_new_pack.fidSgd/_new 2026-09-16 17:45:04.561866263 +0200
@@ -17,7 +17,7 @@
Name: go-passbolt-cli
-Version: 0.5.1
+Version: 0.5.2
Release: 0
Summary: A CLI tool to interact with Passbolt
License: MIT
++++++ _service ++++++
--- /var/tmp/diff_new_pack.fidSgd/_old 2026-09-16 17:45:04.656870231 +0200
+++ /var/tmp/diff_new_pack.fidSgd/_new 2026-09-16 17:45:04.668870733 +0200
@@ -3,7 +3,7 @@
<param name="url">https://github.com/passbolt/go-passbolt-cli.git</param>
<param name="scm">git</param>
<param name="exclude">.git</param>
- <param name="revision">v0.5.1</param>
+ <param name="revision">v0.5.2</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="changesgenerate">enable</param>
<param name="versionrewrite-pattern">v(.*)</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.fidSgd/_old 2026-09-16 17:45:04.735873532 +0200
+++ /var/tmp/diff_new_pack.fidSgd/_new 2026-09-16 17:45:04.749874116 +0200
@@ -3,6 +3,6 @@
<param
name="url">https://github.com/passbolt/go-passbolt-cli</param>
<param
name="changesrevision">b11702da24d4e62551b22ec82d1c7003b5849ce4</param></service><service
name="tar_scm">
<param
name="url">https://github.com/passbolt/go-passbolt-cli.git</param>
- <param
name="changesrevision">6efd7c81909bd7f7ca7214994255143fc69a7f3d</param></service></servicedata>
+ <param
name="changesrevision">5ad2e0f1b19c53aec5e228226f3e708097adf92d</param></service></servicedata>
(No newline at EOF)
++++++ go-passbolt-cli-0.5.1.tar.xz -> go-passbolt-cli-0.5.2.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/go-passbolt-cli-0.5.1/CHANGELOG.md
new/go-passbolt-cli-0.5.2/CHANGELOG.md
--- old/go-passbolt-cli-0.5.1/CHANGELOG.md 1970-01-01 01:00:00.000000000
+0100
+++ new/go-passbolt-cli-0.5.2/CHANGELOG.md 2026-08-28 16:52:04.000000000
+0200
@@ -0,0 +1,31 @@
+# Change Log
+All notable changes to this project will be documented in this file.
+This project adheres to [Semantic Versioning](http://semver.org/).
+
+Releases before this file was introduced are documented in the [GitHub
releases](https://github.com/passbolt/go-passbolt-cli/releases).
+
+## [Unreleased]
+
+## [0.5.2] - 2026-08-28
+### Fixed
+- PB-53937: Sign shared v5 metadata with both the user key and the metadata
key (Go SDK v0.8.3)
+
+### Security
+- PB-53335: Fix crypto/tls CVE-2026-42505 (Medium)
+- PB-53334: Minor upgrade for golang.org/x/text (High)
+- PB-53929: Minor upgrade for github.com/moby/go-archive (High)
+- PB-53356: Minor upgrade for github.com/google/cel-go (Medium)
+
+### Maintenance
+- PB-53915: Use the SDK custom field helpers in the KeePass export (Go SDK
v0.8.2)
+- PB-53919: Bump go version to 1.26.6
+- PB-54017: Update dependencies in SDK and CLI
+- PB-54017: Replace a deprecated gokeepasslib call in the KeePass export
+- PB-54022: Use go 1.25 syntax
+- PB-53686: Document the minimum supported Passbolt API version
+- PB-54031: Add changelog files to SDK and CLI
+- PB-53914: Remove the community disclaimer from the README
+- PB-53788: Update devcontainer version in go CI
+- PB-53937: Sign the metadata private key payload with a timestamp when
bootstrapping the test environment
+- Renovate: Add renovate.json
+- Renovate: Adapt renovate config
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/go-passbolt-cli-0.5.1/README.md
new/go-passbolt-cli-0.5.2/README.md
--- old/go-passbolt-cli-0.5.1/README.md 2026-07-02 11:02:51.000000000 +0200
+++ new/go-passbolt-cli-0.5.2/README.md 2026-08-28 16:52:04.000000000 +0200
@@ -4,7 +4,16 @@
If you want to do something more complicated: [this Go
module](https://github.com/passbolt/go-passbolt) to interact with Passbolt from
Go might interest you.
-Disclaimer: This project is community driven and not associated with [Passbolt
SA](https://www.passbolt.com/about).
+# API Compatibility
+
+The Go CLI is designed to work with the latest Passbolt API version, and we
strongly recommend keeping your API up to date.
+
+> [!IMPORTANT]
+> Compatibility is currently tested with Passbolt API 5.6.1 and later. Older
versions are unsupported and may not work.
+
+Support for 5.6.1 is not guaranteed indefinitely and the minimum supported API
version may increase in future releases.
+
+In addition, users should also make sure they are running the latest version
of the Go CLI. A current client stays compatible with supported older API
versions, but an older client is not guaranteed to work against a newer API.
# Install
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/go-passbolt-cli-0.5.1/go.mod
new/go-passbolt-cli-0.5.2/go.mod
--- old/go-passbolt-cli-0.5.1/go.mod 2026-07-02 11:02:51.000000000 +0200
+++ new/go-passbolt-cli-0.5.2/go.mod 2026-08-28 16:52:04.000000000 +0200
@@ -1,28 +1,28 @@
module github.com/passbolt/go-passbolt-cli
-go 1.26.4
+go 1.26.6
require (
al.essio.dev/pkg/shellescape v1.6.0
github.com/ProtonMail/gopenpgp/v3 v3.4.1
- github.com/google/cel-go v0.28.1
+ github.com/google/cel-go v0.31.0
github.com/google/uuid v1.6.0
- github.com/passbolt/go-passbolt v0.8.1
+ github.com/passbolt/go-passbolt v0.8.3
github.com/pterm/pterm v0.12.83
- github.com/rogpeppe/go-internal v1.15.0
+ github.com/rogpeppe/go-internal v1.16.0
github.com/spf13/cobra v1.10.2
github.com/spf13/pflag v1.0.10
github.com/spf13/viper v1.21.0
- github.com/testcontainers/testcontainers-go v0.43.0
- github.com/tobischo/gokeepasslib/v3 v3.6.2
- golang.org/x/term v0.44.0
+ github.com/testcontainers/testcontainers-go v0.44.0
+ github.com/tobischo/gokeepasslib/v3 v3.7.0
+ golang.org/x/term v0.45.0
)
require (
atomicgo.dev/cursor v0.2.0 // indirect
atomicgo.dev/keyboard v0.2.10 // indirect
atomicgo.dev/schedule v0.1.0 // indirect
- cel.dev/expr v0.25.2 // indirect
+ cel.dev/expr v0.25.3 // indirect
dario.cat/mergo v1.0.2 // indirect
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c //
indirect
github.com/Microsoft/go-winio v0.6.2 // indirect
@@ -31,7 +31,7 @@
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/clipperhouse/uax29/v2 v2.7.0 // indirect
- github.com/cloudflare/circl v1.6.4 // indirect
+ github.com/cloudflare/circl v1.6.5 // indirect
github.com/containerd/console v1.0.5 // indirect
github.com/containerd/errdefs v1.0.0 // indirect
github.com/containerd/errdefs/pkg v0.3.0 // indirect
@@ -39,67 +39,65 @@
github.com/containerd/platforms v0.2.1 // indirect
github.com/cpuguy83/dockercfg v0.3.2 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect
- github.com/davecgh/go-spew v1.1.1 // indirect
github.com/distribution/reference v0.6.0 // indirect
- github.com/docker/go-connections v0.7.0 // indirect
+ github.com/docker/go-connections v0.8.1 // indirect
github.com/docker/go-units v0.5.0 // indirect
- github.com/ebitengine/purego v0.10.1 // indirect
+ github.com/ebitengine/purego v0.10.2 // indirect
github.com/felixge/httpsnoop v1.1.0 // indirect
github.com/fsnotify/fsnotify v1.10.1 // indirect
- github.com/go-logr/logr v1.4.3 // indirect
+ github.com/go-logr/logr v1.4.4 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.3.0 // indirect
github.com/go-viper/mapstructure/v2 v2.5.0 // indirect
github.com/google/go-querystring v1.2.0 // indirect
github.com/gookit/color v1.6.1 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
- github.com/klauspost/compress v1.18.6 // indirect
+ github.com/klauspost/compress v1.19.2 // indirect
github.com/lithammer/fuzzysearch v1.1.8 // indirect
- github.com/lufia/plan9stats v0.0.0-20260627054121-477a66015f15 //
indirect
- github.com/magiconair/properties v1.8.10 // indirect
- github.com/mattn/go-runewidth v0.0.24 // indirect
+ github.com/lufia/plan9stats v0.0.0-20260802145828-341c2f0c90b5 //
indirect
+ github.com/magiconair/properties v1.18.11 // indirect
+ github.com/mattn/go-runewidth v0.0.28 // indirect
github.com/moby/docker-image-spec v1.3.1 // indirect
- github.com/moby/go-archive v0.2.0 // indirect
+ github.com/moby/go-archive v0.3.3 // indirect
github.com/moby/moby/api v1.55.0 // indirect
- github.com/moby/moby/client v0.5.0 // indirect
+ github.com/moby/moby/client v0.5.1 // indirect
github.com/moby/patternmatcher v0.6.1 // indirect
github.com/moby/sys/sequential v0.7.0 // indirect
github.com/moby/sys/user v0.4.1 // indirect
- github.com/moby/sys/userns v0.1.0 // indirect
+ github.com/moby/sys/userns v0.2.0 // indirect
github.com/moby/term v0.5.2 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.1.1 // indirect
- github.com/pelletier/go-toml/v2 v2.4.2 // indirect
- github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 //
indirect
+ github.com/pelletier/go-toml/v2 v2.4.3 // indirect
+ github.com/power-devops/perfstat v0.0.0-20260805114148-88456608a4f6 //
indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/sagikazarmark/locafero v0.12.0 // indirect
- github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 // indirect
- github.com/shirou/gopsutil/v4 v4.26.5 // indirect
- github.com/sirupsen/logrus v1.9.4 // indirect
+ github.com/santhosh-tekuri/jsonschema/v6 v6.0.3 // indirect
+ github.com/shirou/gopsutil/v4 v4.26.7 // indirect
+ github.com/sirupsen/logrus v1.10.0 // indirect
github.com/spf13/afero v1.15.0 // indirect
github.com/spf13/cast v1.10.0 // indirect
- github.com/stretchr/testify v1.11.1 // indirect
+ github.com/stretchr/testify v1.12.0 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
github.com/tklauser/go-sysconf v0.4.0 // indirect
github.com/tklauser/numcpus v0.12.0 // indirect
- github.com/tobischo/argon2 v0.1.0 // indirect
- github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
+ github.com/tobischo/argon2 v0.2.0 // indirect
+ github.com/xo/terminfo v1.0.0 // indirect
github.com/yusufpapurcu/wmi v1.2.4 // indirect
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0
// indirect
- go.opentelemetry.io/otel v1.44.0 // indirect
- go.opentelemetry.io/otel/metric v1.44.0 // indirect
- go.opentelemetry.io/otel/trace v1.44.0 // indirect
- go.yaml.in/yaml/v3 v3.0.4 // indirect
- golang.org/x/crypto v0.53.0 // indirect
- golang.org/x/exp v0.0.0-20260611194520-c48552f49976 // indirect
- golang.org/x/sys v0.46.0 // indirect
- golang.org/x/text v0.38.0 // indirect
- golang.org/x/tools v0.47.0 // indirect
- google.golang.org/genproto/googleapis/api
v0.0.0-20260622175928-b703f567277d // indirect
- google.golang.org/genproto/googleapis/rpc
v0.0.0-20260622175928-b703f567277d // indirect
- google.golang.org/protobuf v1.36.11 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.70.0
// indirect
+ go.opentelemetry.io/otel v1.45.0 // indirect
+ go.opentelemetry.io/otel/metric v1.45.0 // indirect
+ go.opentelemetry.io/otel/trace v1.45.0 // indirect
+ go.yaml.in/yaml/v3 v3.0.5 // indirect
+ golang.org/x/crypto v0.55.0 // indirect
+ golang.org/x/exp v0.0.0-20260813180055-c1d0aacb2297 // indirect
+ golang.org/x/sys v0.47.0 // indirect
+ golang.org/x/text v0.41.0 // indirect
+ golang.org/x/tools v0.49.0 // indirect
+ google.golang.org/genproto/googleapis/api
v0.0.0-20260817212433-ac3dfec99bb1 // indirect
+ google.golang.org/genproto/googleapis/rpc
v0.0.0-20260817212433-ac3dfec99bb1 // indirect
+ google.golang.org/protobuf v1.36.12 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/go-passbolt-cli-0.5.1/go.sum
new/go-passbolt-cli-0.5.2/go.sum
--- old/go-passbolt-cli-0.5.1/go.sum 2026-07-02 11:02:51.000000000 +0200
+++ new/go-passbolt-cli-0.5.2/go.sum 2026-08-28 16:52:04.000000000 +0200
@@ -8,8 +8,8 @@
atomicgo.dev/keyboard v0.2.10/go.mod
h1:ap/z5ilnhLqYq852m6kPeTq5Z6aESGWu5mzRpJlC6aI=
atomicgo.dev/schedule v0.1.0 h1:nTthAbhZS5YZmgYbb2+DH8uQIZcTlIrd4eYr3UQxEjs=
atomicgo.dev/schedule v0.1.0/go.mod
h1:xeUa3oAkiuHYh8bKiQBRojqAMq3PXXbJujjb0hw8pEU=
-cel.dev/expr v0.25.2 h1:K6j46C81hXtZQfuX60cVWQFBJahKSE2gfRbNuvr5bFs=
-cel.dev/expr v0.25.2/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4=
+cel.dev/expr v0.25.3 h1:A2jO8jwOugrrovveCWfj0KEZOfqiLgAcwjpHPhzIGw0=
+cel.dev/expr v0.25.3/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4=
dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8=
dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA=
github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6
h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk=
@@ -32,8 +32,8 @@
github.com/cespare/xxhash/v2 v2.3.0/go.mod
h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/clipperhouse/uax29/v2 v2.7.0
h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJv2v7Vk=
github.com/clipperhouse/uax29/v2 v2.7.0/go.mod
h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM=
-github.com/cloudflare/circl v1.6.4
h1:pOXuDTCEYyzydgUpQ0CQz3LsinKjiSk6nNP5Lt5K64U=
-github.com/cloudflare/circl v1.6.4/go.mod
h1:YxarevkLlbaHuWsxG6vmYNWBEsSp4pnp7j+4VljMavY=
+github.com/cloudflare/circl v1.6.5
h1:O64F26HEqNhznd/hrC5KZXVKYuKM2rx4deZDTc4ihQA=
+github.com/cloudflare/circl v1.6.5/go.mod
h1:h5LNyxAc5nTue9DS5jT+48en2PSDYt3zdGnz5OstK6c=
github.com/containerd/console v1.0.5
h1:R0ymNeydRqH2DmakFNdmjR2k0t7UPuiOV/N/27/qqsc=
github.com/containerd/console v1.0.5/go.mod
h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk=
github.com/containerd/errdefs v1.0.0
h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI=
@@ -57,12 +57,12 @@
github.com/distribution/reference v0.6.0/go.mod
h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
github.com/dlclark/regexp2 v1.11.0
h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI=
github.com/dlclark/regexp2 v1.11.0/go.mod
h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
-github.com/docker/go-connections v0.7.0
h1:6SsRfJddP22WMrCkj19x9WKjEDTB+ahsdiGYf0mN39c=
-github.com/docker/go-connections v0.7.0/go.mod
h1:no1qkHdjq7kLMGUXYAduOhYPSJxxvgWBh7ogVvptn3Q=
+github.com/docker/go-connections v0.8.1
h1:JibmG5hULs5qXSr/cp/w3Pw5fZuStt4MOHMUExb29/M=
+github.com/docker/go-connections v0.8.1/go.mod
h1:no1qkHdjq7kLMGUXYAduOhYPSJxxvgWBh7ogVvptn3Q=
github.com/docker/go-units v0.5.0
h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
github.com/docker/go-units v0.5.0/go.mod
h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
-github.com/ebitengine/purego v0.10.1
h1:dewVBCBT2GaMu1SrNTYxQhgQBethzfhiwvZiLGP/qyY=
-github.com/ebitengine/purego v0.10.1/go.mod
h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
+github.com/ebitengine/purego v0.10.2
h1:W809HbnvzAxgdm+aOvlSekrM16wGCdT/e76+9tS7gzE=
+github.com/ebitengine/purego v0.10.2/go.mod
h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
github.com/felixge/httpsnoop v1.1.0
h1:3YtUj32ZZkqZtt3sZZsClsymw/QDuVfpNhoA31zeORc=
github.com/felixge/httpsnoop v1.1.0/go.mod
h1:Zqxgdd+1Rkcz8euOqdr7lqgCRJztwr5hp9vDSi5UZCE=
github.com/frankban/quicktest v1.14.6
h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
@@ -70,8 +70,8 @@
github.com/fsnotify/fsnotify v1.10.1
h1:b0/UzAf9yR5rhf3RPm9gf3ehBPpf0oZKIjtpKrx59Ho=
github.com/fsnotify/fsnotify v1.10.1/go.mod
h1:TLheqan6HD6GBK6PrDWyDPBaEV8LspOxvPSjC+bVfgo=
github.com/go-logr/logr v1.2.2/go.mod
h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
-github.com/go-logr/logr v1.4.3/go.mod
h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.4 h1:tG4xh9yMsRCAiodLVTxyrkzSZ9+o0L1Kg/+cPVcbP/8=
+github.com/go-logr/logr v1.4.4/go.mod
h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod
h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-ole/go-ole v1.2.6/go.mod
h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
@@ -79,8 +79,8 @@
github.com/go-ole/go-ole v1.3.0/go.mod
h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
github.com/go-viper/mapstructure/v2 v2.5.0
h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro=
github.com/go-viper/mapstructure/v2 v2.5.0/go.mod
h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
-github.com/google/cel-go v0.28.1
h1:YWIwi77J4xIsYUwAF/iIuS6haffzIHS8yWI8glSbLWM=
-github.com/google/cel-go v0.28.1/go.mod
h1:X0bD6iVNR8pkROSOoHVdgTkzmRcosof7WQqCD6wcMc8=
+github.com/google/cel-go v0.31.0
h1:H0bhpFTqOvmHrBGrWKp7ZlhBm5Hh8PYUEXnwxT1LL7A=
+github.com/google/cel-go v0.31.0/go.mod
h1:X0bD6iVNR8pkROSOoHVdgTkzmRcosof7WQqCD6wcMc8=
github.com/google/go-cmp v0.6.0/go.mod
h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod
h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
@@ -96,8 +96,8 @@
github.com/gookit/color v1.6.1/go.mod
h1:9ACFc7/1IpHGBW8RwuDm/0YEnhg3dwwXpoMsmtyHfjs=
github.com/inconshreveable/mousetrap v1.1.0
h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod
h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
-github.com/klauspost/compress v1.18.6
h1:2jupLlAwFm95+YDR+NwD2MEfFO9d4z4Prjl1XXDjuao=
-github.com/klauspost/compress v1.18.6/go.mod
h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ=
+github.com/klauspost/compress v1.19.2
h1:hMRETovs/pu/dVWN7zIT1PGG8t509MwT6bO7XSi26R8=
+github.com/klauspost/compress v1.19.2/go.mod
h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ=
github.com/klauspost/cpuid/v2 v2.3.0
h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
github.com/klauspost/cpuid/v2 v2.3.0/go.mod
h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
@@ -106,58 +106,60 @@
github.com/kr/text v0.2.0/go.mod
h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lithammer/fuzzysearch v1.1.8
h1:/HIuJnjHuXS8bKaiTMeeDlW2/AyIWk2brx1V8LFgLN4=
github.com/lithammer/fuzzysearch v1.1.8/go.mod
h1:IdqeyBClc3FFqSzYq/MXESsS4S0FsZ5ajtkr5xPLts4=
-github.com/lufia/plan9stats v0.0.0-20260627054121-477a66015f15
h1:YkjVPl/YH5XlJ+/NiwzJtPYXXKRcyjmEUhsDci6YK3c=
-github.com/lufia/plan9stats v0.0.0-20260627054121-477a66015f15/go.mod
h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg=
-github.com/magiconair/properties v1.8.10
h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE=
-github.com/magiconair/properties v1.8.10/go.mod
h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
-github.com/mattn/go-runewidth v0.0.24
h1:cpokDiIn0MGnhdHwuWnJBITySJ20QyNGnY2kR/ay2DU=
-github.com/mattn/go-runewidth v0.0.24/go.mod
h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
+github.com/lufia/plan9stats v0.0.0-20260802145828-341c2f0c90b5
h1:eveIIGn4BGM3qknO74omf6HYr30/exH+eVUTuAgwjZ0=
+github.com/lufia/plan9stats v0.0.0-20260802145828-341c2f0c90b5/go.mod
h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg=
+github.com/magiconair/properties v1.18.11
h1:j5ozYZl0zCjG7ahMDH0GWIobOvvUzT0BdAguG0ViKy0=
+github.com/magiconair/properties v1.18.11/go.mod
h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
+github.com/mattn/go-runewidth v0.0.28
h1:rPyg2ybwEKPebvpzVWe1gKBkH8EQFkxO4Y0hjBeLaBU=
+github.com/mattn/go-runewidth v0.0.28/go.mod
h1:3qAiGCV4Koz/yuveO58qUefmUTRm8r0IGEXZ9jeHp/8=
github.com/moby/docker-image-spec v1.3.1
h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
github.com/moby/docker-image-spec v1.3.1/go.mod
h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
-github.com/moby/go-archive v0.2.0
h1:zg5QDUM2mi0JIM9fdQZWC7U8+2ZfixfTYoHL7rWUcP8=
-github.com/moby/go-archive v0.2.0/go.mod
h1:mNeivT14o8xU+5q1YnNrkQVpK+dnNe/K6fHqnTg4qPU=
+github.com/moby/go-archive v0.3.3
h1:OxxR9paxsluYi+zDUEXTTaIxtkK3viymW+Ka7vRhhME=
+github.com/moby/go-archive v0.3.3/go.mod
h1:Npdv43fFqlhZW7Xo8fbm3ZMYFvAGNviUPqX21VERbcE=
github.com/moby/moby/api v1.55.0
h1:2/sexvQyqIWS8pRSCFddBfpW2qE7vR7FCL+vN8pxwMc=
github.com/moby/moby/api v1.55.0/go.mod
h1:+RQ6wluLwtYaTd1WnPLykIDPekkuyD/ROWQClE83pzs=
-github.com/moby/moby/client v0.5.0
h1:5XhyPk2fuOWf6RlSFa3MkIIgDZkF25xToXW8Q/BH7cc=
-github.com/moby/moby/client v0.5.0/go.mod
h1:rcVpF8ncl9vo5gaIBdol6CnbEtSj1uxMvEV/UrykF/s=
+github.com/moby/moby/client v0.5.1
h1:tYNaJno4c0HXz12y5BiqEDy0rVTYkWzI26lGvnTMiJw=
+github.com/moby/moby/client v0.5.1/go.mod
h1:odLstlZ6uSnfvAgVxMpvgmb8SUdd+siH2T0GBuxVAlM=
github.com/moby/patternmatcher v0.6.1
h1:qlhtafmr6kgMIJjKJMDmMWq7WLkKIo23hsrpR3x084U=
github.com/moby/patternmatcher v0.6.1/go.mod
h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
+github.com/moby/sys/mount v0.3.5
h1:eS3fsZTjHaBihwjp4/+5Z3jxqLXYsbwxqpVSfFv3M00=
+github.com/moby/sys/mount v0.3.5/go.mod
h1:WUQDO+/uCiCIkIztx8SrwIDVn2dtMFRBebRhpDFT71M=
+github.com/moby/sys/mountinfo v0.7.2
h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg=
+github.com/moby/sys/mountinfo v0.7.2/go.mod
h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4=
github.com/moby/sys/sequential v0.7.0
h1:ASQNGNROJSuOO6LL6bPHbKvuZu6NU8P4ldPWk31zj/8=
github.com/moby/sys/sequential v0.7.0/go.mod
h1:NfSTAp6V3fw4tmkD62PEcOKeZKquXT8VKCkf7aVR79o=
github.com/moby/sys/user v0.4.1 h1:RgjRlaDKi/Xmyrz4t8lyzXT6v2ooFeO/7xtchmhVWE0=
github.com/moby/sys/user v0.4.1/go.mod
h1:E9QsW5WRe1kUAf7kW8hXKwu1uhsZEAdPLYHYSDudF4Y=
-github.com/moby/sys/userns v0.1.0
h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g=
-github.com/moby/sys/userns v0.1.0/go.mod
h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28=
+github.com/moby/sys/userns v0.2.0
h1:nEtDtp7NCV/6dutSklNe8FrENPwFdc4mXnZqC/JWgXM=
+github.com/moby/sys/userns v0.2.0/go.mod
h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28=
github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ=
github.com/moby/term v0.5.2/go.mod
h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc=
github.com/opencontainers/go-digest v1.0.0
h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod
h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
github.com/opencontainers/image-spec v1.1.1
h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
github.com/opencontainers/image-spec v1.1.1/go.mod
h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=
-github.com/passbolt/go-passbolt v0.8.1
h1:P4l6qhVUrogUMXyVvPtu8ua5AaWnI9gc0PrA1Rer3fU=
-github.com/passbolt/go-passbolt v0.8.1/go.mod
h1:D9ffZzEwZCVpbw6FLxvknna1tKQC73/R49uWM2OxLNA=
-github.com/pelletier/go-toml/v2 v2.4.2
h1:M2fKKbmyvI+hGId/D0W64qDBMVhJnNR10O5gIbMc//Q=
-github.com/pelletier/go-toml/v2 v2.4.2/go.mod
h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
-github.com/pmezard/go-difflib v1.0.0
h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod
h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55
h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU=
-github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod
h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
+github.com/passbolt/go-passbolt v0.8.3
h1:9ybKiVCpojZJ3f+3TKvzbftC+y37prKdOfzf4O6Z9k8=
+github.com/passbolt/go-passbolt v0.8.3/go.mod
h1:CLRWahnjlIJoFm0nj5Wrpk+Tm8ypaiF2dK6BdE4QHBg=
+github.com/pelletier/go-toml/v2 v2.4.3
h1:GTRvJQutkOSftxIFD5xw9aepkYNuPWmVJpffdDPYVpY=
+github.com/pelletier/go-toml/v2 v2.4.3/go.mod
h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
+github.com/power-devops/perfstat v0.0.0-20260805114148-88456608a4f6
h1:jL3a8soXdzuTCcRnKhOmtcsVOObdDTFf4O2B403HPRU=
+github.com/power-devops/perfstat v0.0.0-20260805114148-88456608a4f6/go.mod
h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
github.com/pterm/pterm v0.12.83 h1:ie+YmGmA727VuhxBlyGr74Ks+7McV6kT99IB8EU80aA=
github.com/pterm/pterm v0.12.83/go.mod
h1:xlgc6bFWyJIMtmLJvGim+L7jhSReilOlOnodeIYe4Tk=
-github.com/rogpeppe/go-internal v1.15.0
h1:D0RCU5rMAp+SpgkiNdrjfJ+LX4J1M32V2NeCY7EJ6hc=
-github.com/rogpeppe/go-internal v1.15.0/go.mod
h1:DrUVZyrJU+txYW5/1kwtXQSMFio52ZOxX7yM1VHvnxs=
+github.com/rogpeppe/go-internal v1.16.0
h1:O9DK+vNMDVGLr2BeZqmpLeMjiMNkuXfcqntWbZV6S5g=
+github.com/rogpeppe/go-internal v1.16.0/go.mod
h1:DrUVZyrJU+txYW5/1kwtXQSMFio52ZOxX7yM1VHvnxs=
github.com/russross/blackfriday/v2 v2.1.0
h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod
h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sagikazarmark/locafero v0.12.0
h1:/NQhBAkUb4+fH1jivKHWusDYFjMOOKU88eegjfxfHb4=
github.com/sagikazarmark/locafero v0.12.0/go.mod
h1:sZh36u/YSZ918v0Io+U9ogLYQJ9tLLBmM4eneO6WwsI=
-github.com/santhosh-tekuri/jsonschema/v6 v6.0.2
h1:KRzFb2m7YtdldCEkzs6KqmJw4nqEVZGK7IN2kJkjTuQ=
-github.com/santhosh-tekuri/jsonschema/v6 v6.0.2/go.mod
h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU=
+github.com/santhosh-tekuri/jsonschema/v6 v6.0.3
h1:1EYB5IzjZawrrnELUi78f9fPu57HuXjmddZPjrls/28=
+github.com/santhosh-tekuri/jsonschema/v6 v6.0.3/go.mod
h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU=
github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw=
github.com/sergi/go-diff v1.4.0/go.mod
h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
-github.com/shirou/gopsutil/v4 v4.26.5
h1:RPcBXkpz7kOj9PqGFQOlBPZHsyaPvPVQc098y9RmCNM=
-github.com/shirou/gopsutil/v4 v4.26.5/go.mod
h1:LZ6ewCSkBqUpvSOf+LsTGnRinC6iaNUNMGBtDkJBaLQ=
-github.com/sirupsen/logrus v1.9.4
h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w=
-github.com/sirupsen/logrus v1.9.4/go.mod
h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g=
+github.com/shirou/gopsutil/v4 v4.26.7
h1:IXzpHz/dkMRYAhKkOXr1HB6SuzWU3eoyyeWe7g3bNZc=
+github.com/shirou/gopsutil/v4 v4.26.7/go.mod
h1:5O9FjBiXoTDFatIWjZZosqj4pV0DRtLx598xGbBehzM=
+github.com/sirupsen/logrus v1.10.0
h1:T8MxJJXVZkfcC5zSRMRAg2F8+lxjmUCGGWPzFxO+Msc=
+github.com/sirupsen/logrus v1.10.0/go.mod
h1:FXZFonkDAnFozmO+5hGAFvB0Yg9/j2SIhA/QuIkP180=
github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I=
github.com/spf13/afero v1.15.0/go.mod
h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg=
github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY=
@@ -171,47 +173,48 @@
github.com/spf13/viper v1.21.0/go.mod
h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY=
github.com/stretchr/objx v0.5.3 h1:jmXUvGomnU1o3W/V5h2VEradbpJDwGrzugQQvL0POH4=
github.com/stretchr/objx v0.5.3/go.mod
h1:rDQraq+vQZU7Fde9LOZLr8Tax6zZvy4kuNKF+QYS+U0=
-github.com/stretchr/testify v1.11.1
h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
-github.com/stretchr/testify v1.11.1/go.mod
h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
+github.com/stretchr/testify v1.12.0
h1:K6Mr6jO9JICuend/5xzTM03ydSV3vdNRYAdPSukj8uI=
+github.com/stretchr/testify v1.12.0/go.mod
h1:bOYBZb5qJ00vPzWfIqBUZPaxK8jWiXc6d3ErP4Ca9Gw=
github.com/subosito/gotenv v1.6.0
h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
github.com/subosito/gotenv v1.6.0/go.mod
h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
-github.com/testcontainers/testcontainers-go v0.43.0
h1:oEQx5MW2DGd9z3AeEQfB2lPM0eLs7ztyaGRu75bFo5A=
-github.com/testcontainers/testcontainers-go v0.43.0/go.mod
h1:+VxkT2NQnKOZPKi6praMuMKYHYyOGXr0XSBSlSMCzFo=
+github.com/testcontainers/testcontainers-go v0.44.0
h1:/Fwh6HY1mIikhnm9e7HwoxGycx0lzRAE0f5VQpjFxzI=
+github.com/testcontainers/testcontainers-go v0.44.0/go.mod
h1:IcnwQrYTO86xHXu5bvMaBH7ATlbS3Qn1M1QWW3c66rE=
github.com/tklauser/go-sysconf v0.4.0
h1:7H0uAN+7RkwWRaxhYXDLqa5V3LPrJeV8wmD9dRUgPQU=
github.com/tklauser/go-sysconf v0.4.0/go.mod
h1:8mTNWyog7H+MpKijp4VmKJAd2bbYQ2zuUwkYRbUArPI=
github.com/tklauser/numcpus v0.12.0
h1:NR85qdvHA9pFse3x3weVZ0r0ST8R6l5RHbZrlRaqob4=
github.com/tklauser/numcpus v0.12.0/go.mod
h1:ABHeXzJnr/qqwguhClkZKT1/8VABcYrsyUiUGobwWJg=
-github.com/tobischo/argon2 v0.1.0
h1:mwAx/9DK/4rP0xzNifb/XMAf43dU3eG1B3aeF88qu4Y=
-github.com/tobischo/argon2 v0.1.0/go.mod
h1:4NLmLFwhWPbT66nRZNgcktV/mibJ6fESoeEp43h9GRw=
-github.com/tobischo/gokeepasslib/v3 v3.6.2
h1:SJzzllmNe7iZLudLJ3Lzdm3pDb++AJqZlmqG+SR8bVc=
-github.com/tobischo/gokeepasslib/v3 v3.6.2/go.mod
h1:ga7HFqG0TZSLNao/QOnV2+yngkrf5186saPxSQ1Xp7o=
-github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e
h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
-github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod
h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
+github.com/tobischo/argon2 v0.2.0
h1:qo701fE9AsxHUIfHlO9HxBwMgvsW+ADgddXP5GVYvaA=
+github.com/tobischo/argon2 v0.2.0/go.mod
h1:CcHsOigH7ztpY+OxaaVC7F4z1RXDU51vXIu/B6gKbho=
+github.com/tobischo/gokeepasslib/v3 v3.7.0
h1:MZKx72JkkQdElHr4gOQlnLF92B6i+Bv4KwxadUr1WzE=
+github.com/tobischo/gokeepasslib/v3 v3.7.0/go.mod
h1:Lvv7/e6Eys07pEjQfpx52W9ptuDRiM4Osiz3m897tQg=
+github.com/xo/terminfo v1.0.0 h1:2ZpYzqWzyyytjk3TP6aJVDhkMAkc99/1xKQdA3TDTBY=
+github.com/xo/terminfo v1.0.0/go.mod
h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
github.com/yuin/goldmark v1.4.13/go.mod
h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/yusufpapurcu/wmi v1.2.4
h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
github.com/yusufpapurcu/wmi v1.2.4/go.mod
h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
go.opentelemetry.io/auto/sdk v1.2.1
h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
go.opentelemetry.io/auto/sdk v1.2.1/go.mod
h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0
h1:8tvICD4vSTOOsNrsI4Ljf6C+6UKvpTEH5XY3JMoyPoo=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0/go.mod
h1:z9+yiacE0IHRqM4qFfkbt/JYlmYXgss8GY/jXoNuPJI=
-go.opentelemetry.io/otel v1.44.0
h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU=
-go.opentelemetry.io/otel v1.44.0/go.mod
h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc=
-go.opentelemetry.io/otel/metric v1.44.0
h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc=
-go.opentelemetry.io/otel/metric v1.44.0/go.mod
h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo=
-go.opentelemetry.io/otel/sdk v1.44.0
h1:nHYwb9lK+fJPU/dnT6s7W7Z8itMWyqrnVfbheVYrZ58=
-go.opentelemetry.io/otel/sdk v1.44.0/go.mod
h1:Osuydd3Se74nqjAKxid74N5eC+jfEqfTegHRnq58oK0=
-go.opentelemetry.io/otel/sdk/metric v1.44.0
h1:3LlKgI+VjbVsjNRFZJZAJ30WjXC5VkNRks6si09iEfI=
-go.opentelemetry.io/otel/sdk/metric v1.44.0/go.mod
h1:5B5pMARnXxKhltooO4xUuCBorl65a4EpnTalObqOigA=
-go.opentelemetry.io/otel/trace v1.44.0
h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk=
-go.opentelemetry.io/otel/trace v1.44.0/go.mod
h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE=
-go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.70.0
h1:LMuyCAyfalSjDyjdC65nK6N0zoTT63+E/u95X0JovZI=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.70.0/go.mod
h1:085m8qbm4hgc8rZWGDEa4vmyyo2c3nPxUslYUKUIU04=
+go.opentelemetry.io/otel v1.45.0
h1:pdrWmLHofpubmArBv1LgFSv1Z0Ie/ppdZzu+kUN5EeU=
+go.opentelemetry.io/otel v1.45.0/go.mod
h1:XZxIqPapzEYnhNSScF5DIqXhm/rYi0FzCe2XddAwZfQ=
+go.opentelemetry.io/otel/metric v1.45.0
h1:7Eg1uH7CJ5cXv9is6tnBe1FI6rj1nwUdbFypRm3br/M=
+go.opentelemetry.io/otel/metric v1.45.0/go.mod
h1:HAPbm1nd3p1PmFH7v2dR+6BjXxw+Lq4a2+pndMAm08s=
+go.opentelemetry.io/otel/sdk v1.45.0
h1:4VVSMgQ83dUgW2aoX5f6JgLvHwIvzcuLnF9lUdCSpCw=
+go.opentelemetry.io/otel/sdk v1.45.0/go.mod
h1:Sr40LgXV7DsKMMJMKOhUWOgMWTfAaqvm2kF0g7ilwuA=
+go.opentelemetry.io/otel/sdk/metric v1.45.0
h1:oVFszMfyj1Am6s24Vtc7wBb8BKLcwepJjNEYILuiE3o=
+go.opentelemetry.io/otel/sdk/metric v1.45.0/go.mod
h1:vUWUxDZvu1WVRj8JA8S0AdhsPrZoDpA2DdZauIh4mDA=
+go.opentelemetry.io/otel/trace v1.45.0
h1:l/mP6Uv7oNO7/TblbhpbgMidxhq1uO/rPsikOyVhxag=
+go.opentelemetry.io/otel/trace v1.45.0/go.mod
h1:qoJJA2xNMnxRrdISU/kLtfUH2wNeQbiv+jhs/CxI8bc=
go.yaml.in/yaml/v3 v3.0.4/go.mod
h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
+go.yaml.in/yaml/v3 v3.0.5 h1:N6y/pJk8buWs9NY5ERU2HSMfm+IuD/OtfdAnq6kESPw=
+go.yaml.in/yaml/v3 v3.0.5/go.mod
h1:HVTZu1O7/Vkt2N+BFy8Zza+lnLsABggaTM2ZpNIGuKg=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod
h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod
h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto=
-golang.org/x/crypto v0.53.0/go.mod
h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio=
-golang.org/x/exp v0.0.0-20260611194520-c48552f49976
h1:X8Hz2ImujgbmetVuW+w2YkyZChE3cBpZi2P158rTG9M=
-golang.org/x/exp v0.0.0-20260611194520-c48552f49976/go.mod
h1:vnf4pv9iKZXY58sQE1L86zmNWJ4159e1RkcWiLCkeEY=
+golang.org/x/crypto v0.55.0 h1:+KWHjbgOaAQ66dh/YlkZKHlz9ZUlq61AFirAR9ntP8M=
+golang.org/x/crypto v0.55.0/go.mod
h1:uq0V9dE/fzQuJtbnL+2EhWOE63vo164FY8xqEnV9xis=
+golang.org/x/exp v0.0.0-20260813180055-c1d0aacb2297
h1:YXnL44eJ77R+ji4/ooy8UsXIhz+lbi2Qgdlc8iRN0gY=
+golang.org/x/exp v0.0.0-20260813180055-c1d0aacb2297/go.mod
h1:Mkmymgv+uMpSQ/XxJ/7GpdrdYoqm3u72jEbpCLiJmNk=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod
h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod
h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -231,33 +234,33 @@
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw=
-golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
+golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs=
+golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod
h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod
h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
-golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc=
-golang.org/x/term v0.44.0/go.mod
h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y=
+golang.org/x/term v0.45.0 h1:NwWyBmoJCbfTHpxrWoZ9C6/VxOf7ic219I8xZZFdrf0=
+golang.org/x/term v0.45.0/go.mod
h1:9aqxs0blBcrm/n0L9QW0aRVD+ktan8ssZromtqJC43w=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
-golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE=
-golang.org/x/text v0.38.0/go.mod
h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4=
+golang.org/x/text v0.41.0 h1:vz/seA0lnX87Othu2f/0L24RcgrXD9/YFTSuGjj3rH8=
+golang.org/x/text v0.41.0/go.mod
h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod
h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod
h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0/go.mod
h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
-golang.org/x/tools v0.47.0 h1:7Kn5x/d1svx/PzryTsqeoZN4TZwqeH5pGWjefhLi/1Q=
-golang.org/x/tools v0.47.0/go.mod
h1:dFHnyTvFWY212G+h7ZY4Vsp/K3U4/7W9TyVaAul8uCA=
+golang.org/x/tools v0.49.0 h1:3NI7VXzL9+1WZD52Dx2ttoPwD5DWrFGpl9mFZDlmisI=
+golang.org/x/tools v0.49.0/go.mod
h1:SJNXV9DBKT0UbdttsQjbfJlAE/q+y36++zo3uL3N0Oo=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/api v0.0.0-20260622175928-b703f567277d
h1:xr2lwHI91bn3UiXcnyzRMQjp2LRiM8wEHzwUaE0YhTs=
-google.golang.org/genproto/googleapis/api
v0.0.0-20260622175928-b703f567277d/go.mod
h1:O0ZOWSrfWfJ+Z5HbwZ+wNtHsg/vk1k2C/w67eww8PfQ=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20260622175928-b703f567277d
h1:mpAgMyM9vQHxycBlDq50y1VHpfSfVwzXvrQKtYbXuUY=
-google.golang.org/genproto/googleapis/rpc
v0.0.0-20260622175928-b703f567277d/go.mod
h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
-google.golang.org/protobuf v1.36.11
h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
-google.golang.org/protobuf v1.36.11/go.mod
h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
+google.golang.org/genproto/googleapis/api v0.0.0-20260817212433-ac3dfec99bb1
h1:lrupDmKL3p5kEX1M92oan027eCKcouzjuPbH6YBK+Rs=
+google.golang.org/genproto/googleapis/api
v0.0.0-20260817212433-ac3dfec99bb1/go.mod
h1:q/3oV3jAi5vwelxsVAprMBC8BcM2zmNe+IjRGd+9/ks=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20260817212433-ac3dfec99bb1
h1:utmqiUzZAEINbLmRyAt1QjVkMyLQ+lvIwCpLaB1rZfw=
+google.golang.org/genproto/googleapis/rpc
v0.0.0-20260817212433-ac3dfec99bb1/go.mod
h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
+google.golang.org/protobuf v1.36.12
h1:pJOKDDOyeXErUroCihFAd5LQuwXBSpVnKGrj5o/fwxc=
+google.golang.org/protobuf v1.36.12/go.mod
h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c
h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod
h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/go-passbolt-cli-0.5.1/internal/cmd/exec.go
new/go-passbolt-cli-0.5.2/internal/cmd/exec.go
--- old/go-passbolt-cli-0.5.1/internal/cmd/exec.go 2026-07-02
11:02:51.000000000 +0200
+++ new/go-passbolt-cli-0.5.2/internal/cmd/exec.go 2026-08-28
16:52:04.000000000 +0200
@@ -72,13 +72,13 @@
envVars := os.Environ()
for i, envVar := range envVars {
- splitIndex := strings.Index(envVar, "=")
- if splitIndex == -1 {
+ before, after, ok := strings.Cut(envVar, "=")
+ if !ok {
continue
}
- key := envVar[:splitIndex]
- value := envVar[splitIndex+1:]
+ key := before
+ value := after
if !strings.HasPrefix(value, PassboltPrefix) {
continue
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/go-passbolt-cli-0.5.1/internal/cmd/folder/json_test.go
new/go-passbolt-cli-0.5.2/internal/cmd/folder/json_test.go
--- old/go-passbolt-cli-0.5.1/internal/cmd/folder/json_test.go 2026-07-02
11:02:51.000000000 +0200
+++ new/go-passbolt-cli-0.5.2/internal/cmd/folder/json_test.go 2026-08-28
16:52:04.000000000 +0200
@@ -14,7 +14,7 @@
// FolderJSONOutput.Personal must emit even when false so that
// --filter 'personal == false' isn't blocked by omitempty stripping.
func TestFolderJSONOutput_PersonalAlwaysEmitted(t *testing.T) {
- out := FolderJSONOutput{ID: ptr("f1"), Name: ptr("shared"), Personal:
false}
+ out := FolderJSONOutput{ID: new("f1"), Name: new("shared"), Personal:
false}
got, err := json.Marshal(out)
if err != nil {
t.Fatalf("marshal: %v", err)
@@ -99,7 +99,7 @@
// appears, id/timestamps omitted. End-to-end output is covered by the
// integration get-roundtrip scripts.
func TestFolderGetJSONContract(t *testing.T) {
- out := FolderJSONOutput{FolderParentID: ptr("p1"), Name: ptr("shared")}
+ out := FolderJSONOutput{FolderParentID: new("p1"), Name: new("shared")}
m := marshalToMap(t, out)
assertKeySet(t, m, map[string]bool{"folder_parent_id": true, "name":
true, "personal": true})
for _, k := range []string{"id", "created_timestamp",
"modified_timestamp"} {
@@ -171,8 +171,6 @@
}
}
-func ptr[T any](v T) *T { return &v }
-
// captureStdout swaps os.Stdout for a pipe, runs fn, restores stdout, and
// returns whatever fn wrote.
func captureStdout(t *testing.T, fn func()) string {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/go-passbolt-cli-0.5.1/internal/cmd/group/json_test.go
new/go-passbolt-cli-0.5.2/internal/cmd/group/json_test.go
--- old/go-passbolt-cli-0.5.1/internal/cmd/group/json_test.go 2026-07-02
11:02:51.000000000 +0200
+++ new/go-passbolt-cli-0.5.2/internal/cmd/group/json_test.go 2026-08-28
16:52:04.000000000 +0200
@@ -14,7 +14,7 @@
// GroupJSONOutput's Deleted/UserCount must emit even when false/0 so that
// --filter 'deleted == false' / 'user_count == 0' isn't blocked by omitempty.
func TestGroupJSONOutput_ScalarFieldsAlwaysEmitted(t *testing.T) {
- out := GroupJSONOutput{ID: ptr("g1"), Name: ptr("eng"), Deleted: false,
UserCount: 0}
+ out := GroupJSONOutput{ID: new("g1"), Name: new("eng"), Deleted: false,
UserCount: 0}
got, err := json.Marshal(out)
if err != nil {
t.Fatalf("marshal: %v", err)
@@ -92,9 +92,9 @@
// covered by the integration get-roundtrip scripts.
func TestGroupGetJSONContract(t *testing.T) {
out := GroupJSONOutput{
- Name: ptr("eng"),
+ Name: new("eng"),
Users: []GroupUserMembershipJSONOutput{
- {ID: ptr("u1"), Username: ptr("ada@x"), FirstName:
ptr("Ada"), LastName: ptr("L"), IsGroupManager: ptr(true)},
+ {ID: new("u1"), Username: new("ada@x"), FirstName:
new("Ada"), LastName: new("L"), IsGroupManager: new(true)},
},
}
m := marshalToMap(t, out)
@@ -182,8 +182,6 @@
}
}
-func ptr[T any](v T) *T { return &v }
-
// captureStdout swaps os.Stdout for a pipe, runs fn, restores stdout, and
// returns whatever fn wrote.
func captureStdout(t *testing.T, fn func()) string {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/go-passbolt-cli-0.5.1/internal/cmd/keepass/export.go
new/go-passbolt-cli-0.5.2/internal/cmd/keepass/export.go
--- old/go-passbolt-cli-0.5.1/internal/cmd/keepass/export.go 2026-07-02
11:02:51.000000000 +0200
+++ new/go-passbolt-cli-0.5.2/internal/cmd/keepass/export.go 2026-08-28
16:52:04.000000000 +0200
@@ -58,7 +58,7 @@
case "v3":
kdbxVersion = gokeepasslib.WithDatabaseKDBXVersion3()
case "v4":
- kdbxVersion = gokeepasslib.WithDatabaseKDBXVersion4()
+ kdbxVersion = gokeepasslib.WithDatabaseKDBXVersion40()
default:
return fmt.Errorf("invalid kdbx-version %q: must be v3 or v4",
kdbxVersionFlag)
}
@@ -202,44 +202,20 @@
// Custom fields: each one becomes a protected KDBX field, matching
what the
// Passbolt browser extension does in
resourcesKdbxExporter.setCustomFields.
- // Field name comes from metadata.custom_fields[].metadata_key, value
from
- // secret.custom_fields[].secret_value, correlated by id.
+ // helper.ParseCustomFields correlates the metadata and secret halves
by id.
addCustomFields(&entry, metadata, secretFields)
return &entry, nil
}
func addCustomFields(entry *gokeepasslib.Entry, metadata, secretFields
map[string]any) {
- metaList, _ := metadata["custom_fields"].([]any)
- if len(metaList) == 0 {
- return
- }
- secretList, _ := secretFields["custom_fields"].([]any)
- valueByID := make(map[string]string, len(secretList))
- for _, item := range secretList {
- m, ok := item.(map[string]any)
- if !ok {
- continue
- }
- id, _ := m["id"].(string)
- val, _ := m["secret_value"].(string)
- if id != "" {
- valueByID[id] = val
- }
- }
- for _, item := range metaList {
- m, ok := item.(map[string]any)
- if !ok {
- continue
- }
- id, _ := m["id"].(string)
- key, _ := m["metadata_key"].(string)
- if key == "" {
+ for _, cf := range helper.ParseCustomFields(metadata, secretFields) {
+ if cf.Name == "" {
continue
}
entry.Values = append(entry.Values, gokeepasslib.ValueData{
- Key: key,
- Value: gokeepasslib.V{Content: valueByID[id],
Protected: w.NewBoolWrapper(true)},
+ Key: cf.Name,
+ Value: gokeepasslib.V{Content: cf.Value, Protected:
w.NewBoolWrapper(true)},
})
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/go-passbolt-cli-0.5.1/internal/cmd/keepass/export_test.go
new/go-passbolt-cli-0.5.2/internal/cmd/keepass/export_test.go
--- old/go-passbolt-cli-0.5.1/internal/cmd/keepass/export_test.go
2026-07-02 11:02:51.000000000 +0200
+++ new/go-passbolt-cli-0.5.2/internal/cmd/keepass/export_test.go
2026-08-28 16:52:04.000000000 +0200
@@ -4,6 +4,8 @@
"net/url"
"strings"
"testing"
+
+ "github.com/tobischo/gokeepasslib/v3"
)
// encodeQuery is a copy of url.Values.Encode that uses %20 instead of '+' for
@@ -78,3 +80,70 @@
t.Errorf("encodeQuery(%v) = %q, want label=foo&bar=baz (current
behavior)", v, got)
}
}
+
+// addCustomFields delegates the metadata/secret merge to
+// helper.ParseCustomFields; these tests cover the KDBX-specific part:
+// ordering, the Protected flag, and dropping fields KeePass cannot key.
+func TestAddCustomFields(t *testing.T) {
+ const idA = "11111111-1111-1111-1111-111111111111"
+ const idB = "22222222-2222-2222-2222-222222222222"
+
+ metadata := map[string]any{
+ "custom_fields": []any{
+ map[string]any{"id": idA, "metadata_key": "api-key"},
+ // Cleartext value: the secret half must still carry a
(empty)
+ // secret_value, so this used to export as blank.
+ map[string]any{"id": idB, "metadata_key": "env",
"metadata_value": "production"},
+ },
+ }
+ secretFields := map[string]any{
+ "custom_fields": []any{
+ map[string]any{"id": idA, "secret_value":
"sk-secret-123"},
+ map[string]any{"id": idB, "secret_value": ""},
+ },
+ }
+
+ entry := gokeepasslib.NewEntry()
+ addCustomFields(&entry, metadata, secretFields)
+
+ want := []struct{ key, value string }{
+ {"api-key", "sk-secret-123"},
+ {"env", "production"},
+ }
+ if len(entry.Values) != len(want) {
+ t.Fatalf("got %d values, want %d: %+v", len(entry.Values),
len(want), entry.Values)
+ }
+ for i, w := range want {
+ got := entry.Values[i]
+ if got.Key != w.key {
+ t.Errorf("value %d: key = %q, want %q (order must
follow the metadata array)", i, got.Key, w.key)
+ }
+ if got.Value.Content != w.value {
+ t.Errorf("value %d (%s): content = %q, want %q", i,
w.key, got.Value.Content, w.value)
+ }
+ if !got.Value.Protected.Bool {
+ t.Errorf("value %d (%s): not protected, want every
custom field protected", i, w.key)
+ }
+ }
+}
+
+func TestAddCustomFields_SkipsUnnamedAndEmpty(t *testing.T) {
+ const idA = "11111111-1111-1111-1111-111111111111"
+
+ // A field with no name on either side cannot be keyed in KDBX.
+ entry := gokeepasslib.NewEntry()
+ addCustomFields(&entry,
+ map[string]any{"custom_fields": []any{map[string]any{"id":
idA}}},
+ map[string]any{"custom_fields": []any{map[string]any{"id": idA,
"secret_value": "v"}}},
+ )
+ if len(entry.Values) != 0 {
+ t.Errorf("unnamed field: got %+v, want no values", entry.Values)
+ }
+
+ // A resource without custom fields must add nothing.
+ entry = gokeepasslib.NewEntry()
+ addCustomFields(&entry, map[string]any{"name": "x"},
map[string]any{"password": "p"})
+ if len(entry.Values) != 0 {
+ t.Errorf("no custom fields: got %+v, want no values",
entry.Values)
+ }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/go-passbolt-cli-0.5.1/internal/cmd/resource/json_test.go
new/go-passbolt-cli-0.5.2/internal/cmd/resource/json_test.go
--- old/go-passbolt-cli-0.5.1/internal/cmd/resource/json_test.go
2026-07-02 11:02:51.000000000 +0200
+++ new/go-passbolt-cli-0.5.2/internal/cmd/resource/json_test.go
2026-08-28 16:52:04.000000000 +0200
@@ -16,8 +16,8 @@
// Regression guard mirroring the user lifecycle-field test.
func TestResourceJSONOutput_BoolFieldsAlwaysEmitted(t *testing.T) {
out := ResourceJSONOutput{
- ID: ptr("r1"),
- Name: ptr("server"),
+ ID: new("r1"),
+ Name: new("server"),
Deleted: false,
Expired: false,
}
@@ -123,12 +123,12 @@
// the integration get-roundtrip scripts.
func TestResourceGetJSONContract(t *testing.T) {
out := ResourceJSONOutput{
- FolderParentID: ptr("f1"),
- Name: ptr("server"),
- Username: ptr("admin"),
- URI: ptr("https://example.com"),
- Password: ptr("secret"),
- Description: ptr("d"),
+ FolderParentID: new("f1"),
+ Name: new("server"),
+ Username: new("admin"),
+ URI: new("https://example.com"),
+ Password: new("secret"),
+ Description: new("d"),
}
m := marshalToMap(t, out)
@@ -219,8 +219,6 @@
}
}
-func ptr[T any](v T) *T { return &v }
-
// captureStdout swaps os.Stdout for a pipe, runs fn, restores stdout, and
// returns whatever fn wrote. Used to test functions that print directly.
func captureStdout(t *testing.T, fn func()) string {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/go-passbolt-cli-0.5.1/internal/cmd/resource/list.go
new/go-passbolt-cli-0.5.2/internal/cmd/resource/list.go
--- old/go-passbolt-cli-0.5.1/internal/cmd/resource/list.go 2026-07-02
11:02:51.000000000 +0200
+++ new/go-passbolt-cli-0.5.2/internal/cmd/resource/list.go 2026-08-28
16:52:04.000000000 +0200
@@ -113,12 +113,9 @@
func decryptResourcesParallel(ctx context.Context, client *api.Client,
resources []api.Resource, needSecrets bool) ([]decryptedResource, error) {
// Use parallel decryption with worker pool
- numWorkers := int(viper.GetUint("workers"))
-
- // Limit Worker count to Resource count
- if len(resources) < numWorkers {
- numWorkers = len(resources)
- }
+ numWorkers := min(
+ // Limit Worker count to Resource count
+ len(resources), int(viper.GetUint("workers")))
// Filter resources - only require secrets if we're fetching them
var validResources []api.Resource
@@ -142,9 +139,7 @@
// Start workers
var wg sync.WaitGroup
for w := 0; w < numWorkers; w++ {
- wg.Add(1)
- go func() {
- defer wg.Done()
+ wg.Go(func() {
for idx := range jobs {
resource := validResources[idx]
@@ -204,7 +199,7 @@
err: err,
}
}
- }()
+ })
}
// Send jobs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/go-passbolt-cli-0.5.1/internal/cmd/user/filter_test.go
new/go-passbolt-cli-0.5.2/internal/cmd/user/filter_test.go
--- old/go-passbolt-cli-0.5.1/internal/cmd/user/filter_test.go 2026-07-02
11:02:51.000000000 +0200
+++ new/go-passbolt-cli-0.5.2/internal/cmd/user/filter_test.go 2026-08-28
16:52:04.000000000 +0200
@@ -74,7 +74,7 @@
const n = 10000
items := make([]api.User, n)
wantActive := 0
- for i := 0; i < n; i++ {
+ for i := range n {
active := i%2 == 0
if active {
wantActive++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/go-passbolt-cli-0.5.1/internal/cmd/user/json_test.go
new/go-passbolt-cli-0.5.2/internal/cmd/user/json_test.go
--- old/go-passbolt-cli-0.5.1/internal/cmd/user/json_test.go 2026-07-02
11:02:51.000000000 +0200
+++ new/go-passbolt-cli-0.5.2/internal/cmd/user/json_test.go 2026-08-28
16:52:04.000000000 +0200
@@ -16,8 +16,8 @@
// omitempty-style stripping. Regression guard.
func TestUserJSONOutput_LifecycleFieldsAlwaysEmitted(t *testing.T) {
out := UserJSONOutput{
- ID: ptr("u1"),
- Username: ptr("[email protected]"),
+ ID: new("u1"),
+ Username: new("[email protected]"),
Active: false,
Deleted: false,
Disabled: false,
@@ -117,10 +117,10 @@
// output is covered by the integration get-roundtrip scripts.
func TestUserGetJSONContract(t *testing.T) {
out := UserJSONOutput{
- Username: ptr("[email protected]"),
- FirstName: ptr("Ada"),
- LastName: ptr("Lovelace"),
- Role: ptr("user"),
+ Username: new("[email protected]"),
+ FirstName: new("Ada"),
+ LastName: new("Lovelace"),
+ Role: new("user"),
}
m := marshalToMap(t, out)
assertKeySet(t, m, map[string]bool{
@@ -205,8 +205,6 @@
}
}
-func ptr[T any](v T) *T { return &v }
-
// captureStdout swaps os.Stdout for a pipe, runs fn, restores stdout, and
// returns whatever fn wrote. Used to test functions that print directly
// rather than returning an io.Writer-bound result.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/go-passbolt-cli-0.5.1/internal/testenv/passbolt.go
new/go-passbolt-cli-0.5.2/internal/testenv/passbolt.go
--- old/go-passbolt-cli-0.5.1/internal/testenv/passbolt.go 2026-07-02
11:02:51.000000000 +0200
+++ new/go-passbolt-cli-0.5.2/internal/testenv/passbolt.go 2026-08-28
16:52:04.000000000 +0200
@@ -18,6 +18,7 @@
"errors"
"fmt"
"io"
+ "os"
"regexp"
"strings"
"testing"
@@ -35,10 +36,30 @@
// versa) is a deliberate, reviewable change. Refresh both together when moving
// to a new Passbolt release.
const (
- mariadbImage =
"mariadb:10.11@sha256:8acd4a5561e8897cfc8a99480f25bcecb10b726fa17b1ec7381c6ef36fa00a79"
- passboltImage =
"passbolt/passbolt:5.12.0-1-ce@sha256:f4344e1d45159494339ca7184c58e6b76067602e898bee72b53bfa093366c24b"
+ mariadbImage =
"mariadb:10.11@sha256:8acd4a5561e8897cfc8a99480f25bcecb10b726fa17b1ec7381c6ef36fa00a79"
+
+ // defaultPassboltImage is what every normal run uses.
+ defaultPassboltImage =
"passbolt/passbolt:5.14.3-1-ce@sha256:9f97ab2a854019737b4fc30a7fdb598f80a547769d4480a76e6f4b6d0bfbd431"
+
+ // PassboltImageEnv names the environment variable that overrides
+ // defaultPassboltImage, so the same suite can be replayed against
several
+ // Passbolt releases (see scripts/test-matrix.sh). An override is
+ // deliberately tag-only: pinning a digest per version would mean
tracking
+ // ~15 digests by hand. MariaDB stays pinned either way — it is not the
+ // variable under test.
+ PassboltImageEnv = "PASSBOLT_TEST_IMAGE"
)
+// PassboltImage reports the Passbolt image the next Start will use: the
+// PASSBOLT_TEST_IMAGE override when set and non-blank, otherwise the pinned
+// default.
+func PassboltImage() string {
+ if img := strings.TrimSpace(os.Getenv(PassboltImageEnv)); img != "" {
+ return img
+ }
+ return defaultPassboltImage
+}
+
// Credentials is everything a test needs to authenticate as a Passbolt user.
type Credentials struct {
UserID string
@@ -114,7 +135,7 @@
pbReq := testcontainers.GenericContainerRequest{
ContainerRequest: testcontainers.ContainerRequest{
- Image: passboltImage,
+ Image: PassboltImage(),
Networks: []string{net.Name},
ExposedPorts: []string{"80/tcp"},
Env: map[string]string{
@@ -339,12 +360,18 @@
// "passphrase must be Empty for Server Keys" per the SDK's
// MetadataPrivateKeyData comments.
+ //
+ // Signed must be set: api.Time always marshals (omitempty doesn't
apply to struct
+ // fields), so leaving it zero-value sends "0001-01-01T00:00:00Z". The
Go SDK never
+ // validates this field, so that goes unnoticed here, but the browser
extension's
+ // MetadataPrivateKeyDataEntity does validate it and rejects the record
outright.
payload, err := json.Marshal(api.MetadataPrivateKeyData{
ObjectType: "PASSBOLT_METADATA_PRIVATE_KEY",
Domain: p.BaseURL,
Fingerprint: fingerprint,
ArmoredKey: privateArmored,
Passphrase: "",
+ Signed: api.Time{Time: time.Now()},
})
if err != nil {
return fmt.Errorf("marshal metadata private key data: %w", err)
@@ -379,8 +406,8 @@
// metadata key's PGP user-id, which Passbolt validates loosely.
func stripScheme(url string) string {
for _, sep := range []string{"://"} {
- if i := strings.Index(url, sep); i >= 0 {
- return url[i+len(sep):]
+ if _, after, ok := strings.Cut(url, sep); ok {
+ return after
}
}
return url
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/go-passbolt-cli-0.5.1/internal/util/client.go
new/go-passbolt-cli-0.5.2/internal/util/client.go
--- old/go-passbolt-cli-0.5.1/internal/util/client.go 2026-07-02
11:02:51.000000000 +0200
+++ new/go-passbolt-cli-0.5.2/internal/util/client.go 2026-08-28
16:52:04.000000000 +0200
@@ -131,7 +131,7 @@
if challenge.Provider.TOTP == "" {
return http.Cookie{}, fmt.Errorf("server
Provided no TOTP Provider")
}
- for i := 0; i < 3; i++ {
+ for range 3 {
var code string
code, err := ReadPassword("Enter TOTP:")
if err != nil {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/go-passbolt-cli-0.5.1/renovate.json
new/go-passbolt-cli-0.5.2/renovate.json
--- old/go-passbolt-cli-0.5.1/renovate.json 1970-01-01 01:00:00.000000000
+0100
+++ new/go-passbolt-cli-0.5.2/renovate.json 2026-08-28 16:52:04.000000000
+0200
@@ -0,0 +1,6 @@
+{
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
+ "extends": [
+ "local>passbolt/passbolt-ops/renovate"
+ ]
+}
\ No newline at end of file
++++++ vendor.tar.gz ++++++
++++ 83446 lines of diff (skipped)