kiola / lib /srh /http /request_validator.ex
Scott Hiett
Improve handling for multi exec commands when unable to connect to the Redis server
1b2415c
defmodule Srh.Http.RequestValidator do
def validate_redis_body(%{"_json" => command_array}) when is_list(command_array),
do: {:ok, command_array}
def validate_redis_body(_),
do:
{:error,
"Invalid command array. Expected a string array at root of the command and its arguments."}
def validate_pipeline_redis_body(%{"_json" => array_of_command_arrays})
when is_list(array_of_command_arrays) do
do_validate_pipeline_redis_body(array_of_command_arrays, array_of_command_arrays)
end
# any amount of items left
defp do_validate_pipeline_redis_body([first_item | rest], original) do
case do_validate_pipeline_item(first_item) do
:ok -> do_validate_pipeline_redis_body(rest, original)
:error -> {:error, "Invalid command array. Expected an array of string arrays at root."}
end
end
defp do_validate_pipeline_redis_body([], original), do: {:ok, original}
defp do_validate_pipeline_item(item) when is_list(item), do: :ok
defp do_validate_pipeline_item(_), do: :error
def validate_encoding_header(header_value_array) when is_list(header_value_array) do
do_validate_encoding_header(header_value_array)
end
# This has been broken up like this to future-proof different encoding modes in the future
defp do_validate_encoding_header([first_item | rest]) do
case first_item do
"base64" -> {:ok, true}
_ -> do_validate_encoding_header(rest)
end
end
defp do_validate_encoding_header([]), do: {:error, :not_found}
def validate_bearer_header(header_value_array) when is_list(header_value_array) do
do_validate_bearer_header(header_value_array)
end
# any amount of items left
defp do_validate_bearer_header([first_item | rest]) do
case first_item
|> String.split(" ") do
["Bearer", token] ->
{:ok, token}
_ ->
do_validate_bearer_header(rest)
end
end
# no items left
defp do_validate_bearer_header([]), do: {:error, :not_found}
end