/gotham

GCP authentication

Primary LanguageElixirApache License 2.0Apache-2.0

CircleCI

Gotham

Support multiple GCP service account

gotham city

Google + Auth + Batman = Gotham

Installation

  1. Add Gotham to you mix.exs
def deps do
  [
    {:gotham, "~> 0.1.0"}
  ]
end
  1. Configure service accounts
config :gotham,
  default_account: :account1,
  accounts: [
    {:account1, file_path: "path/to/google/json/creds.json"},
    {:account2, file_path: "path/to/google/json/creds.json"}
    {:account3, env_var: "GOOGLE_APPLICATION_CREDENTIALS"},
    {:account4, content: """
      {
        "type": "service_account",
        "project_id": "fake_project",
        "private_key_id": "46900d88664ebba4eb08f745b365254e2b0625ab",
        ...
      }
    """
    }

Usage

# Use default account
{:ok, token} = Gotham.for_scope("https://www.googleapis.com/auth/pubsub")

%Gotham.Token{
  project_id: "test",
  access_token: "TOKEN",
  account_name: :account1,
  expire_at: 1561090622,
  scope: "https://www.googleapis.com/auth/pubsub",
  token_type: "Bearer"
}

# Change acocunt

Gotham.put_account_name(:account2)
Gotham.for_scope("https://www.googleapis.com/auth/pubsub")

{:ok,
 %Gotham.Token{
   project_id: "test",
   access_token: "TOKEN",
   account_name: :account2,
   expire_at: 1561092261,
   scope: "https://www.googleapis.com/auth/pubsub",
   token_type: "Bearer"
 }}

# Run a function with a specific account

Gotham.with_account_name(:account2, fn ->
  Gotham.for_scope("https://www.googleapis.com/auth/pubsub")
end)

{:ok,
 %Gotham.Token{
   project_id: "test",
   access_token: "TOKEN",
   account_name: :account2,
   expire_at: 1561092261,
   scope: "https://www.googleapis.com/auth/pubsub",
   token_type: "Bearer"
 }}