コード例 #1
0
 public DefaultPackageContentService(
     IPackageService packages,
     IPackageStorageService storage)
 {
     _packages = packages ?? throw new ArgumentNullException(nameof(packages));
     _storage  = storage ?? throw new ArgumentNullException(nameof(storage));
 }
コード例 #2
0
 public DatabasePackageContentService(
     IMirrorService mirror,
     IPackageService packages,
     IPackageStorageService storage)
 {
     _mirror   = mirror ?? throw new ArgumentNullException(nameof(mirror));
     _packages = packages ?? throw new ArgumentNullException(nameof(packages));
     _storage  = storage ?? throw new ArgumentNullException(nameof(storage));
 }
コード例 #3
0
 public IndexingService(
     IPackageService packages,
     IPackageStorageService storage,
     ILogger <IndexingService> logger)
 {
     _packages = packages ?? throw new ArgumentNullException(nameof(packages));
     _storage  = storage ?? throw new ArgumentNullException(nameof(storage));
     _logger   = logger ?? throw new ArgumentNullException(nameof(logger));
 }
コード例 #4
0
 public static Task <bool> UploadPackageAsync(
     this NuGetClient client,
     string packageId,
     string version,
     string apiKey,
     IPackageStorageService storageService,
     CancellationToken cancellationToken = default)
 {
     return(client.UploadPackageAsync(packageId, NuGetVersion.Parse(version), apiKey, storageService, cancellationToken));
 }
コード例 #5
0
 public PackageDeletionService(
     IPackageService packages,
     IPackageStorageService storage,
     IOptionsSnapshot <BaGetOptions> options,
     ILogger <PackageDeletionService> logger)
 {
     _packages = packages ?? throw new ArgumentNullException(nameof(packages));
     _storage  = storage ?? throw new ArgumentNullException(nameof(storage));
     _options  = options?.Value ?? throw new ArgumentNullException(nameof(options));
     _logger   = logger ?? throw new ArgumentNullException(nameof(logger));
 }
コード例 #6
0
 public PackagePublishController(
     IIndexingService indexer,
     IPackageService packages,
     IPackageStorageService storage,
     ILogger <PackagePublishController> logger)
 {
     _indexer  = indexer ?? throw new ArgumentNullException(nameof(indexer));
     _packages = packages ?? throw new ArgumentNullException(nameof(packages));
     _storage  = storage ?? throw new ArgumentNullException(nameof(storage));
     _logger   = logger ?? throw new ArgumentNullException(nameof(logger));
 }
コード例 #7
0
 public SyndicationService(
     FeedContext feedContext,
     IContext packageContext,
     IPackageStorageService packageStorageService,
     ISymbolStorageService symbolStorageService)
 {
     _feedContext           = feedContext;
     _packageContext        = packageContext;
     _packageStorageService = packageStorageService;
     _symbolStorageService  = symbolStorageService;
 }
コード例 #8
0
 public PackageIndexingService(
     IPackageService packages,
     IPackageStorageService storage,
     ISearchService search,
     IOptionsSnapshot <BaGetOptions> options,
     ILogger <PackageIndexingService> logger)
 {
     _packages = packages ?? throw new ArgumentNullException(nameof(packages));
     _storage  = storage ?? throw new ArgumentNullException(nameof(storage));
     _search   = search ?? throw new ArgumentNullException(nameof(search));
     _options  = options ?? throw new ArgumentNullException(nameof(options));
     _logger   = logger ?? throw new ArgumentNullException(nameof(logger));
 }
コード例 #9
0
 public PackageIndexingService(
     IPackageService packages,
     IPackageStorageService storage,
     ISearchIndexer search,
     SystemTime time,
     IOptionsSnapshot <PackageFeedOptions> options,
     ILogger <PackageIndexingService> logger)
 {
     _packages = packages ?? throw new ArgumentNullException(nameof(packages));
     _storage  = storage ?? throw new ArgumentNullException(nameof(storage));
     _search   = search ?? throw new ArgumentNullException(nameof(search));
     _time     = time ?? throw new ArgumentNullException(nameof(time));
     _options  = options ?? throw new ArgumentNullException(nameof(options));
     _logger   = logger ?? throw new ArgumentNullException(nameof(logger));
 }
コード例 #10
0
        public static async Task <bool> UploadPackageAsync(
            this NuGetClient client,
            string packageId,
            NuGetVersion version,
            string apiKey,
            IPackageStorageService storageService,
            CancellationToken cancellationToken = default)
        {
            using var stream = await storageService.GetPackageStreamAsync(packageId, version, cancellationToken);

            if (stream == Stream.Null || cancellationToken.IsCancellationRequested)
            {
                return(false);
            }

            return(await client.UploadPackageAsync(packageId, version, apiKey, stream, cancellationToken));
        }
コード例 #11
0
        public async Task <IActionResult> PushLatest(string groupName, [FromForm] PackageGroupAssociation groupAssociation,
                                                     [FromServices] IPackageStorageService packageStorage, [FromServices] ISymbolStorageService symbolStorage)
        {
            if (groupName != groupAssociation.Group)
            {
                return(PackageGroups());
            }

            var group = await _dbContext.PackageGroups
                        .Include(x => x.Members)
                        .Include(x => x.Syndications)
                        .ThenInclude(x => x.PublishTarget)
                        .FirstOrDefaultAsync(x => x.Name == groupName);

            if (group is null)
            {
                return(PackageGroups());
            }

            var targets = group.Syndications.Select(x => x.PublishTarget);

            foreach (var package in group.Members)
            {
                var nugetPackage = await _context.Packages.Where(x => x.Id == package.PackageId && x.Listed == true)
                                   .OrderByDescending(x => x.Version)
                                   .FirstOrDefaultAsync();

                if (nugetPackage is null)
                {
                    continue;
                }

                foreach (var targetFeed in targets)
                {
                    var client = new NuGetClient(targetFeed.PublishEndpoint.ToString());
                    await client.UploadPackageAsync(nugetPackage.Id, nugetPackage.Version, targetFeed.ApiToken, packageStorage);

                    await client.UploadSymbolsPackageAsync(nugetPackage.Id, nugetPackage.Version, targetFeed.ApiToken, symbolStorage);
                }
            }

            // TODO: Add Success Page
            return(PackageGroups());
        }
コード例 #12
0
        public PackageModule(IPackageService packageService, IPackageStorageService storage)
            : base("v3/package")
        {
            _packages = packageService ?? throw new ArgumentNullException(nameof(packageService));
            _storage  = storage ?? throw new ArgumentNullException(nameof(storage));

            this.Get("/{id}/index.json", async(req, res, routeData) => {
                string id    = routeData.As <string>("id");
                var packages = await _packages.FindAsync(id);

                if (!packages.Any())
                {
                    res.StatusCode = 404;
                    return;
                }

                await res.AsJson(new
                {
                    Versions = packages.Select(p => p.VersionString).ToList()
                });
            });

            this.Get("/{id}/{version}/{idVersion}.nupkg", async(req, res, routeData) => {
                string id      = routeData.As <string>("id");
                string version = routeData.As <string>("version");

                if (!NuGetVersion.TryParse(version, out var nugetVersion))
                {
                    res.StatusCode = 400;
                    return;
                }

                var identity = new PackageIdentity(id, nugetVersion);
                if (!await _packages.IncrementDownloadCountAsync(identity))
                {
                    res.StatusCode = 404;
                    return;
                }


                var packageStream = await _storage.GetPackageStreamAsync(identity);

                await res.FromStream(packageStream, "application/octet-stream");
            });

            this.Get("/{id}/{version}/{id2}.nuspec", async(req, res, routeData) => {
                string id      = routeData.As <string>("id");
                string version = routeData.As <string>("version");

                if (!NuGetVersion.TryParse(version, out var nugetVersion))
                {
                    res.StatusCode = 400;
                    return;
                }

                var identity = new PackageIdentity(id, nugetVersion);

                if (!await _packages.ExistsAsync(identity))
                {
                    res.StatusCode = 404;
                    return;
                }

                await res.FromStream(await _storage.GetNuspecStreamAsync(identity), "text/xml");
            });

            this.Get("/{id}/{version}/readme", async(req, res, routeData) => {
                string id      = routeData.As <string>("id");
                string version = routeData.As <string>("version");

                if (!NuGetVersion.TryParse(version, out var nugetVersion))
                {
                    res.StatusCode = 400;
                    return;
                }

                var identity = new PackageIdentity(id, nugetVersion);

                if (!await _packages.ExistsAsync(identity))
                {
                    res.StatusCode = 404;
                    return;
                }

                await res.FromStream(await _storage.GetReadmeStreamAsync(identity), "text/markdown");
            });
        }
コード例 #13
0
        public PackagesV2Module(IODataPackageSerializer serializer, IPackageService packageService,
                                IPackageStorageService storage, IEdmModel odataModel,
                                ILogger <PackagesV2Module> logger, LiGetCompatibilityOptions compat)
        {
            this._compat         = compat;
            this._packageService = packageService;
            this._storage        = storage;
            this._log            = logger;
            this.GetCompat("/v2/contents/{id}/{version}", async(req, res, routeData) => {
                string id      = routeData.As <string>("id");
                string version = routeData.As <string>("version");

                if (!NuGetVersion.TryParse(version, out var nugetVersion))
                {
                    res.StatusCode = 400;
                    return;
                }

                if (!await packageService.IncrementDownloadCountAsync(id, nugetVersion))
                {
                    res.StatusCode = 404;
                    return;
                }

                var identity      = new PackageIdentity(id, nugetVersion);
                var packageStream = await _storage.GetPackageStreamAsync(identity);

                await res.FromStream(packageStream, "application/zip");
            });

            Func <HttpRequest, HttpResponse, RouteData, Task> indexHandler = async(req, res, routeData) => {
                var    serviceUrl = GetServiceUrl(req);
                string text       = $@"<?xml version=""1.0"" encoding=""utf-8""?>
<service xml:base=""{serviceUrl}"" xmlns=""http://www.w3.org/2007/app"" xmlns:atom=""http://www.w3.org/2005/Atom""><workspace>
<atom:title type=""text"">Default</atom:title><collection href=""Packages""><atom:title type=""text"">Packages</atom:title></collection></workspace>
</service>";
                res.StatusCode  = 200;
                res.ContentType = "application/xml; charset=utf-8";
                await res.WriteAsync(text, new UTF8Encoding(false));
            };

            this.GetCompat("/v2/", indexHandler);

            this.GetCompat(@"/v2/FindPackagesById{query}", async(req, res, routeData) => {
                try {
                    var serviceUrl = GetServiceUrl(req);
                    var uriParser  = new ODataUriParser(odataModel, new Uri(serviceUrl), req.GetUri());
                    var path       = uriParser.ParsePath();
                    if (path.FirstSegment.Identifier == "FindPackagesById")
                    {
                        var idOrNull = uriParser.CustomQueryOptions.FirstOrDefault(o => o.Key.ToLowerInvariant() == "id").Value;
                        string id    = idOrNull.TrimStart('\'').TrimEnd('\'');
                        _log.LogDebug("Request to FindPackagesById id={0}", id);
                        var found = await _packageService.FindAsync(id, false, true);
                        var odata = new ODataResponse <IEnumerable <PackageWithUrls> >(serviceUrl, found.Select(f => ToPackageWithUrls(req, f)));
                        using (var ms = new MemoryStream()) {
                            serializer.Serialize(ms, odata.Entity, odata.ServiceBaseUrl);
                            ms.Seek(0, SeekOrigin.Begin);
                            await res.FromStream(ms, atomXmlContentType);
                        }
                    }
                    else
                    {
                        res.StatusCode = 400;
                    }
                }
                catch (ODataException odataPathError) {
                    _log.LogError("Bad odata query", odataPathError);
                    res.StatusCode = 400;
                }
            });

            this.GetCompat(@"/v2/Packages{query}", async(req, res, routeData) => {
                try {
                    var serviceUrl = GetServiceUrl(req);
                    var uriParser  = new ODataUriParser(odataModel, new Uri(serviceUrl), req.GetUri());
                    var path       = uriParser.ParsePath();
                    if (path.FirstSegment.Identifier == "Packages")
                    {
                        if (path.Count == 2 && path.LastSegment is KeySegment)
                        {
                            KeySegment queryParams = (KeySegment)path.LastSegment;
                            string id      = queryParams.Keys.First(k => k.Key == "Id").Value as string;
                            string version = queryParams.Keys.First(k => k.Key == "Version").Value as string;
                            _log.LogDebug("Request to find package by id={0} and version={1}", id, version);
                            var found = await _packageService.FindAsync(id, NuGetVersion.Parse(version), false, true);
                            if (found == null)
                            {
                                res.StatusCode = 404;
                                return;
                            }
                            var odataPackage = new ODataResponse <PackageWithUrls>(serviceUrl, ToPackageWithUrls(req, found));
                            using (var ms = new MemoryStream()) {
                                serializer.Serialize(ms, odataPackage.Entity.Pkg,
                                                     odataPackage.ServiceBaseUrl, odataPackage.Entity.ResourceIdUrl, odataPackage.Entity.PackageContentUrl);
                                ms.Seek(0, SeekOrigin.Begin);
                                await res.FromStream(ms, atomXmlContentType);
                            }
                        }
                        else
                        {
                            res.StatusCode = 400;
                        }
                    }
                    else
                    {
                        res.StatusCode = 400;
                    }
                }
                catch (ODataException odataPathError) {
                    _log.LogError("Bad odata query", odataPathError);
                    res.StatusCode = 400;
                }
            });
        }
コード例 #14
0
 public PackageManager(IPackageStorageService packageStorageService, IMapper mapper)
 {
     _packageStorageService = packageStorageService;
     _mapper = mapper;
 }