Giter Club home page Giter Club logo

lazy-secrets's Introduction

Lazy Secrets

Latest Version

A (thin) wrapper for google/cloud-secret-manager to reduce boilerplate

Install

composer require battis/lazy-secrets

Use

use Battis\LazySecrets\Secrets;

$data = Secrets::get("MY_APP_SECRET");

Background

While the Google Cloud Secret Manager is a fine way to store (and access) app secrets, it also entails a bunch of boilerplate code that I don't want to fat finger. So, instead of writing...

use Google\Cloud\SecretManager\V1\SecretManagerServiceClient;

$client = new SecretManagerServiceClient();
$project = $_ENV["GOOGLE_CLOUD_PROJECT"];
$key = "MY_APP_SECRET";
$version = "latest";
$secret = $client->accessSecretVersion(
  "projects/$project/secrets/$key/versions/$version"
);
$data = $secret->getPayload()->getData();

// and even (if you're packing a lot into one secret)
$obj = json_decode($data);

// ...and then using the $data or $obj

...I'd rather just write:

use Battis\LazySecrets\Secrets;

$data = Secrets::get("MY_APP_SECRET");

// or
Secrets::init($project, true);
$obj = Secrets::get("MY_APP_SECRET");

Alternatively, a PSR-16 Simple Cache implementation is also available (for easy use with dependency injection):

use Battis\LazySecrets\Cache;

// assume that the `GOOGLE_CLOUD_PROJECT` environment variable is set
$secrets = new Cache();

$obj = $secrets->get("MY_APP_SECRET");

or

/** src/Example/DependencyConsumer */

namespace Example;

use Psr\SimpleCache\CacheInterface;

class DependencyConsumer
{
  public function __constructor(CacheInterface $cache)
  {
    // ...
  }
}
/** src/app.php */

$container = new DI\Container([
  Psr\SimpleCache\CacheInterface::class => DI\create(
    \Battis\LazySecrets\Cache::class
  ),
]);
$consumer = $container->get(DependencyConsumer::class);

lazy-secrets's People

Contributors

battis avatar dependabot[bot] avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.