Current section

Files

Jump to
oidcc lib oidcc authorization.ex
Raw

lib/oidcc/authorization.ex

# SPDX-FileCopyrightText: 2023 Erlang Ecosystem Foundation
# SPDX-License-Identifier: Apache-2.0
defmodule Oidcc.Authorization do
use TelemetryRegistry
telemetry_event(%{
event: [:oidcc, :par_request, :start],
description: "Emitted at the start of executing a PAR request",
measurements: "%{system_time: non_neg_integer(), monotonic_time: integer()}",
metadata: "%{issuer: :uri_string.uri_string(), client_id: String.t()}"
})
telemetry_event(%{
event: [:oidcc, :par_request, :stop],
description: "Emitted at the end of executing a PAR request",
measurements: "%{duration: integer(), monotonic_time: integer()}",
metadata: "%{issuer: :uri_string.uri_string(), client_id: String.t()}"
})
telemetry_event(%{
event: [:oidcc, :par_request, :exception],
description: "Emitted at the end of executing a PAR request",
measurements: "%{duration: integer(), monotonic_time: integer()}",
metadata: "%{issuer: :uri_string.uri_string(), client_id: String.t()}"
})
@moduledoc """
Functions to start an OpenID Connect Authorization
## Telemetry
#{telemetry_docs()}
"""
@moduledoc since: "3.0.0"
alias Oidcc.ClientContext
@doc """
Create Auth Redirect URL
For a high level interface using `Oidcc.ProviderConfiguration.Worker`
see `Oidcc.create_redirect_url/4`.
## Examples
iex> {:ok, pid} =
...> Oidcc.ProviderConfiguration.Worker.start_link(%{
...> issuer: "https://accounts.google.com"
...> })
...>
...> {:ok, client_context} =
...> Oidcc.ClientContext.from_configuration_worker(
...> pid,
...> "client_id",
...> "client_secret"
...> )
...>
...> {:ok, _redirect_uri} =
...> Oidcc.Authorization.create_redirect_url(
...> client_context,
...> %{redirect_uri: "https://my.server/return"}
...> )
"""
@doc since: "3.0.0"
@spec create_redirect_url(
client_context :: ClientContext.t(),
opts :: :oidcc_authorization.opts()
) :: {:ok, :uri_string.uri_string()} | {:error, :oidcc_authorization.error()}
def create_redirect_url(client_context, opts),
do:
client_context
|> ClientContext.struct_to_record()
|> :oidcc_authorization.create_redirect_url(opts)
end