diff --git a/src/code/PublishPSResource.cs b/src/code/PublishPSResource.cs index 4b9277792..9063b9405 100644 --- a/src/code/PublishPSResource.cs +++ b/src/code/PublishPSResource.cs @@ -846,11 +846,19 @@ private bool PushNupkg(string outputNupkgDir, string repoName, string repoUri, o var settings = NuGet.Configuration.Settings.LoadDefaultSettings(null, null, null); var success = false; + + var sourceProvider = new PackageSourceProvider(settings); + if (Credential != null) + { + InjectCredentialsToSettings(settings, sourceProvider, publishLocation); + } + + try { PushRunner.Run( settings: Settings.LoadDefaultSettings(root: null, configFileName: null, machineWideSettings: null), - sourceProvider: new PackageSourceProvider(settings), + sourceProvider: sourceProvider, packagePaths: new List { fullNupkgFile }, source: publishLocation, apiKey: ApiKey, @@ -922,6 +930,49 @@ private bool PushNupkg(string outputNupkgDir, string repoName, string repoUri, o } - #endregion - } + private void InjectCredentialsToSettings(ISettings settings, IPackageSourceProvider sourceProvider, string source) + { + if (Credential == null) + { + return; + } + + var packageSource = sourceProvider.LoadPackageSources().FirstOrDefault(s => s.Source == source); + if (packageSource != null) + { + if (!packageSource.IsEnabled) + { + packageSource.IsEnabled = true; + } + } + + + var networkCred = Credential.GetNetworkCredential(); + string key; + + if (packageSource == null) + + { + key = "_" + Guid.NewGuid().ToString().Replace("-", ""); + settings.AddOrUpdate( + ConfigurationConstants.PackageSources, + new SourceItem(key, source)); + } + else + { + key = packageSource.Name; + } + + settings.AddOrUpdate( + ConfigurationConstants.CredentialsSectionName, + new CredentialsItem( + key, + networkCred.UserName, + networkCred.Password, + isPasswordClearText: true, + String.Empty)); + } + + #endregion + } }