in src/Core/Compiling/Policy/ValidateJwtCompiler.cs [108:199]
private static void HandleKeys(
ICompilationContext context,
XElement element,
IReadOnlyDictionary<string, InitializerValue> values,
string key,
string listName)
{
if (!values.TryGetValue(key, out var listInitializer))
{
return;
}
var listElement = new XElement(listName);
foreach (var initializer in listInitializer.UnnamedValues ?? [])
{
var keyValues = initializer.NamedValues;
if (keyValues is null)
{
continue;
}
var keyElement = new XElement("key");
keyElement.AddAttribute(keyValues, nameof(KeyConfig.Id), "id");
switch (initializer.Type)
{
case nameof(Base64KeyConfig):
if (!keyValues.TryGetValue(nameof(Base64KeyConfig.Value), out var value))
{
context.Report(Diagnostic.Create(
CompilationErrors.RequiredParameterNotDefined,
initializer.Node.GetLocation(),
"key",
nameof(Base64KeyConfig.Value)
));
continue;
}
keyElement.Value = value.Value!;
break;
case nameof(CertificateKeyConfig):
if (!keyElement.AddAttribute(keyValues, nameof(CertificateKeyConfig.CertificateId),
"certificate-id"))
{
context.Report(Diagnostic.Create(
CompilationErrors.RequiredParameterNotDefined,
initializer.Node.GetLocation(),
"key",
nameof(CertificateKeyConfig.CertificateId)
));
continue;
}
break;
case nameof(AsymmetricKeyConfig):
if (!keyElement.AddAttribute(keyValues, nameof(AsymmetricKeyConfig.Modulus), "n"))
{
context.Report(Diagnostic.Create(
CompilationErrors.RequiredParameterNotDefined,
initializer.Node.GetLocation(),
"key",
nameof(AsymmetricKeyConfig.Modulus)
));
continue;
}
if (!keyElement.AddAttribute(keyValues, nameof(AsymmetricKeyConfig.Exponent), "e"))
{
context.Report(Diagnostic.Create(
CompilationErrors.RequiredParameterNotDefined,
initializer.Node.GetLocation(),
"key",
nameof(AsymmetricKeyConfig.Exponent)
));
continue;
}
break;
default:
context.Report(Diagnostic.Create(
CompilationErrors.NotSupportedType,
initializer.Node.GetLocation(),
"key",
initializer.Type
));
continue;
}
listElement.Add(keyElement);
}
element.Add(listElement);
}