Skip to content

Commit 6d52514

Browse files
committed
Add dynamic parameters to Register-PSResourceRepository and Set-PSResourceRepository
1 parent 3dbb6c7 commit 6d52514

File tree

2 files changed

+57
-25
lines changed

2 files changed

+57
-25
lines changed

src/code/RegisterPSResourceRepository.cs

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System;
66
using System.Collections;
77
using System.Collections.Generic;
8+
using System.Linq;
89
using System.Management.Automation;
910

1011
using Dbg = System.Diagnostics.Debug;
@@ -23,7 +24,7 @@ namespace Microsoft.PowerShell.PSResourceGet.Cmdlets
2324
SupportsShouldProcess = true,
2425
ConfirmImpact = ConfirmImpact.Low)]
2526
public sealed
26-
class RegisterPSResourceRepository : PSCmdlet
27+
class RegisterPSResourceRepository : PSCmdlet, IDynamicParameters
2728
{
2829
#region Members
2930

@@ -35,6 +36,7 @@ class RegisterPSResourceRepository : PSCmdlet
3536
private const string PSGalleryParameterSet = "PSGalleryParameterSet";
3637
private const string RepositoriesParameterSet = "RepositoriesParameterSet";
3738
private Uri _uri;
39+
private CredentialProviderDynamicParameters _credentialProvider;
3840

3941
#endregion
4042

@@ -97,12 +99,6 @@ class RegisterPSResourceRepository : PSCmdlet
9799
[Parameter(ParameterSetName = NameParameterSet)]
98100
public PSCredentialInfo CredentialInfo { get; set; }
99101

100-
/// <summary>
101-
/// Specifies which credential provider to use.
102-
/// </summary>
103-
[Parameter(ParameterSetName = NameParameterSet)]
104-
public PSRepositoryInfo.CredentialProviderType CredentialProvider { get; set; }
105-
106102
/// <summary>
107103
/// When specified, displays the succcessfully registered repository and its information.
108104
/// </summary>
@@ -117,6 +113,21 @@ class RegisterPSResourceRepository : PSCmdlet
117113

118114
#endregion
119115

116+
#region DynamicParameters
117+
118+
public object GetDynamicParameters()
119+
{
120+
if (Uri.Contains("pkgs.dev.azure.com") || Uri.Contains("pkgs.visualstudio.com"))
121+
{
122+
_credentialProvider = new CredentialProviderDynamicParameters();
123+
return _credentialProvider;
124+
}
125+
126+
return null;
127+
}
128+
129+
#endregion
130+
120131
#region Methods
121132

122133
protected override void BeginProcessing()
@@ -133,12 +144,7 @@ protected override void ProcessRecord()
133144
repoApiVersion = ApiVersion;
134145
}
135146

136-
PSRepositoryInfo.CredentialProviderType? repoCredentialProvider = null;
137-
if (MyInvocation.BoundParameters.ContainsKey(nameof(CredentialProvider)))
138-
{
139-
repoCredentialProvider = CredentialProvider;
140-
}
141-
147+
PSRepositoryInfo.CredentialProviderType credentialProvider = _credentialProvider.CredentialProvider;
142148

143149
switch (ParameterSetName)
144150
{
@@ -153,7 +159,7 @@ protected override void ProcessRecord()
153159

154160
try
155161
{
156-
items.Add(RepositorySettings.AddRepository(Name, _uri, Priority, Trusted, repoApiVersion, CredentialInfo, repoCredentialProvider, Force, this, out string errorMsg));
162+
items.Add(RepositorySettings.AddRepository(Name, _uri, Priority, Trusted, repoApiVersion, CredentialInfo, credentialProvider, Force, this, out string errorMsg));
157163

158164
if (!string.IsNullOrEmpty(errorMsg))
159165
{
@@ -367,7 +373,7 @@ private PSRepositoryInfo RepoValidationHelper(Hashtable repo)
367373
}
368374

369375
if (repo.ContainsKey("CredentialProvider") &&
370-
(repo["CredentialProvider"] == null || String.IsNullOrEmpty(repo["CredentialProvider"].ToString()) ||
376+
(String.IsNullOrEmpty(repo["CredentialProvider"].ToString()) ||
371377
!(repo["CredentialProvider"].ToString().Equals("None", StringComparison.OrdinalIgnoreCase) ||
372378
repo["CredentialProvider"].ToString().Equals("AzArtifacts", StringComparison.OrdinalIgnoreCase))))
373379
{
@@ -429,4 +435,13 @@ private PSRepositoryInfo RepoValidationHelper(Hashtable repo)
429435

430436
#endregion
431437
}
438+
439+
public class CredentialProviderDynamicParameters
440+
{
441+
/// <summary>
442+
/// Specifies which credential provider to use.
443+
/// </summary>
444+
[Parameter]
445+
public PSRepositoryInfo.CredentialProviderType CredentialProvider { get; set; }
446+
}
432447
}

src/code/SetPSResourceRepository.cs

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System;
66
using System.Collections;
77
using System.Collections.Generic;
8+
using System.Linq;
89
using System.Management.Automation;
910

1011
using Dbg = System.Diagnostics.Debug;
@@ -18,14 +19,15 @@ namespace Microsoft.PowerShell.PSResourceGet.Cmdlets
1819
"PSResourceRepository",
1920
DefaultParameterSetName = NameParameterSet,
2021
SupportsShouldProcess = true)]
21-
public sealed class SetPSResourceRepository : PSCmdlet
22+
public sealed class SetPSResourceRepository : PSCmdlet, IDynamicParameters
2223
{
2324
#region Members
2425

2526
private const string NameParameterSet = "NameParameterSet";
2627
private const string RepositoriesParameterSet = "RepositoriesParameterSet";
2728
private const int DefaultPriority = -1;
2829
private Uri _uri;
30+
private CredentialProviderDynamicParameters _credentialProvider;
2931

3032
#endregion
3133

@@ -92,13 +94,7 @@ public SwitchParameter Trusted
9294
/// Specifies vault and secret names as PSCredentialInfo for the repository.
9395
/// </summary>
9496
[Parameter(ParameterSetName = NameParameterSet)]
95-
public PSCredentialInfo CredentialInfo { get; set; }
96-
97-
/// <summary>
98-
/// Specifies which credential provider to use.
99-
/// </summary>
100-
[Parameter(ParameterSetName = NameParameterSet)]
101-
public PSRepositoryInfo.CredentialProviderType CredentialProvider { get; set; }
97+
public PSCredentialInfo CredentialInfo { get; set; }
10298

10399
/// <summary>
104100
/// When specified, displays the successfully registered repository and its information.
@@ -108,6 +104,23 @@ public SwitchParameter Trusted
108104

109105
#endregion
110106

107+
#region DynamicParameters
108+
109+
public object GetDynamicParameters()
110+
{
111+
PSRepositoryInfo repository = RepositorySettings.Read(new[] { Name }, out string[] _).FirstOrDefault();
112+
if (repository is not null &&
113+
(repository.Uri.AbsoluteUri.Contains("pkgs.dev.azure.com") || repository.Uri.AbsoluteUri.Contains("pkgs.visualstudio.com")))
114+
{
115+
_credentialProvider = new CredentialProviderDynamicParameters();
116+
return _credentialProvider;
117+
}
118+
119+
return null;
120+
}
121+
122+
#endregion
123+
111124
#region Private methods
112125

113126
protected override void BeginProcessing()
@@ -148,6 +161,8 @@ protected override void ProcessRecord()
148161
repoApiVersion = ApiVersion;
149162
}
150163

164+
PSRepositoryInfo.CredentialProviderType credentialProvider = _credentialProvider.CredentialProvider;
165+
151166
List<PSRepositoryInfo> items = new List<PSRepositoryInfo>();
152167

153168
switch(ParameterSetName)
@@ -163,7 +178,7 @@ protected override void ProcessRecord()
163178
DefaultPriority,
164179
repoApiVersion,
165180
CredentialInfo,
166-
CredentialProvider,
181+
credentialProvider,
167182
this,
168183
out string errorMsg));
169184

@@ -291,6 +306,8 @@ private PSRepositoryInfo RepoValidationHelper(Hashtable repo)
291306
return null;
292307
}
293308

309+
PSRepositoryInfo.CredentialProviderType credentialProvider = _credentialProvider.CredentialProvider;
310+
294311
try
295312
{
296313
var updatedRepo = RepositorySettings.UpdateRepositoryStore(repo["Name"].ToString(),
@@ -301,7 +318,7 @@ private PSRepositoryInfo RepoValidationHelper(Hashtable repo)
301318
DefaultPriority,
302319
ApiVersion,
303320
repoCredentialInfo,
304-
CredentialProvider,
321+
credentialProvider,
305322
this,
306323
out string errorMsg);
307324

0 commit comments

Comments
 (0)