Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge branch 'dev'
  • Loading branch information
skofman1 committed Sep 30, 2016
2 parents 0c64581 + 510d921 commit bce4a86
Show file tree
Hide file tree
Showing 74 changed files with 2,195 additions and 779 deletions.
11 changes: 6 additions & 5 deletions src/NuGetGallery.Core/CredentialTypes.cs
Expand Up @@ -9,13 +9,14 @@ public static class CredentialTypes
{
public static class Password
{
public static readonly string Prefix = "password.";
public static readonly string Pbkdf2 = Prefix + "pbkdf2";
public static readonly string Sha1 = Prefix + "sha1";
public const string Prefix = "password.";
public const string Pbkdf2 = Prefix + "pbkdf2";
public const string Sha1 = Prefix + "sha1";
public const string V3 = Prefix + "v3";
}

public static readonly string ApiKeyV1 = "apikey.v1";
public static readonly string ExternalPrefix = "external.";
public const string ApiKeyV1 = "apikey.v1";
public const string ExternalPrefix = "external.";

public static bool IsPassword(string type)
{
Expand Down
5 changes: 5 additions & 0 deletions src/NuGetGallery.Core/Entities/EntitiesContext.cs
Expand Up @@ -146,6 +146,11 @@ protected override void OnModelCreating(DbModelBuilder modelBuilder)
.WithRequired(pd => pd.Package)
.HasForeignKey(pd => pd.PackageKey);

modelBuilder.Entity<Package>()
.HasMany<PackageType>(p => p.PackageTypes)
.WithRequired(pt => pt.Package)
.HasForeignKey(pt => pt.PackageKey);

modelBuilder.Entity<PackageEdit>()
.HasKey(pm => pm.Key);

Expand Down
6 changes: 6 additions & 0 deletions src/NuGetGallery.Core/Entities/Package.cs
Expand Up @@ -20,6 +20,7 @@ public Package()
Dependencies = new HashSet<PackageDependency>();
PackageEdits = new HashSet<PackageEdit>();
PackageHistories = new HashSet<PackageHistory>();
PackageTypes = new HashSet<PackageType>();
SupportedFrameworks = new HashSet<PackageFramework>();
Listed = true;
}
Expand All @@ -41,6 +42,8 @@ public Package()

public virtual ICollection<PackageDependency> Dependencies { get; set; }

public virtual ICollection<PackageType> PackageTypes { get; set; }

/// <remarks>
/// Has a max length of 4000. Is not indexed but *IS* used for searches. Db column is nvarchar(max).
/// </remarks>
Expand Down Expand Up @@ -150,6 +153,9 @@ public Package()
public string FlattenedAuthors { get; set; }

public string FlattenedDependencies { get; set; }

public string FlattenedPackageTypes { get; set; }

public int Key { get; set; }

[StringLength(44)]
Expand Down
24 changes: 24 additions & 0 deletions src/NuGetGallery.Core/Entities/PackageType.cs
@@ -0,0 +1,24 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System.ComponentModel.DataAnnotations;

namespace NuGetGallery
{
public class PackageType
: IEntity
{
public Package Package { get; set; }
public int PackageKey { get; set; }

/// <remarks>
/// Has a max length of 512. Is indexed. Db column is nvarchar(512).
/// </remarks>
public string Name { get; set; }

public string Version { get; set; }

[Key]
public int Key { get; set; }
}
}
23 changes: 10 additions & 13 deletions src/NuGetGallery.Core/NuGetGallery.Core.csproj
Expand Up @@ -81,13 +81,11 @@
<Private>True</Private>
</Reference>
<Reference Include="NuGet.Common, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\packages\NuGet.Common.3.5.0-beta-final\lib\net45\NuGet.Common.dll</HintPath>
<HintPath>..\..\packages\NuGet.Common.3.5.0-rc1-final\lib\net45\NuGet.Common.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NuGet.Frameworks, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\packages\NuGet.Frameworks.3.5.0-beta-final\lib\net45\NuGet.Frameworks.dll</HintPath>
<HintPath>..\..\packages\NuGet.Frameworks.3.5.0-rc1-final\lib\net45\NuGet.Frameworks.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NuGet.Logging, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
Expand All @@ -96,23 +94,19 @@
<Private>True</Private>
</Reference>
<Reference Include="NuGet.Packaging, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\packages\NuGet.Packaging.3.5.0-beta-final\lib\net45\NuGet.Packaging.dll</HintPath>
<HintPath>..\..\packages\NuGet.Packaging.3.5.0-rc1-final\lib\net45\NuGet.Packaging.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NuGet.Packaging.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\packages\NuGet.Packaging.Core.3.5.0-beta-final\lib\net45\NuGet.Packaging.Core.dll</HintPath>
<HintPath>..\..\packages\NuGet.Packaging.Core.3.5.0-rc1-final\lib\net45\NuGet.Packaging.Core.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NuGet.Packaging.Core.Types, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\packages\NuGet.Packaging.Core.Types.3.5.0-beta-final\lib\net45\NuGet.Packaging.Core.Types.dll</HintPath>
<HintPath>..\..\packages\NuGet.Packaging.Core.Types.3.5.0-rc1-final\lib\net45\NuGet.Packaging.Core.Types.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NuGet.Versioning, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\packages\NuGet.Versioning.3.5.0-beta-final\lib\net45\NuGet.Versioning.dll</HintPath>
<HintPath>..\..\packages\NuGet.Versioning.3.5.0-rc1-final\lib\net45\NuGet.Versioning.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />
Expand Down Expand Up @@ -184,6 +178,7 @@
<Compile Include="Entities\PackageLicenseReport.cs" />
<Compile Include="Entities\PackageOwnerRequest.cs" />
<Compile Include="Entities\PackageRegistration.cs" />
<Compile Include="Entities\PackageType.cs" />
<Compile Include="Entities\ReadOnlyModeException.cs" />
<Compile Include="Entities\Role.cs" />
<Compile Include="Entities\User.cs" />
Expand All @@ -209,7 +204,9 @@
<ItemGroup>
<None Include="app.config" />
<None Include="NuGetGallery.Core.nuspec" />
<None Include="packages.config" />
<None Include="packages.config">
<SubType>Designer</SubType>
</None>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Strings.resx">
Expand Down
11 changes: 11 additions & 0 deletions src/NuGetGallery.Core/NuGetVersionExtensions.cs
Expand Up @@ -3,6 +3,7 @@

using System;
using System.Linq;
using System.Text.RegularExpressions;
using NuGet.Versioning;

namespace NuGetGallery
Expand All @@ -23,6 +24,9 @@ public static string Normalize(string version)

public static class NuGetVersionExtensions
{
private const RegexOptions Flags = RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture;
private static readonly Regex SemanticVersionRegex = new Regex(@"^(?<Version>\d+(\s*\.\s*\d+){0,3})(?<Release>-[a-z][0-9a-z-]*)?$", Flags);

public static string ToNormalizedStringSafe(this NuGetVersion self)
{
return self != null ? self.ToNormalizedString() : String.Empty;
Expand All @@ -32,5 +36,12 @@ public static bool IsSemVer200(this NuGetVersion self)
{
return self.ReleaseLabels.Count() > 1 || self.HasMetadata;
}

public static bool IsValidVersionForLegacyClients(this NuGetVersion self)
{
var match = SemanticVersionRegex.Match(self.ToString().Trim());

return match.Success;
}
}
}
53 changes: 46 additions & 7 deletions src/NuGetGallery.Core/Packaging/ManifestValidator.cs
Expand Up @@ -8,6 +8,7 @@
using System.IO;
using System.Linq;
using NuGet.Packaging;
using NuGet.Versioning;

namespace NuGetGallery.Packaging
{
Expand Down Expand Up @@ -77,13 +78,11 @@ private static IEnumerable<ValidationResult> ValidateCore(PackageMetadata packag
Strings.Manifest_InvalidVersion,
version));
}
if (packageMetadata.Version.IsSemVer200())
{

yield return new ValidationResult(String.Format(
CultureInfo.CurrentCulture,
Strings.Manifest_InvalidVersionSemVer200,
packageMetadata.Version.ToFullString()));
var versionValidationResult = ValidateVersion(packageMetadata.Version);
if (versionValidationResult != null)
{
yield return versionValidationResult;
}

// Check framework reference groups
Expand Down Expand Up @@ -122,7 +121,7 @@ private static IEnumerable<ValidationResult> ValidateCore(PackageMetadata packag
dependencyGroup.TargetFramework?.ToString()));
}

// Verify package id's
// Verify package id's and versions
foreach (var dependency in dependencyGroup.Packages)
{
bool duplicate = !dependencyIds.Add(dependency.Id);
Expand All @@ -143,11 +142,51 @@ private static IEnumerable<ValidationResult> ValidateCore(PackageMetadata packag
dependency.Id,
dependency.VersionRange.OriginalString));
}

// Versions
if (dependency.VersionRange.MinVersion != null)
{
var versionRangeValidationResult = ValidateVersion(dependency.VersionRange.MinVersion);
if (versionRangeValidationResult != null)
{
yield return versionRangeValidationResult;
}
}

if (dependency.VersionRange.MaxVersion != null
&& dependency.VersionRange.MaxVersion != dependency.VersionRange.MinVersion)
{
var versionRangeValidationResult = ValidateVersion(dependency.VersionRange.MaxVersion);
if (versionRangeValidationResult != null)
{
yield return versionRangeValidationResult;
}
}
}
}
}
}

private static ValidationResult ValidateVersion(NuGetVersion version)
{
if (version.IsSemVer200())
{
return new ValidationResult(string.Format(
CultureInfo.CurrentCulture,
Strings.Manifest_InvalidVersionSemVer200,
version.ToFullString()));
}
else if (!version.IsValidVersionForLegacyClients())
{
return new ValidationResult(string.Format(
CultureInfo.CurrentCulture,
Strings.Manifest_InvalidVersion,
version));
}

return null;
}

private static IEnumerable<ValidationResult> CheckUrls(params string[] urls)
{
foreach (var url in urls)
Expand Down
10 changes: 10 additions & 0 deletions src/NuGetGallery.Core/Packaging/PackageMetadata.cs
Expand Up @@ -5,6 +5,7 @@
using System.Collections.Generic;
using System.Linq;
using NuGet.Packaging;
using NuGet.Packaging.Core;
using NuGet.Versioning;

namespace NuGetGallery.Packaging
Expand All @@ -14,16 +15,19 @@ public class PackageMetadata
private readonly Dictionary<string, string> _metadata;
private readonly IReadOnlyCollection<PackageDependencyGroup> _dependencyGroups;
private readonly IReadOnlyCollection<FrameworkSpecificGroup> _frameworkReferenceGroups;
private readonly IReadOnlyCollection<NuGet.Packaging.Core.PackageType> _packageTypes;

public PackageMetadata(
Dictionary<string, string> metadata,
IEnumerable<PackageDependencyGroup> dependencyGroups,
IEnumerable<FrameworkSpecificGroup> frameworkGroups,
IEnumerable<NuGet.Packaging.Core.PackageType> packageTypes,
NuGetVersion minClientVersion)
{
_metadata = new Dictionary<string, string>(metadata, StringComparer.OrdinalIgnoreCase);
_dependencyGroups = dependencyGroups.ToList().AsReadOnly();
_frameworkReferenceGroups = frameworkGroups.ToList().AsReadOnly();
_packageTypes = packageTypes.ToList().AsReadOnly();

SetPropertiesFromMetadata();
MinClientVersion = minClientVersion;
Expand Down Expand Up @@ -96,6 +100,11 @@ public IReadOnlyCollection<FrameworkSpecificGroup> GetFrameworkReferenceGroups()
return _frameworkReferenceGroups;
}

public IReadOnlyCollection<NuGet.Packaging.Core.PackageType> GetPackageTypes()
{
return _packageTypes;
}

private string GetValue(string key, string alternateValue)
{
string value;
Expand Down Expand Up @@ -141,6 +150,7 @@ public static PackageMetadata FromNuspecReader(NuspecReader nuspecReader)
nuspecReader.GetMetadata().ToDictionary(kvp => kvp.Key, kvp => kvp.Value),
nuspecReader.GetDependencyGroups(),
nuspecReader.GetFrameworkReferenceGroups(),
nuspecReader.GetPackageTypes(),
nuspecReader.GetMinClientVersion()
);
}
Expand Down
12 changes: 6 additions & 6 deletions src/NuGetGallery.Core/packages.config
Expand Up @@ -7,13 +7,13 @@
<package id="Microsoft.Web.Xdt" version="2.1.1" targetFramework="net452" />
<package id="Microsoft.WindowsAzure.ConfigurationManager" version="3.1.0" targetFramework="net452" />
<package id="Newtonsoft.Json" version="6.0.8" targetFramework="net452" />
<package id="NuGet.Common" version="3.5.0-beta-final" targetFramework="net452" />
<package id="NuGet.Frameworks" version="3.5.0-beta-final" targetFramework="net452" />
<package id="NuGet.Common" version="3.5.0-rc1-final" targetFramework="net452" />
<package id="NuGet.Frameworks" version="3.5.0-rc1-final" targetFramework="net452" />
<package id="NuGet.Logging" version="3.5.0-beta-1160" targetFramework="net452" />
<package id="NuGet.Packaging" version="3.5.0-beta-final" targetFramework="net452" />
<package id="NuGet.Packaging.Core" version="3.5.0-beta-final" targetFramework="net452" />
<package id="NuGet.Packaging.Core.Types" version="3.5.0-beta-final" targetFramework="net452" />
<package id="NuGet.Versioning" version="3.5.0-beta-final" targetFramework="net452" />
<package id="NuGet.Packaging" version="3.5.0-rc1-final" targetFramework="net452" />
<package id="NuGet.Packaging.Core" version="3.5.0-rc1-final" targetFramework="net452" />
<package id="NuGet.Packaging.Core.Types" version="3.5.0-rc1-final" targetFramework="net452" />
<package id="NuGet.Versioning" version="3.5.0-rc1-final" targetFramework="net452" />
<package id="System.Spatial" version="5.6.5-beta" targetFramework="net452" />
<package id="WindowsAzure.Storage" version="4.3.0" targetFramework="net452" />
</packages>
4 changes: 3 additions & 1 deletion src/NuGetGallery.Operations/NuGetGallery.Operations.csproj
Expand Up @@ -366,7 +366,9 @@
<None Include="app.config">
<SubType>Designer</SubType>
</None>
<None Include="packages.config" />
<None Include="packages.config">
<SubType>Designer</SubType>
</None>
<None Include="Service References\SqlDac\Microsoft.SqlServer.Management.Dac.Services.wsdl" />
<None Include="Service References\SqlDac\Microsoft.SqlServer.Management.Dac.ServiceTypes.xsd">
<SubType>Designer</SubType>
Expand Down
4 changes: 4 additions & 0 deletions src/NuGetGallery/App_Start/DefaultDependenciesModule.cs
Expand Up @@ -22,6 +22,7 @@
using NuGetGallery.Infrastructure.Lucene;
using NuGetGallery.Areas.Admin.Models;
using NuGetGallery.Configuration.SecretReader;
using NuGetGallery.Infrastructure.Authentication;

namespace NuGetGallery
{
Expand Down Expand Up @@ -55,6 +56,9 @@ protected override void Load(ContainerBuilder builder)
.AsSelf()
.As<FeatureConfiguration>();

builder.RegisterType<CredentialBuilder>().As<ICredentialBuilder>().SingleInstance();
builder.RegisterType<CredentialValidator>().As<ICredentialValidator>().SingleInstance();

builder.RegisterInstance(LuceneCommon.GetDirectory(configuration.Current.LuceneIndexLocation))
.As<Lucene.Net.Store.Directory>()
.SingleInstance();
Expand Down

0 comments on commit bce4a86

Please sign in to comment.