Google + Auth = Goth
A simple library to generate and retrieve OAuth2 tokens for use with Google Cloud Service accounts.
Note: below are instructions for using Goth v1.3+. For more information on earlier versions of Goth, see v1.2.0 documentation on hexdocs.pm.
-
Add
:goth
to your list of dependencies inmix.exs
.def deps do [ {:goth, "~> 1.4"} ] end
-
Add Goth to your supervision tree:
defmodule MyApp.Application do use Application def start(_type, _args) do credentials = "GOOGLE_APPLICATION_CREDENTIALS_JSON" |> System.fetch_env!() |> Jason.decode!() source = {:service_account, credentials} children = [ {Goth, name: MyApp.Goth, source: source} ] Supervisor.start_link(children, strategy: :one_for_one) end end
If you set
GOOGLE_APPLICATION_CREDENTIALS
orGOOGLE_APPLICATION_CREDENTIALS_JSON
, have a~/.config/gcloud/application_default_credentials.json
file,~/.config/gcloud/configurations/config_default
file or deploy your application to Google Cloud, you can omit the:source
option:def start(_type, _args) do children = [ {Goth, name: MyApp.Goth} ] Supervisor.start_link(children, strategy: :one_for_one) end
If you want to use multiple credentials, you may consider doing:
def start(_type, _args) do Supervisor.start_link(servers(), strategy: :one_for_one) end defp servers do servers = [ {MyApp.Cred1, source1}, ... {MyApp.CredN, source2} ] for {name, source} <- servers do Supervisor.child_spec({Goth, name: name, source: source}, id: name) end end
-
Fetch the token:
iex> Goth.fetch!(MyApp.Goth) %Goth.Token{ expires: 1453356568, token: "ya29.cALlJ4ICWRvMkYB-WsAR-CZnExE459PA7QPqKg5nei9y2T9-iqmbcgxq8XrTATNn_BPim", type: "Bearer", ... }
See Goth.start_link/1
for more information about possible configuration options.
See Upgrading from Goth 1.2 guide for more information.
Copyright (c) 2016 Phil Burrows
This work is free. You can redistribute it and/or modify it under the terms of the MIT License. See the LICENSE.md file for more details.