# `Backplane.Oauth.Request`
[🔗](https://github.com/gsmlg-opt/backplane/blob/v1.10.77/apps/backplane_oauth/lib/backplane/oauth/request.ex#L2)

Build an oauth request struct from given input.

> __Note__: Input must have the shape or be a `%Plug.Conn{}` request.

# `authorize_request`

```elixir
@spec authorize_request(
  conn :: Plug.Conn.t() | %{body_params: map()},
  resource_owner :: struct()
) ::
  {:error,
   %Backplane.Oauth.Error{
     error: :invalid_request,
     error_description: String.t(),
     format: nil,
     redirect_uri: nil,
     state: term(),
     status: :bad_request
   }}
  | {:ok,
     oauth_request ::
       Backplane.Oauth.CodeRequest.t()
       | Backplane.Oauth.TokenRequest.t()
       | Backplane.Oauth.HybridRequest.t()}
```

Create request struct from an OAuth authorize request.

Note : resource owner must be provided as current_user assigns.

## Examples
    iex>authorize_request(
      %{
        query_params: %{
          "response_type" => "token",
          "client_id" => "client_id",
          "redirect_uri" => "redirect_uri"
        },
      },
      %User{...}
    )
    {:ok, %TokenRequest{...}}

# `introspect_request`

```elixir
@spec introspect_request(
  conn ::
    Plug.Conn.t() | %{optional(:req_headers) =&gt; list(), body_params: map()}
) ::
  {:error,
   %Backplane.Oauth.Error{
     error: :invalid_request,
     error_description: String.t(),
     format: nil,
     redirect_uri: nil,
     state: term(),
     status: :bad_request
   }}
  | {:ok, request :: Backplane.Oauth.IntrospectRequest.t()}
```

Create request struct from an OAuth introspect request.

## Examples
    iex>introspect_request(%{
      body_params: %{
        "token" => "token",
        "client_id" => "client_id",
        "client_secret" => "client_secret",
      }
    })
    {:ok, %IntrospectRequest{...}}

# `revoke_request`

```elixir
@spec revoke_request(
  conn ::
    Plug.Conn.t() | %{optional(:req_headers) =&gt; list(), body_params: map()}
) ::
  {:error,
   %Backplane.Oauth.Error{
     error: :invalid_request,
     error_description: String.t(),
     format: nil,
     redirect_uri: nil,
     state: term(),
     status: :bad_request
   }}
  | {:ok, request :: Backplane.Oauth.RevokeRequest.t()}
```

Create request struct from an OAuth revoke request.

## Examples
    iex>revoke_request(%{
      body_params: %{
        "token" => "token",
        "client_id" => "client_id",
        "client_secret" => "client_secret",
      }
    })
    {:ok, %RevokeRequest{...}}

# `token_request`

```elixir
@spec token_request(
  conn ::
    Plug.Conn.t() | %{optional(:req_headers) =&gt; list(), body_params: map()}
) ::
  {:error,
   %Backplane.Oauth.Error{
     error: :invalid_request,
     error_description: String.t(),
     format: nil,
     redirect_uri: nil,
     state: term(),
     status: :bad_request
   }}
  | {:ok,
     oauth_request ::
       Backplane.Oauth.AuthorizationCodeRequest.t()
       | Backplane.Oauth.ClientCredentialsRequest.t()
       | Backplane.Oauth.AuthorizationCodeRequest.t()
       | Backplane.Oauth.TokenRequest.t()
       | Backplane.Oauth.PasswordRequest.t()}
```

Create request struct from an OAuth token request.

## Examples
    iex>token_request(%{
      body_params: %{
        "grant_type" => "client_credentials",
        "client_id" => "client_id",
        "client_secret" => "client_secret"
      }
    })
    {:ok, %ClientCredentialsRequest{...}}

---

*Consult [api-reference.md](api-reference.md) for complete listing*
