1- // Copyright (c) .NET Foundation. All rights reserved.
1+ // Copyright (c) .NET Foundation. All rights reserved.
22// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33
44using System ;
77using System . Globalization ;
88using System . IO ;
99using System . Linq ;
10+ using System . Net ;
1011using NuGet . Packaging ;
1112using NuGet . Versioning ;
1213
1314namespace NuGetGallery . Packaging
1415{
1516 public class ManifestValidator
1617 {
17- public static IEnumerable < ValidationResult > Validate ( Stream nuspecStream , out NuspecReader nuspecReader , out PackageMetadata packageMetadata )
18+ public static IEnumerable < ValidationResult > Validate ( Stream nuspecStream , bool asciiOnlyPackageIds , out NuspecReader nuspecReader , out PackageMetadata packageMetadata )
1819 {
1920 packageMetadata = null ;
2021
@@ -25,7 +26,7 @@ public static IEnumerable<ValidationResult> Validate(Stream nuspecStream, out Nu
2526 if ( rawMetadata != null && rawMetadata . Any ( ) )
2627 {
2728 packageMetadata = PackageMetadata . FromNuspecReader ( nuspecReader , strict : true ) ;
28- return ValidateCore ( packageMetadata ) ;
29+ return ValidateCore ( packageMetadata , asciiOnlyPackageIds ) ;
2930 }
3031 }
3132 catch ( Exception ex )
@@ -38,7 +39,7 @@ public static IEnumerable<ValidationResult> Validate(Stream nuspecStream, out Nu
3839 return Enumerable . Empty < ValidationResult > ( ) ;
3940 }
4041
41- private static IEnumerable < ValidationResult > ValidateCore ( PackageMetadata packageMetadata )
42+ private static IEnumerable < ValidationResult > ValidateCore ( PackageMetadata packageMetadata , bool asciiOnlyPackageIds )
4243 {
4344 // Validate the ID
4445 if ( string . IsNullOrEmpty ( packageMetadata . Id ) )
@@ -51,12 +52,21 @@ private static IEnumerable<ValidationResult> ValidateCore(PackageMetadata packag
5152 {
5253 yield return new ValidationResult ( CoreStrings . Manifest_IdTooLong ) ;
5354 }
54- else if ( ! PackageIdValidator . IsValidPackageId ( packageMetadata . Id ) )
55+ else
5556 {
56- yield return new ValidationResult ( String . Format (
57- CultureInfo . CurrentCulture ,
58- CoreStrings . Manifest_InvalidId ,
59- packageMetadata . Id ) ) ;
57+ if ( ! PackageIdValidator . IsValidPackageId ( packageMetadata . Id ) )
58+ {
59+ yield return new ValidationResult ( string . Format (
60+ CultureInfo . CurrentCulture ,
61+ CoreStrings . Manifest_InvalidId ,
62+ packageMetadata . Id ) ) ;
63+ } else if ( asciiOnlyPackageIds && ! PackageIdValidator . IsAsciiOnlyPackageId ( packageMetadata . Id ) )
64+ {
65+ yield return new ValidationResult ( string . Format (
66+ CultureInfo . CurrentCulture ,
67+ "Non-ASCII characters in package Id are temporary blocked, please check https://aka.ms/nuget/non-ascii-ids for updates." ,
68+ packageMetadata . Id ) ) ;
69+ }
6070 }
6171 }
6272
0 commit comments