zf

zenflows testing
git clone https://s.sonu.ch/~srfsh/zf.git
Log | Files | Refs | Submodules | README | LICENSE

commit e1dcd39c615dfdbde284f1ebf9d7b0e5a195a913
parent 8cb65841e6e2143ce9669cce80ee48b62adce613
Author: srfsh <dev@srf.sh>
Date:   Tue,  2 Aug 2022 15:55:51 +0300

Zenflows.GQL.Type: add base64 type

This allows us to validate input

Diffstat:
Msrc/zenflows/gql/type.ex | 16++++++++++++++++
1 file changed, 16 insertions(+), 0 deletions(-)

diff --git a/src/zenflows/gql/type.ex b/src/zenflows/gql/type.ex @@ -29,6 +29,12 @@ scalar :uri, name: "URI" do serialize & &1 end +@desc "A base64-encoded (requires padding and ignores whitespace) as String." +scalar :base64, name: "Base64" do + parse &base64_parse/1 + serialize & &1 +end + # TODO: Decide whether we really want these to be valid URIs or just # Strings. @spec uri_parse(Input.t()) :: {:ok, String.t() | nil} | :error @@ -36,6 +42,16 @@ defp uri_parse(%Input.String{value: v}), do: {:ok, v} defp uri_parse(%Input.Null{}), do: {:ok, nil} defp uri_parse(_), do: :error +@spec base64_parse(Input.t()) :: {:ok, String.t() | nil} | :error +defp base64_parse(%Input.String{value: v}) do + case Base.decode64(v, ignore: :whitespace, padding: true) do + {:ok, _} -> {:ok, v} + :error -> :error + end +end +defp base64_parse(%Input.Null{}), do: {:ok, nil} +defp base64_parse(_), do: :error + @spec id_parse(Input.t()) :: {:ok, ID.t() | nil} | :error def id_parse(%Input.String{value: v}), do: ID.cast(v) def id_parse(%Input.Null{}), do: {:ok, nil}