Current section

Files

Jump to
okta_api lib okta idps identity_provider.ex
Raw

lib/okta/idps/identity_provider.ex

defmodule Okta.IdPs.IdentityProvider do
@moduledoc """
The `Okta.IdPs.IdentityProvider` represents an Okta IDP for both creation and retrieval
"""
import Okta.Utils
alias Okta.IdPs.{Policy, Protocol}
defstruct [
:_links,
:created,
:id,
:issuerMode,
:lastUpdated,
:status,
:type,
:name,
:protocol,
:policy
]
@type t :: %__MODULE__{}
@doc """
Returns a default Google IdP with the given name, client_id and client_secret.
This IDP will be without auto provisioning. To get an auto provisioning Google Idp to a group you can do
```
Okta.IdPs.IdentityProvider.google(name, client_id, client_secret)
|> Okta.Utils.merge_struct(%Okta.IdPs.IdentityProvider{policy: Okta.IdPs.Policy.auto_provision_to_groups_policy([group_id])})
https://developer.okta.com/docs/reference/api/users/#get-user
"""
@spec google(String.t(), String.t(), String.t()) :: t()
def google(name, client_id, client_secret) do
protocol = %Protocol{
credentials: %{
"client" => %{
"client_id" => client_id,
"client_secret" => client_secret
}
},
endpoints: %{
"authorization" => %{
"binding" => "HTTP-REDIRECT",
"url" => "https://accounts.google.com/o/oauth2/auth"
},
"token" => %{
"binding" => "HTTP-POST",
"url" => "https://www.googleapis.com/oauth2/v3/token"
}
},
scopes: ["email", "openid", "profile"],
type: "OIDC"
}
policy =
%Policy{
accountLink: %{action: "AUTO", filter: nil},
maxClockSkew: 0,
subject: %{
"filter" => nil,
"matchAttribute" => "",
"matchType" => "USERNAME",
"userNameTemplate" => %{"template" => "idpuser.email"}
}
}
|> merge_struct(Policy.no_auto_provision_policy())
%__MODULE__{name: name, type: "GOOGLE", policy: policy, protocol: protocol}
end
end