# ExTurnstile
[](https://hex.pm/packages/ex_turnstile)
[](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