From ccd51e1654dcf9c4f61f1221be9cc479e9730c09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonatan=20M=C3=A4nnchen?= Date: Mon, 26 Sep 2022 20:02:27 +0200 Subject: [PATCH] Fix readOnly Validation --- lib/open_api_spex/cast.ex | 15 +++++++++++++-- lib/open_api_spex/plug/cast_and_validate.ex | 8 +++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/open_api_spex/cast.ex b/lib/open_api_spex/cast.ex index 81b55643..f35d3b47 100644 --- a/lib/open_api_spex/cast.ex +++ b/lib/open_api_spex/cast.ex @@ -100,10 +100,21 @@ defmodule OpenApiSpex.Cast do """ - @spec cast(schema_or_reference | nil, term(), map(), [cast_opt()]) :: + @spec cast(schema_or_reference | nil, term(), map(), [ + cast_opt() | {:read_write_scope, read_write_scope()} + ]) :: {:ok, term()} | {:error, [Error.t()]} def cast(schema, value, schemas \\ %{}, opts \\ []) do - ctx = %__MODULE__{schema: schema, value: value, schemas: schemas, opts: opts} + {read_write_scope, opts} = Keyword.pop(opts, :read_write_scope, nil) + + ctx = %__MODULE__{ + schema: schema, + value: value, + schemas: schemas, + opts: opts, + read_write_scope: read_write_scope + } + cast(ctx) end diff --git a/lib/open_api_spex/plug/cast_and_validate.ex b/lib/open_api_spex/plug/cast_and_validate.ex index e8af40fc..ce7fa94d 100644 --- a/lib/open_api_spex/plug/cast_and_validate.ex +++ b/lib/open_api_spex/plug/cast_and_validate.ex @@ -79,7 +79,13 @@ defmodule OpenApiSpex.Plug.CastAndValidate do cast_opts = opts |> Map.take([:replace_params]) |> Map.to_list() - case OpenApiSpex.cast_and_validate(spec, operation, conn, nil, cast_opts) do + case OpenApiSpex.cast_and_validate( + spec, + operation, + conn, + nil, + cast_opts ++ [read_write_scope: :write] + ) do {:ok, conn} -> conn