Packages
absinthe
1.7.7
1.11.0
1.10.2
1.10.1
1.10.0
1.9.1
1.9.0
1.8.0
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.8
1.6.7
retired
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.6.0-rc.1
1.6.0-rc.0
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.5.0-rc.5
1.5.0-rc.4
1.5.0-rc.3
1.5.0-rc.2
1.5.0-rc.1
1.5.0-rc.0
1.5.0-beta.2
1.5.0-beta.1
1.5.0-beta.0
1.5.0-alpha.4
1.5.0-alpha.3
1.5.0-alpha.2
1.5.0-alpha.1
1.5.0-alpha.0
1.4.16
1.4.15
1.4.14
1.4.13
1.4.12
1.4.11
1.4.10
1.4.9
1.4.8
retired
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.4.0-rc.3
1.4.0-rc.2
1.4.0-rc.1
1.4.0-rc.0
1.4.0-beta.5
1.4.0-beta.4
1.4.0-beta.3
1.4.0-beta.2
1.4.0-beta.1
1.3.2
1.3.1
1.3.0
1.3.0-rc.0
1.3.0-beta.2
1.3.0-beta.1
1.3.0-beta.0
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.2.0-rc.0
1.2.0-beta.0
1.2.0-alpha0
1.2.0-alpha.2
1.2.0-alpha.1
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.0
0.5.2
0.5.1
0.5.0
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.2.3
0.2.2
0.2.1
0.1.0
GraphQL for Elixir
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
lib/absinthe/phase/schema/validation/names_must_be_valid.ex
defmodule Absinthe.Phase.Schema.Validation.NamesMustBeValid do
@moduledoc false
use Absinthe.Phase
alias Absinthe.Blueprint
@valid_name_regex ~r/^[_A-Za-z][_0-9A-Za-z]*$/
def run(bp, _) do
bp = Blueprint.prewalk(bp, &validate_names/1)
{:ok, bp}
end
defp validate_names(%{name: nil} = entity) do
entity
end
defp validate_names(%struct{name: name} = entity) do
if valid_name?(name) do
entity
else
kind = Absinthe.Blueprint.Schema.struct_to_kind(struct)
detail = %{artifact: "#{kind} name", value: entity.name}
entity |> put_error(error(entity, detail))
end
end
defp validate_names(entity) do
entity
end
defp valid_name?(name) do
Regex.match?(@valid_name_regex, name)
end
defp error(object, data) do
%Absinthe.Phase.Error{
message: explanation(data),
locations: [object.__reference__.location],
phase: __MODULE__,
extra: data
}
end
@description """
Name does not match possible #{inspect(@valid_name_regex)} regex.
> Names in GraphQL are limited to this ASCII subset of possible characters to
> support interoperation with as many other systems as possible.
Reference: https://graphql.github.io/graphql-spec/June2018/#sec-Names
"""
def explanation(%{artifact: artifact, value: value}) do
artifact_name = String.capitalize(artifact)
"""
#{artifact_name} #{inspect(value)} has invalid characters.
#{@description}
"""
end
end