Current section
Files
Jump to
Current section
Files
lib/appwrite/consts/o-auth_provider.ex
defmodule Appwrite.Consts.OAuthProvider do
@moduledoc """
Provides constants and validation functions for OAuth providers.
This module defines various OAuth providers such as `Amazon`, `Apple`, `GitHub`, `Google`, and more.
Helper functions are included to validate these provider values, ensuring only recognized OAuth providers are used.
"""
@amazon "amazon"
@apple "apple"
@auth0 "auth0"
@authentik "authentik"
@autodesk "autodesk"
@bitbucket "bitbucket"
@bitly "bitly"
@box "box"
@dailymotion "dailymotion"
@discord "discord"
@disqus "disqus"
@dropbox "dropbox"
@etsy "etsy"
@facebook "facebook"
@github "github"
@gitlab "gitlab"
@google "google"
@linkedin "linkedin"
@microsoft "microsoft"
@notion "notion"
@oidc "oidc"
@okta "okta"
@paypal "paypal"
@paypal_sandbox "paypalSandbox"
@podio "podio"
@salesforce "salesforce"
@slack "slack"
@spotify "spotify"
@stripe "stripe"
@tradeshift "tradeshift"
@tradeshift_box "tradeshiftBox"
@twitch "twitch"
@wordpress "wordpress"
@yahoo "yahoo"
@yammer "yammer"
@yandex "yandex"
@zoho "zoho"
@zoom "zoom"
@mock "mock"
@all_providers [
@amazon,
@apple,
@auth0,
@authentik,
@autodesk,
@bitbucket,
@bitly,
@box,
@dailymotion,
@discord,
@disqus,
@dropbox,
@etsy,
@facebook,
@github,
@gitlab,
@google,
@linkedin,
@microsoft,
@notion,
@oidc,
@okta,
@paypal,
@paypal_sandbox,
@podio,
@salesforce,
@slack,
@spotify,
@stripe,
@tradeshift,
@tradeshift_box,
@twitch,
@wordpress,
@yahoo,
@yammer,
@yandex,
@zoho,
@zoom,
@mock
]
@doc """
Guard clause to check if a given `provider` is a valid image gravity code.
## Examples
iex> OAuthProvider.valid_provider("google")
true
iex> OAuthProvider.valid_provider("xxx")
false
"""
@spec valid_provider(String.t()) :: boolean()
defguard valid_provider(provider) when provider in @all_providers
@doc """
Returns true if the given `provider` is a valid OAuth provider.
## Examples
iex> OAuthProvider.is_valid_provider?("google")
true
iex> OAuthProvider.is_valid_provider?("example")
false
"""
@spec is_valid_provider?(String.t()) :: boolean()
def is_valid_provider?(provider), do: provider in @all_providers
@doc """
Validates the given `provider` and returns `{:ok, provider}` if it is valid,
or `{:error, "Invalid OAuth provider"}` otherwise.
## Examples
iex> OAuthProvider.validate_provider("github")
{:ok, "github"}
iex> OAuthProvider.validate_provider("example")
{:error, "Invalid OAuth provider"}
"""
@spec valid_provider(String.t()) :: {:ok, String.t()} | {:error, String.t()}
def validate_provider(provider) when provider in @all_providers, do: {:ok, provider}
def validate_provider(_provider), do: {:error, "Invalid OAuth provider"}
@doc """
Returns the given `provider` if it is valid. Raises an `ArgumentError`
if the `provider` is invalid.
## Examples
iex> OAuthProvider.validate_provider!("google")
"google"
iex> OAuthProvider.validate_provider!("example")
** (ArgumentError) Invalid OAuth provider: "example"
"""
@spec validate_provider!(String.t()) :: String.t()
def validate_provider!(provider) do
if provider in @all_providers do
provider
else
raise ArgumentError, "Invalid OAuth provider: #{inspect(provider)}"
end
end
end