Comprehensive input validation for the Tango OAuth library.
This module provides validation functions for all user inputs to prevent security vulnerabilities and ensure data integrity.
Summary
Functions
Validates authorization code format.
Sanitizes and validates metadata map for storage.
Validates complete OAuth options map for security.
Validates OAuth provider configuration URLs.
Validates redirect URI when present, allows nil for session creation.
Validates provider slug format.
Validates redirect URI for security.
Validates OAuth scopes list.
Validates session token format.
Validates OAuth state parameter.
Validates tenant ID format and security.
Functions
Validates authorization code format.
Examples
iex> Tango.Validation.validate_authorization_code("valid-auth-code-123")
:ok
iex> Tango.Validation.validate_authorization_code("")
{:error, :invalid_authorization_code}
Sanitizes and validates metadata map for storage.
Examples
iex> Tango.Validation.validate_metadata(%{"key" => "value"})
{:ok, %{"key" => "value"}}
iex> Tango.Validation.validate_metadata(%{sensitive_data: "secret"})
{:ok, %{}}
Validates complete OAuth options map for security.
Examples
iex> opts = [redirect_uri: "https://app.com/callback", scopes: ["read"]]
iex> Tango.Validation.validate_oauth_options(opts)
{:ok, [redirect_uri: "https://app.com/callback", scopes: ["read"]]}
Validates OAuth provider configuration URLs.
Examples
iex> Tango.Validation.validate_oauth_url("https://github.com/login/oauth/authorize")
:ok
iex> Tango.Validation.validate_oauth_url("javascript:alert('xss')")
{:error, :unsafe_oauth_url}
Validates redirect URI when present, allows nil for session creation.
Validates provider slug format.
Examples
iex> Tango.Validation.validate_provider_slug("github")
:ok
iex> Tango.Validation.validate_provider_slug("invalid slug")
{:error, :invalid_provider_slug}
Validates redirect URI for security.
Examples
iex> Tango.Validation.validate_redirect_uri("https://app.com/callback")
:ok
iex> Tango.Validation.validate_redirect_uri("javascript:alert('xss')")
{:error, :unsafe_redirect_uri}
Validates OAuth scopes list.
Examples
iex> Tango.Validation.validate_scopes(["read", "write"])
:ok
iex> Tango.Validation.validate_scopes(["invalid scope with spaces"])
{:error, :invalid_scopes}
Validates session token format.
Examples
iex> valid_token = :crypto.strong_rand_bytes(32) |> Base.url_encode64(padding: false)
iex> Tango.Validation.validate_session_token(valid_token)
:ok
Validates OAuth state parameter.
Examples
iex> valid_state = :crypto.strong_rand_bytes(32) |> Base.url_encode64(padding: false)
iex> Tango.Validation.validate_state(valid_state)
:ok
iex> Tango.Validation.validate_state("short")
{:error, :invalid_state}
Validates tenant ID format and security.
Examples
iex> Tango.Validation.validate_tenant_id("tenant-123")
:ok
iex> Tango.Validation.validate_tenant_id("")
{:error, :invalid_tenant_id}
iex> Tango.Validation.validate_tenant_id("tenant'; DROP TABLE users; --")
{:error, :invalid_tenant_id}