Skip to content

Commit 0e58201

Browse files
KN4CK3Rlafrikswxiaoguang
authored
Add support for Chocolatey/NuGet v2 API (#21393)
Fixes #21294 This PR adds support for NuGet v2 API. Co-authored-by: Lauris BH <lauris@nix.lv> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
1 parent c35531d commit 0e58201

File tree

8 files changed

+849
-134
lines changed

8 files changed

+849
-134
lines changed

docs/content/doc/packages/nuget.en-us.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ menu:
1414

1515
# NuGet Packages Repository
1616

17-
Publish [NuGet](https://www.nuget.org/) packages for your user or organization. The package registry supports [NuGet Symbol Packages](https://docs.microsoft.com/en-us/nuget/create-packages/symbol-packages-snupkg) too.
17+
Publish [NuGet](https://www.nuget.org/) packages for your user or organization. The package registry supports the V2 and V3 API protocol and you can work with [NuGet Symbol Packages](https://docs.microsoft.com/en-us/nuget/create-packages/symbol-packages-snupkg) too.
1818

1919
**Table of Contents**
2020

modules/packages/nuget/metadata.go

+14-12
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,13 @@ type Package struct {
5555

5656
// Metadata represents the metadata of a Nuget package
5757
type Metadata struct {
58-
Description string `json:"description,omitempty"`
59-
ReleaseNotes string `json:"release_notes,omitempty"`
60-
Authors string `json:"authors,omitempty"`
61-
ProjectURL string `json:"project_url,omitempty"`
62-
RepositoryURL string `json:"repository_url,omitempty"`
63-
Dependencies map[string][]Dependency `json:"dependencies,omitempty"`
58+
Description string `json:"description,omitempty"`
59+
ReleaseNotes string `json:"release_notes,omitempty"`
60+
Authors string `json:"authors,omitempty"`
61+
ProjectURL string `json:"project_url,omitempty"`
62+
RepositoryURL string `json:"repository_url,omitempty"`
63+
RequireLicenseAcceptance bool `json:"require_license_acceptance"`
64+
Dependencies map[string][]Dependency `json:"dependencies,omitempty"`
6465
}
6566

6667
// Dependency represents a dependency of a Nuget package
@@ -155,12 +156,13 @@ func ParseNuspecMetaData(r io.Reader) (*Package, error) {
155156
}
156157

157158
m := &Metadata{
158-
Description: p.Metadata.Description,
159-
ReleaseNotes: p.Metadata.ReleaseNotes,
160-
Authors: p.Metadata.Authors,
161-
ProjectURL: p.Metadata.ProjectURL,
162-
RepositoryURL: p.Metadata.Repository.URL,
163-
Dependencies: make(map[string][]Dependency),
159+
Description: p.Metadata.Description,
160+
ReleaseNotes: p.Metadata.ReleaseNotes,
161+
Authors: p.Metadata.Authors,
162+
ProjectURL: p.Metadata.ProjectURL,
163+
RepositoryURL: p.Metadata.Repository.URL,
164+
RequireLicenseAcceptance: p.Metadata.RequireLicenseAcceptance,
165+
Dependencies: make(map[string][]Dependency),
164166
}
165167

166168
for _, group := range p.Metadata.Dependencies.Group {

routers/api/packages/api.go

+12-4
Original file line numberDiff line numberDiff line change
@@ -180,15 +180,19 @@ func Routes(ctx gocontext.Context) *web.Route {
180180
r.Get("/*", maven.DownloadPackageFile)
181181
}, reqPackageAccess(perm.AccessModeRead))
182182
r.Group("/nuget", func() {
183-
r.Get("/index.json", nuget.ServiceIndex) // Needs to be unauthenticated for the NuGet client.
183+
r.Group("", func() { // Needs to be unauthenticated for the NuGet client.
184+
r.Get("/", nuget.ServiceIndexV2)
185+
r.Get("/index.json", nuget.ServiceIndexV3)
186+
r.Get("/$metadata", nuget.FeedCapabilityResource)
187+
})
184188
r.Group("", func() {
185-
r.Get("/query", nuget.SearchService)
189+
r.Get("/query", nuget.SearchServiceV3)
186190
r.Group("/registration/{id}", func() {
187191
r.Get("/index.json", nuget.RegistrationIndex)
188-
r.Get("/{version}", nuget.RegistrationLeaf)
192+
r.Get("/{version}", nuget.RegistrationLeafV3)
189193
})
190194
r.Group("/package/{id}", func() {
191-
r.Get("/index.json", nuget.EnumeratePackageVersions)
195+
r.Get("/index.json", nuget.EnumeratePackageVersionsV3)
192196
r.Get("/{version}/{filename}", nuget.DownloadPackageFile)
193197
})
194198
r.Group("", func() {
@@ -197,6 +201,10 @@ func Routes(ctx gocontext.Context) *web.Route {
197201
r.Delete("/{id}/{version}", nuget.DeletePackage)
198202
}, reqPackageAccess(perm.AccessModeWrite))
199203
r.Get("/symbols/{filename}/{guid:[0-9a-fA-F]{32}[fF]{8}}/{filename2}", nuget.DownloadSymbolFile)
204+
r.Get("/Packages(Id='{id:[^']+}',Version='{version:[^']+}')", nuget.RegistrationLeafV2)
205+
r.Get("/Packages()", nuget.SearchServiceV2)
206+
r.Get("/FindPackagesById()", nuget.EnumeratePackageVersionsV2)
207+
r.Get("/Search()", nuget.SearchServiceV2)
200208
}, reqPackageAccess(perm.AccessModeRead))
201209
})
202210
r.Group("/npm", func() {

0 commit comments

Comments
 (0)