mirror of
https://github.com/edgurgel/httparrot
synced 2025-04-17 12:04:16 -04:00
31 lines
909 B
Elixir
31 lines
909 B
Elixir
defmodule HTTParrot.DeleteCookiesHandler do
|
|
@moduledoc """
|
|
Deletes one or more simple cookies.
|
|
"""
|
|
use HTTParrot.Cowboy, methods: ~w(GET HEAD OPTIONS)
|
|
|
|
def malformed_request(req, state) do
|
|
qs_vals = :cowboy_req.parse_qs(req)
|
|
if Enum.empty?(qs_vals), do: {true, req, state}, else: {false, req, qs_vals}
|
|
end
|
|
|
|
def content_types_provided(req, state) do
|
|
{[{{"application", "json", []}, :get_json}], req, state}
|
|
end
|
|
|
|
def get_json(req, qs_vals) do
|
|
req =
|
|
Enum.reduce(qs_vals, req, fn {name, value}, req ->
|
|
delete_cookie(name, value, req)
|
|
end)
|
|
|
|
req = :cowboy_req.reply(302, %{"location" => "/cookies"}, "Redirecting...", req)
|
|
{:stop, req, qs_vals}
|
|
end
|
|
|
|
defp delete_cookie(name, true, req), do: delete_cookie(name, "", req)
|
|
|
|
defp delete_cookie(name, value, req) do
|
|
:cowboy_req.set_resp_cookie(name, value, req, %{path: "/", max_age: 0})
|
|
end
|
|
end
|