codenamephp/platform.secretsmanager.base

1.2.0 2023-09-05 07:56 UTC

This package is auto-updated.

Last update: 2024-09-05 10:11:19 UTC


README

Packagist Version Packagist PHP Version Support Lines of code GitHub code size in bytes CI Packagist Downloads GitHub

这是一个基础包,旨在提供与秘密管理器集成的通用接口,以便轻松交换。

安装

最简单的方式是通过 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')
    ),
  ]);