README.md

# ExTurnstile

[![Hex.pm](https://img.shields.io/hexpm/v/ex_turnstile.svg)](https://hex.pm/packages/ex_turnstile)
[![Docs](https://img.shields.io/badge/docs-hexdocs-blue.svg)](https://hexdocs.pm/ex_turnstile)

Cloudflare Turnstile server-side token verification for Elixir.

> Built by [Shiko](https://shiko.vet) — tech@shiko.vet

## Installation

```elixir
{:ex_turnstile, "~> 0.1"}
```

## Configuration

```elixir
config :ex_turnstile, secret_key: System.get_env("TURNSTILE_SECRET_KEY")
```

## Usage

```elixir
case ExTurnstile.verify(token) do
  :ok -> # Valid, proceed
  {:error, reason} -> # Invalid token
end

# With client IP (recommended)
ExTurnstile.verify(token, remote_ip: "1.2.3.4")
```

## Phoenix Example

```elixir
def create(conn, %{"turnstile_token" => token} = params) do
  ip = to_string(:inet.ntoa(conn.remote_ip))

  case ExTurnstile.verify(token, remote_ip: ip) do
    :ok -> do_create(conn, params)
    {:error, reason} -> conn |> put_status(403) |> json(%{error: reason})
  end
end
```

## Links

- [Cloudflare Turnstile Docs](https://developers.cloudflare.com/turnstile/)
- [shiko.vet](https://shiko.vet)

## License

MIT