Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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