Goth
Elixir package for Oauth authentication via Google Cloud APIs
Install / Use
/learn @peburrows/GothREADME
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.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 endIf you set
GOOGLE_APPLICATION_CREDENTIALSorGOOGLE_APPLICATION_CREDENTIALS_JSON, have a~/.config/gcloud/application_default_credentials.jsonfile,~/.config/gcloud/configurations/config_defaultfile or deploy your application to Google Cloud, you can omit the:sourceoption:def start(_type, _args) do children = [ {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) 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.
Upgrading from Goth 1.2
See Upgrading from Goth 1.2 guide for more information.
Community resources
Copyright and License
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.
Related Skills
tmux
342.5kRemote-control tmux sessions for interactive CLIs by sending keystrokes and scraping pane output.
blogwatcher
342.5kMonitor blogs and RSS/Atom feeds for updates using the blogwatcher CLI.
Unla
2.1k🧩 MCP Gateway - A lightweight gateway service that instantly transforms existing MCP Servers and APIs into MCP servers with zero code changes. Features Docker deployment and management UI, requiring no infrastructure modifications.
github-trending
Multi-agent orchestration system for infrastructure monitoring, incident response, and load testing with autonomous AI agents
