Goth
Google + Auth = Goth
A simple library to generate and retrieve OAuth2 tokens for use with Google Cloud Service accounts.
Installation
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
:gothto your list of dependencies inmix.exs.def deps do[{:goth, "~> 1.3"}]endAdd Goth to your supervision tree:
defmodule MyApp.Application douse Applicationdef start(_type, _args) docredentials = "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)endendIf you set
GOOGLE_APPLICATION_CREDENTIALSorGOOGLE_APPLICATION_CREDENTIALS_JSON, have a~/.config/gcloud/application_default_credentials.jsonfile, or deploy your application to Google Cloud, you can omit the:sourceoption:def start(_type, _args) dochildren = [{Goth, name: MyApp.Goth}]Supervisor.start_link(children, strategy: :one_for_one)endIf you want to use multiple credentials, you may consider doing:
def start(_type, _args) doSupervisor.start_link(servers(), strategy: :one_for_one)enddefp servers doservers = [{MyApp.Cred1, source1},...{MyApp.CredN, source2}]for {name, source} <- servers doSupervisor.child_spec({Goth, name: name, source: source}, id: name)endendFetch 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.
Upgrading from Goth 1.2
See Upgrading from Goth 1.2 guide for more information.