codenamephp / platform.secretsmanager.base
1.2.0
2023-09-05 07:56 UTC
Requires
- php: ^8.1
This package is auto-updated.
Last update: 2024-09-05 10:11:19 UTC
README
这是一个基础包,旨在提供与秘密管理器集成的通用接口,以便轻松交换。
安装
最简单的方式是通过 composer。只需在您的命令行中运行 composer require codenamephp/platform.secretsmanager.base
,它将为您安装最新版本。
使用方法
此包提供了秘密、有效载荷和客户端的基本接口。在实际实现中使用此包,并针对服务构建实现。
代理
已实施了一个简单、轻量级的代理系统。此系统用于懒加载秘密,理想情况下只加载一次。
示例
use de\codenamephp\platform\secretsManager\base\Secret\Proxy\String\Factory\WithClientAsClassMemberFactory; use de\codenamephp\platform\secretsManager\base\Secret\Sealed; $client = new SomeClientImplementation(); $factory = new WithClientAsClassMemberFactory($client); $secret = $factory->build(new Sealed('someSecretName', 'some-project')); $multipleSecrets = $factory->buildMultiple( another: new Sealed('anotherSecretName', 'some-project'), more: new Sealed('moreSecretName', 'some-project'), ); //remember you can use parameter names as array keys for variadic $allSecrets = [ 'some' => $secret, ...$multipleSecrets, //simple spread is possible ];
代理接口扩展了 \Stringable,因此它可以在任何需要字符串的地方使用。
使用 Deployer 时的注意事项
由于 Deployer 获取秘密的方式,您应该将值包装在闭包中。这是因为当 Deployer 获取配置时,它会对闭包进行检查,并“原样”返回它们。但是,在 else 路径中,只是将值传递给 preg_replace,并假设它是一个数组可调用,所以最终将返回 null。
$deployerFunctions->host('production') ->setHostname('some-host.com') ->set('database', static fn() => [ //this closure fixes the issue 'name' => 'some-db', ...$stringProxyFactory->buildMultiple( user: new Sealed('db_user', 'my-project'), password: new Sealed('db_password', 'my-project') ), ]);