Skip to content
This repository was archived by the owner on Oct 4, 2021. It is now read-only.

Commit 09fe445

Browse files
garumamrward
authored andcommitted
[PackageManagement] Register credential providers coming from secure plugins
This will do a barebone registration of available, plugin-based credential providers (like the Azure DevOps one) without implementing any authentication flow. The idea is that users can pre-authenticate via another mean (manual MSBuild invocation or NuGet binary) and the IDE will, at least, be able to retrieve those cached credentials.
1 parent d23edd4 commit 09fe445

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/PackageManagementCredentialService.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
using NuGet.CommandLine;
3333
using NuGet.Credentials;
3434
using NuGet.Protocol;
35+
using NuGet.Protocol.Plugins;
3536

3637
namespace MonoDevelop.PackageManagement
3738
{
@@ -60,6 +61,7 @@ IEnumerable<ICredentialProvider> GetCredentialProviders ()
6061
var credentialProviders = new List<ICredentialProvider>();
6162

6263
credentialProviders.Add (CreateSettingsCredentialProvider ());
64+
credentialProviders.AddRange (GetPluginsCredentialProviders ());
6365
credentialProviders.Add (new MonoDevelopCredentialProvider ());
6466

6567
return credentialProviders;
@@ -72,6 +74,17 @@ static SettingsCredentialProvider CreateSettingsCredentialProvider ()
7274
return new SettingsCredentialProvider (packageSourceProvider);
7375
}
7476

77+
static IEnumerable<ICredentialProvider> GetPluginsCredentialProviders ()
78+
{
79+
var builder = new SecurePluginCredentialProviderBuilder (
80+
PluginManager.Instance,
81+
canShowDialog: false,
82+
logger: NuGet.Common.NullLogger.Instance
83+
);
84+
var providers = builder.BuildAllAsync ().Result;
85+
return providers;
86+
}
87+
7588
/// <summary>
7689
/// The credential service puts itself in a retry mode if a credential provider
7790
/// is checked. This results in credentials stored in the key chain being ignored

main/src/addins/MonoDevelop.PackageManagement/NuGet.Credentials/CredentialService.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,18 @@ public async Task<ICredentials> GetCredentialsAsync (
103103

104104
CredentialResponse response;
105105
if (!TryFromCredentialCache (uri, type, isRetry, provider, out response)) {
106+
/* Temporarily disable interactive-ness with secure plugin provider
107+
* to avoid them blocking on requesting user-input for device flow auth
108+
*/
109+
var nonInteractive = _nonInteractive || provider is SecurePluginCredentialProvider;
110+
106111
response = await provider.GetAsync (
107112
uri,
108113
proxy,
109114
type,
110115
message,
111116
isRetry,
112-
_nonInteractive,
117+
nonInteractive,
113118
cancellationToken);
114119

115120
// Check that the provider gave us a valid response.

0 commit comments

Comments
 (0)