Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Microsoft.OpenApi/Services/OpenApiVisitorBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public abstract class OpenApiVisitorBase
public CurrentKeys CurrentKeys { get; } = new();

/// <summary>
/// Allow Rule to indicate validation error occured at a deeper context level.
/// Allow Rule to indicate validation error occurred at a deeper context level.
/// </summary>
/// <param name="segment">Identifier for context</param>
public virtual void Enter(string segment)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.

using System;

namespace Microsoft.OpenApi
{
/// <summary>
Expand All @@ -18,14 +16,13 @@ public static class OpenApiContactRules
new(nameof(EmailMustBeEmailFormat),
(context, item) =>
{
context.Enter("email");
if (item is {Email: not null} && !item.Email.IsEmailAddress())
{
context.Enter("email");
context.CreateError(nameof(EmailMustBeEmailFormat),
String.Format(SRResource.Validation_StringMustBeEmailAddress, item.Email));
string.Format(SRResource.Validation_StringMustBeEmailAddress, item.Email));
context.Exit();
}
context.Exit();
});

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ public static class OpenApiDocumentRules
(context, item) =>
{
// info
context.Enter("info");
if (item.Info == null)
{
context.Enter("info");
context.CreateError(nameof(OpenApiDocumentFieldIsMissing),
string.Format(SRResource.Validation_FieldIsRequired, "info", "document"));
context.Exit();
}
context.Exit();
});

/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,16 @@ public static class OpenApiExtensibleRules
new(nameof(ExtensionNameMustStartWithXDash),
(context, item) =>
{
context.Enter("extensions");
if (item.Extensions is not null)
{
context.Enter("extensions");
foreach (var extensible in item.Extensions.Keys.Where(static x => !x.StartsWith(OpenApiConstants.ExtensionFieldNamePrefix, StringComparison.OrdinalIgnoreCase)))
{
context.CreateError(nameof(ExtensionNameMustStartWithXDash),
string.Format(SRResource.Validation_ExtensionNameMustBeginWithXDash, extensible, context.PathString));
}
}
context.Exit();
}
context.Exit();
});
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.

using System;

namespace Microsoft.OpenApi
{
/// <summary>
Expand All @@ -19,15 +17,13 @@ public static class OpenApiExternalDocsRules
(context, item) =>
{
// url
context.Enter("url");
if (item.Url == null)
{
context.Enter("url");
context.CreateError(nameof(UrlIsRequired),
String.Format(SRResource.Validation_FieldIsRequired, "url", "External Documentation"));
string.Format(SRResource.Validation_FieldIsRequired, "url", "External Documentation"));
context.Exit();
}
context.Exit();
});

// add more rule.
}
}
17 changes: 6 additions & 11 deletions src/Microsoft.OpenApi/Validations/Rules/OpenApiInfoRules.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.

using System;

namespace Microsoft.OpenApi
{
/// <summary>
Expand All @@ -19,25 +17,22 @@ public static class OpenApiInfoRules
(context, item) =>
{
// title
context.Enter("title");
if (item.Title == null)
{
context.Enter("title");
context.CreateError(nameof(InfoRequiredFields),
String.Format(SRResource.Validation_FieldIsRequired, "title", "info"));
string.Format(SRResource.Validation_FieldIsRequired, "title", "info"));
context.Exit();
}
context.Exit();

// version
context.Enter("version");
if (item.Version == null)
{
context.Enter("version");
context.CreateError(nameof(InfoRequiredFields),
String.Format(SRResource.Validation_FieldIsRequired, "version", "info"));
string.Format(SRResource.Validation_FieldIsRequired, "version", "info"));
context.Exit();
}
context.Exit();

});

// add more rule.
}
}
10 changes: 3 additions & 7 deletions src/Microsoft.OpenApi/Validations/Rules/OpenApiLicenseRules.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.

using System;

namespace Microsoft.OpenApi
{
/// <summary>
Expand All @@ -18,15 +16,13 @@ public static class OpenApiLicenseRules
new(nameof(LicenseRequiredFields),
(context, license) =>
{
context.Enter("name");
if (license.Name == null)
{
context.Enter("name");
context.CreateError(nameof(LicenseRequiredFields),
String.Format(SRResource.Validation_FieldIsRequired, "name", "license"));
string.Format(SRResource.Validation_FieldIsRequired, "name", "license"));
context.Exit();
}
context.Exit();
});

// add more rules
}
}
32 changes: 11 additions & 21 deletions src/Microsoft.OpenApi/Validations/Rules/OpenApiNonDefaultRules.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public static class OpenApiNonDefaultRules
/// Validate the data matches with the given data type.
/// </summary>
public static ValidationRule<OpenApiParameter> ParameterMismatchedDataType =>
new(nameof(ParameterMismatchedDataType),
new(nameof(ParameterMismatchedDataType),
(context, parameter) =>
{
ValidateMismatchedDataType(context, nameof(ParameterMismatchedDataType), parameter.Example, parameter.Examples, parameter.Schema);
Expand All @@ -50,39 +50,33 @@ public static class OpenApiNonDefaultRules
(context, schema) =>
{
// default
context.Enter("default");

if (schema.Default != null)
{
context.Enter("default");
RuleHelpers.ValidateDataTypeMismatch(context, nameof(SchemaMismatchedDataType), schema.Default, schema);
context.Exit();
}

context.Exit();

// example
context.Enter("example");

if (schema.Example != null)
{
context.Enter("example");
RuleHelpers.ValidateDataTypeMismatch(context, nameof(SchemaMismatchedDataType), schema.Example, schema);
context.Exit();
}

context.Exit();

// enum
context.Enter("enum");

if (schema.Enum != null)
{
context.Enter("enum");
for (var i = 0; i < schema.Enum.Count; i++)
{
context.Enter(i.ToString());
RuleHelpers.ValidateDataTypeMismatch(context, nameof(SchemaMismatchedDataType), schema.Enum[i], schema);
context.Exit();
}
context.Exit();
}

context.Exit();
});

private static void ValidateMismatchedDataType(IValidationContext context,
Expand All @@ -92,20 +86,17 @@ private static void ValidateMismatchedDataType(IValidationContext context,
IOpenApiSchema? schema)
{
// example
context.Enter("example");

if (example != null)
{
context.Enter("example");
RuleHelpers.ValidateDataTypeMismatch(context, ruleName, example, schema);
context.Exit();
}

context.Exit();

// enum
context.Enter("examples");

if (examples != null)
{
context.Enter("examples");
foreach (var key in examples.Keys.Where(k => examples[k] != null))
{
context.Enter(key);
Expand All @@ -114,9 +105,8 @@ private static void ValidateMismatchedDataType(IValidationContext context,
context.Exit();
context.Exit();
}
context.Exit();
}

context.Exit();
}
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.

using System;

namespace Microsoft.OpenApi
{
/// <summary>
Expand All @@ -19,33 +17,31 @@ public static class OpenApiOAuthFlowRules
(context, flow) =>
{
// authorizationUrl
context.Enter("authorizationUrl");
if (flow.AuthorizationUrl == null)
{
context.Enter("authorizationUrl");
context.CreateError(nameof(OAuthFlowRequiredFields),
String.Format(SRResource.Validation_FieldIsRequired, "authorizationUrl", "OAuth Flow"));
string.Format(SRResource.Validation_FieldIsRequired, "authorizationUrl", "OAuth Flow"));
context.Exit();
}
context.Exit();

// tokenUrl
context.Enter("tokenUrl");
if (flow.TokenUrl == null)
{
context.Enter("tokenUrl");
context.CreateError(nameof(OAuthFlowRequiredFields),
String.Format(SRResource.Validation_FieldIsRequired, "tokenUrl", "OAuth Flow"));
string.Format(SRResource.Validation_FieldIsRequired, "tokenUrl", "OAuth Flow"));
context.Exit();
}
context.Exit();

// scopes
context.Enter("scopes");
if (flow.Scopes == null)
{
context.Enter("scopes");
context.CreateError(nameof(OAuthFlowRequiredFields),
String.Format(SRResource.Validation_FieldIsRequired, "scopes", "OAuth Flow"));
string.Format(SRResource.Validation_FieldIsRequired, "scopes", "OAuth Flow"));
context.Exit();
}
context.Exit();
});

// add more rule.
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.

using System;

namespace Microsoft.OpenApi
{
/// <summary>
Expand All @@ -19,22 +17,22 @@ public static class OpenApiParameterRules
(context, item) =>
{
// name
context.Enter("name");
if (item.Name == null)
{
context.Enter("name");
context.CreateError(nameof(ParameterRequiredFields),
String.Format(SRResource.Validation_FieldIsRequired, "name", "parameter"));
string.Format(SRResource.Validation_FieldIsRequired, "name", "parameter"));
context.Exit();
}
context.Exit();

// in
context.Enter("in");
if (item.In == null)
{
context.Enter("in");
context.CreateError(nameof(ParameterRequiredFields),
String.Format(SRResource.Validation_FieldIsRequired, "in", "parameter"));
string.Format(SRResource.Validation_FieldIsRequired, "in", "parameter"));
context.Exit();
}
context.Exit();
});

/// <summary>
Expand All @@ -45,15 +43,14 @@ public static class OpenApiParameterRules
(context, item) =>
{
// required
context.Enter("required");
if (item.In == ParameterLocation.Path && !item.Required)
{
context.Enter("required");
context.CreateError(
nameof(RequiredMustBeTrueWhenInIsPath),
"\"required\" must be true when parameter location is \"path\"");
context.Exit();
}

context.Exit();
});

/// <summary>
Expand Down
Loading
Loading