1
0
Fork 0
mirror of https://github.com/edgurgel/httparrot synced 2025-04-17 12:04:16 -04:00
httparrot/lib/httparrot/base64_handler.ex
2019-06-30 14:44:33 +12:00

35 lines
760 B
Elixir

defmodule HTTParrot.Base64Handler do
@moduledoc """
Returns urlsafe base64 decoded data.
"""
use HTTParrot.Cowboy, methods: ~w(GET HEAD OPTIONS)
def content_types_provided(req, state) do
{[{{"application", "octet-stream", []}, :get_binary}], req, state}
end
def malformed_request(req, state) do
value = :cowboy_req.binding(:value, req)
case decode(value) do
{:ok, result} -> {false, req, result}
:error -> {true, req, state}
end
end
defp decode(value) do
pad(value) |> Base.url_decode64()
end
defp pad(value) do
case byte_size(value) |> rem(4) do
2 -> value <> "=="
3 -> value <> "="
_ -> value
end
end
def get_binary(req, result) do
{result, req, result}
end
end