Repository navigation
Expand file tree
/
Copy pathOpenApiComponentsRules.cs
More file actions
65 lines (52 loc) · 2.3 KB
/
Copy pathOpenApiComponentsRules.cs
File metadata and controls
65 lines (52 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace Microsoft.OpenApi
{
/// <summary>
/// The validation rules for <see cref="OpenApiComponents"/>.
/// </summary>
[OpenApiRule]
public static class OpenApiComponentsRules
{
/// <summary>
/// The key regex.
/// </summary>
internal static readonly Regex KeyRegex = new(@"^[a-zA-Z0-9\.\-_]+$", RegexOptions.None, TimeSpan.FromMilliseconds(100));
/// <summary>
/// All the fixed fields declared above are objects
/// that MUST use keys that match the regular expression: ^[a-zA-Z0-9\.\-_]+$.
/// </summary>
public static ValidationRule<OpenApiComponents> KeyMustBeRegularExpression =>
new(nameof(KeyMustBeRegularExpression),
(context, components) =>
{
ValidateKeys(context, components.Schemas?.Keys, "schemas");
ValidateKeys(context, components.Responses?.Keys, "responses");
ValidateKeys(context, components.Parameters?.Keys, "parameters");
ValidateKeys(context, components.Examples?.Keys, "examples");
ValidateKeys(context, components.RequestBodies?.Keys, "requestBodies");
ValidateKeys(context, components.Headers?.Keys, "headers");
ValidateKeys(context, components.SecuritySchemes?.Keys, "securitySchemes");
ValidateKeys(context, components.Links?.Keys, "links");
ValidateKeys(context, components.Callbacks?.Keys, "callbacks");
});
private static void ValidateKeys(IValidationContext context, IEnumerable<string>? keys, string component)
{
if (keys == null)
{
return;
}
foreach (var key in keys)
{
if (!KeyRegex.IsMatch(key))
{
context.CreateError(nameof(KeyMustBeRegularExpression),
string.Format(SRResource.Validation_ComponentsKeyMustMatchRegularExpr, key, component, KeyRegex.ToString()));
}
}
}
}
}