chore: rename from oauth2_token_manager to oauth2_token_agent to avoid conflict

This commit is contained in:
Matt Franczak 2024-03-25 10:59:15 -05:00
parent e21ad2d797
commit e8e12ca521
7 changed files with 28 additions and 28 deletions

2
.gitignore vendored
View File

@ -20,7 +20,7 @@ erl_crash.dump
*.ez *.ez
# Ignore package tarball (built via "mix hex.build"). # Ignore package tarball (built via "mix hex.build").
oauth2_token_manager-*.tar oauth2_token_agent-*.tar
# Temporary files, for example, from tests. # Temporary files, for example, from tests.
/tmp/ /tmp/

View File

@ -1,4 +1,4 @@
# OAuth2TokenManager # OAuth2TokenAgent
This package works with the `oauth2` package to manage the automatic renewal of This package works with the `oauth2` package to manage the automatic renewal of
tokens before they expire tokens before they expire
@ -6,25 +6,25 @@ tokens before they expire
## Installation ## Installation
If [available in Hex](https://hex.pm/docs/publish), the package can be installed If [available in Hex](https://hex.pm/docs/publish), the package can be installed
by adding `oauth2_token_manager` to your list of dependencies in `mix.exs`: by adding `oauth2_token_agent` to your list of dependencies in `mix.exs`:
```elixir ```elixir
def deps do def deps do
[ [
{:oauth2_token_manager, "~> 0.1.0"} {:oauth2_token_agent, "~> 0.1.0"}
] ]
end end
``` ```
Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc) Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)
and published on [HexDocs](https://hexdocs.pm). Once published, the docs can and published on [HexDocs](https://hexdocs.pm). Once published, the docs can
be found at <https://hexdocs.pm/oauth2_token_manager>. be found at <https://hexdocs.pm/oauth2_token_agent>.
## Usage ## Usage
Create an `OAuth2.Client` instance to use to get the initial token and pass it to Create an `OAuth2.Client` instance to use to get the initial token and pass it to
`OAuth2TokenMananger.TokenAgent.start_link/1` along with the inline `OAuth2TokenAgent.TokenAgent.start_link/1` along with the inline
`OAuth2TokenManager.TokenRefreshStrategy` and the name for the `Agent`. `OAuth2TokenAgent.TokenRefreshStrategy` and the name for the `Agent`.
The client can be configured as described at The client can be configured as described at
https://github.com/ueberauth/oauth2#configure-a-http-client. https://github.com/ueberauth/oauth2#configure-a-http-client.
@ -37,34 +37,34 @@ client = Client.new([
site: "https://example.com/" site: "https://example.com/"
]) ])
{:ok, agent} = OAuth2TokenManager.TokenAgent.start_link( {:ok, agent} = OAuth2TokenAgent.TokenAgent.start_link(
name: MyModule.TokenAgent, name: MyModule.TokenAgent,
initial_client: client, initial_client: client,
inline_refresh_strategy: %OAuth2TokenManager.TokenRefreshStrategy{seconds_before_expires: 30} inline_refresh_strategy: %OAuth2TokenAgent.TokenRefreshStrategy{seconds_before_expires: 30}
) )
``` ```
The current version of the client can be retrieved using The current version of the client can be retrieved using
`OAuth2TokenManager.TokenAgent.get_client/1` with the agent's PID or name. `OAuth2TokenAgent.TokenAgent.get_client/1` with the agent's PID or name.
This client will automatically use the access token as a Bearer token in This client will automatically use the access token as a Bearer token in
the Authorization header when calling its request methods. The access token the Authorization header when calling its request methods. The access token
itself can be retrieved from the client struct if it is desirable to use separately itself can be retrieved from the client struct if it is desirable to use separately
configured clients and `OAuth2TokenManager.TokenAgent.get_access_token/1` is configured clients and `OAuth2TokenAgent.TokenAgent.get_access_token/1` is
provided for convenience when doing so. provided for convenience when doing so.
```Elixir ```Elixir
current_client = OAuth2TokenManager.TokenAgent.get_client(agent) current_client = OAuth2TokenAgent.TokenAgent.get_client(agent)
current_client = OAuth2TokenManager.TokenAgent.get_client(MyModule.TokenAgent) current_client = OAuth2TokenAgent.TokenAgent.get_client(MyModule.TokenAgent)
access_token = OAuth2TokenManager.TokenAgent.get_access_token(MyModule.TokenAgent) access_token = OAuth2TokenAgent.TokenAgent.get_access_token(MyModule.TokenAgent)
``` ```
The token can be refreshed by calling `OAuth2TokenManager.TokenAgent.refresh_tokens/1`. The token can be refreshed by calling `OAuth2TokenAgent.TokenAgent.refresh_tokens/1`.
If a refresh token is available, it will be exchanged for a new set of tokens. If a refresh token is available, it will be exchanged for a new set of tokens.
If no refresh token is available or the attempt to use the refresh results in an error, If no refresh token is available or the attempt to use the refresh results in an error,
the original client will be used again to attempt to obtain a new set of tokens. the original client will be used again to attempt to obtain a new set of tokens.
```Elixir ```Elixir
:ok = OAuth2TokenManager.TokenAgent.refresh(MyModule.TokenAgent) :ok = OAuth2TokenAgent.TokenAgent.refresh(MyModule.TokenAgent)
``` ```
This can be used to handle complex token refresh logic, but it will generally be This can be used to handle complex token refresh logic, but it will generally be
@ -91,7 +91,7 @@ The inline refreshes only occur as part of request for data from the agent; this
saves unnecessary renewal requests in low-volume systems but tokens may be allowed saves unnecessary renewal requests in low-volume systems but tokens may be allowed
to expire if unused. If refresh tokens need to be kept active in a system where the to expire if unused. If refresh tokens need to be kept active in a system where the
time between requests exceeds the token duration and the initial client cannot be time between requests exceeds the token duration and the initial client cannot be
reused, using `OAuth2TokenManager.TokenAgent.refresh` may be necessary. reused, using `OAuth2TokenAgent.TokenAgent.refresh` may be necessary.
The inline refreshes occur during message processing in the agent, which is not The inline refreshes occur during message processing in the agent, which is not
concurrent per agent. This guarantees that redundant refresh calls will not be concurrent per agent. This guarantees that redundant refresh calls will not be

View File

@ -1,4 +1,4 @@
defmodule OAuth2TokenManager.TokenAgent do defmodule OAuth2TokenAgent.TokenAgent do
@moduledoc """ @moduledoc """
Defines the Agent used to manage the token and the struct it uses to store its state Defines the Agent used to manage the token and the struct it uses to store its state
""" """
@ -7,7 +7,7 @@ defmodule OAuth2TokenManager.TokenAgent do
use TypedStruct use TypedStruct
alias __MODULE__ alias __MODULE__
alias OAuth2TokenManager.TokenRefreshStrategy alias OAuth2TokenAgent.TokenRefreshStrategy
alias OAuth2.{AccessToken, Client, Error, Response} alias OAuth2.{AccessToken, Client, Error, Response}
require Logger require Logger

View File

@ -1,4 +1,4 @@
defmodule OAuth2TokenManager.TokenRefreshStrategy do defmodule OAuth2TokenAgent.TokenRefreshStrategy do
@moduledoc """ @moduledoc """
Module defining a struct for representing strategies for refreshing tokens and Module defining a struct for representing strategies for refreshing tokens and
the functions for applying them the functions for applying them

View File

@ -1,15 +1,15 @@
defmodule OAuth2TokenManager.MixProject do defmodule OAuth2TokenAgent.MixProject do
use Mix.Project use Mix.Project
def project do def project do
[ [
app: :oauth2_token_manager, app: :oauth2_token_agent,
version: "0.1.0", version: "0.1.0",
elixir: "~> 1.15", elixir: "~> 1.15",
description: description(), description: description(),
package: package(), package: package(),
deps: deps(), deps: deps(),
source_url: "https://github.com/Brale-xyz/oauth2-token-manager" source_url: "https://github.com/Brale-xyz/oauth2-token-agent"
] ]
end end
@ -40,7 +40,7 @@ defmodule OAuth2TokenManager.MixProject do
defp package do defp package do
[ [
licenses: ["Apache-2.0"], licenses: ["Apache-2.0"],
links: %{"GitHub" => "https://github.com/Brale-xyz/oauth2-token-manager"} links: %{"GitHub" => "https://github.com/Brale-xyz/oauth2-token-agent"}
] ]
end end
end end

View File

@ -1,4 +1,4 @@
defmodule OAuth2TokenManager.TokenAgentTest do defmodule OAuth2TokenAgent.TokenAgentTest do
@moduledoc """ @moduledoc """
Tests for TokenAgent, which is used to track token state Tests for TokenAgent, which is used to track token state
""" """
@ -7,7 +7,7 @@ defmodule OAuth2TokenManager.TokenAgentTest do
import Mock import Mock
alias OAuth2.{AccessToken, Client} alias OAuth2.{AccessToken, Client}
alias OAuth2TokenManager.{TokenAgent, TokenRefreshStrategy} alias OAuth2TokenAgent.{TokenAgent, TokenRefreshStrategy}
defp test_client do defp test_client do
Client.new( Client.new(

View File

@ -1,11 +1,11 @@
defmodule OAuth2TokenManager.TokenRefreshStrategyTest do defmodule OAuth2TokenAgent.TokenRefreshStrategyTest do
@moduledoc """ @moduledoc """
Tests the refresh strategies configured with TokenRefreshStrategy Tests the refresh strategies configured with TokenRefreshStrategy
""" """
use ExUnit.Case use ExUnit.Case
alias OAuth2TokenManager.TokenRefreshStrategy alias OAuth2TokenAgent.TokenRefreshStrategy
defp seconds_from_now(seconds) do defp seconds_from_now(seconds) do
DateTime.utc_now() |> DateTime.add(seconds, :second, Calendar.UTCOnlyTimeZoneDatabase) DateTime.utc_now() |> DateTime.add(seconds, :second, Calendar.UTCOnlyTimeZoneDatabase)