From 94ef9cf83e071ee5e86d2979517741c29aa95e56 Mon Sep 17 00:00:00 2001 From: Amber Erickson Date: Tue, 16 Aug 2022 01:29:48 -0700 Subject: [PATCH 01/14] Overload PSCredentialInfo construct w/str, secstr --- src/code/PSCredentialInfo.cs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/code/PSCredentialInfo.cs b/src/code/PSCredentialInfo.cs index 11ec0f198..be464b814 100644 --- a/src/code/PSCredentialInfo.cs +++ b/src/code/PSCredentialInfo.cs @@ -3,6 +3,8 @@ using System; using System.Management.Automation; +using System.Net; +using System.Security; namespace Microsoft.PowerShell.PowerShellGet.UtilClasses { @@ -28,6 +30,36 @@ public PSCredentialInfo(string vaultName, string secretName, PSCredential creden Credential = credential; } + /// + /// Initializes a new instance of the PSCredentialInfo class with + /// vaultName and secretName of type string, and + /// credential of type String. + /// + /// + /// + /// + public PSCredentialInfo(string vaultName, string secretName, string credential) + { + VaultName = vaultName; + SecretName = secretName; + Credential = new PSCredential("PSGetUser", new NetworkCredential("", credential).SecurePassword); + } + + /// + /// Initializes a new instance of the PSCredentialInfo class with + /// vaultName and secretName of type string, and + /// credential of type SecureString. + /// + /// + /// + /// + public PSCredentialInfo(string vaultName, string secretName, SecureString credential) + { + VaultName = vaultName; + SecretName = secretName; + Credential = new PSCredential("PSGetUser", credential); + } + /// /// Initializes a new instance of the PSCredentialInfo class with /// vaultName and secretName of type string, and From 982cd96a49ff434206703814292ee140b32bdc37 Mon Sep 17 00:00:00 2001 From: Amber Erickson Date: Tue, 16 Aug 2022 11:23:53 -0700 Subject: [PATCH 02/14] Add new PSCredntialInfo constructor --- src/code/PSCredentialInfo.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/code/PSCredentialInfo.cs b/src/code/PSCredentialInfo.cs index be464b814..549c94afa 100644 --- a/src/code/PSCredentialInfo.cs +++ b/src/code/PSCredentialInfo.cs @@ -15,6 +15,19 @@ public sealed class PSCredentialInfo { #region Constructor + /// + /// Initializes a new instance of the PSCredentialInfo class with + /// vaultName and secretName of type string + /// + /// + /// + public PSCredentialInfo(string vaultName, string secretName) + { + VaultName = vaultName; + SecretName = secretName; + Credential = null; + } + /// /// Initializes a new instance of the PSCredentialInfo class with /// vaultName and secretName of type string, and From 9d2aa775a225366548e2827a712384a8bd4d29a4 Mon Sep 17 00:00:00 2001 From: Amber Erickson Date: Tue, 16 Aug 2022 11:34:14 -0700 Subject: [PATCH 03/14] Remove optional null parameter --- src/code/PSCredentialInfo.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/code/PSCredentialInfo.cs b/src/code/PSCredentialInfo.cs index 549c94afa..95036b9e3 100644 --- a/src/code/PSCredentialInfo.cs +++ b/src/code/PSCredentialInfo.cs @@ -31,12 +31,12 @@ public PSCredentialInfo(string vaultName, string secretName) /// /// Initializes a new instance of the PSCredentialInfo class with /// vaultName and secretName of type string, and - /// (optionally) credential of type PSCredential. + /// credential of type PSCredential. /// /// /// /// - public PSCredentialInfo(string vaultName, string secretName, PSCredential credential = null) + public PSCredentialInfo(string vaultName, string secretName, PSCredential credential) { VaultName = vaultName; SecretName = secretName; From b262784abdb37a20926a2c4cce784255ce6b7baf Mon Sep 17 00:00:00 2001 From: Amber Erickson Date: Tue, 16 Aug 2022 12:26:19 -0700 Subject: [PATCH 04/14] Remove null parameter from test --- test/PSCredentialInfo.Tests.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/PSCredentialInfo.Tests.ps1 b/test/PSCredentialInfo.Tests.ps1 index 18775ef03..a197e0de8 100644 --- a/test/PSCredentialInfo.Tests.ps1 +++ b/test/PSCredentialInfo.Tests.ps1 @@ -23,7 +23,7 @@ Describe "Create PSCredentialInfo with VaultName and SecretName" -tags 'CI' { Describe "Create PSCredentialInfo with VaultName, SecretName, and Credential" -tags 'CI' { It "Creates PSCredentialInfo successfully if Credential is null" { - $credentialInfo = New-Object Microsoft.PowerShell.PowerShellGet.UtilClasses.PSCredentialInfo ("testvault", "testsecret", $null) + $credentialInfo = New-Object Microsoft.PowerShell.PowerShellGet.UtilClasses.PSCredentialInfo ("testvault", "testsecret") $credentialInfo.VaultName | Should -Be "testvault" $credentialInfo.SecretName | Should -Be "testsecret" From 61fd4dce2e88b0710f0b9a89585060ac74f6a9cd Mon Sep 17 00:00:00 2001 From: Amber Erickson Date: Tue, 16 Aug 2022 12:31:43 -0700 Subject: [PATCH 05/14] Add tests --- test/PSCredentialInfo.Tests.ps1 | 34 +++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/test/PSCredentialInfo.Tests.ps1 b/test/PSCredentialInfo.Tests.ps1 index a197e0de8..35688d387 100644 --- a/test/PSCredentialInfo.Tests.ps1 +++ b/test/PSCredentialInfo.Tests.ps1 @@ -63,7 +63,7 @@ Describe "Create PSCredentialInfo from a PSObject" -tags 'CI' { $credentialInfo.SecretName | Should -Be "testsecret" } - It "Creates PSCredentialInfo successfully from PSObject with VaultName, SecretName and Credential" { + It "Creates PSCredentialInfo successfully from PSObject with VaultName, SecretName and PSCredential Credential" { $credential = New-Object System.Management.Automation.PSCredential ("username", (ConvertTo-SecureString "password" -AsPlainText -Force)) $properties = [PSCustomObject]@{ VaultName = "testvault" @@ -77,6 +77,36 @@ Describe "Create PSCredentialInfo from a PSObject" -tags 'CI' { $credentialInfo.SecretName | Should -Be "testsecret" $credentialInfo.Credential.UserName | Should -Be "username" $credentialInfo.Credential.GetNetworkCredential().Password | Should -Be "password" - + } + + It "Creates PSCredentialInfo successfully from PSObject with VaultName, SecretName and string Credential" { + $properties = [PSCustomObject]@{ + VaultName = "testvault" + SecretName = "testsecret" + Credential = "password" + } + + $credentialInfo = [Microsoft.PowerShell.PowerShellGet.UtilClasses.PSCredentialInfo] $properties + + $credentialInfo.VaultName | Should -Be "testvault" + $credentialInfo.SecretName | Should -Be "testsecret" + $credentialInfo.Credential.UserName | Should -Be "username" + $credentialInfo.Credential.GetNetworkCredential().Password | Should -Be "password" + } + + It "Creates PSCredentialInfo successfully from PSObject with VaultName, SecretName and SecureString Credential" { + $secureString = ConvertTo-SecureString "password" -AsPlainText -Force + $properties = [PSCustomObject]@{ + VaultName = "testvault" + SecretName = "testsecret" + Credential = $secureString + } + + $credentialInfo = [Microsoft.PowerShell.PowerShellGet.UtilClasses.PSCredentialInfo] $properties + + $credentialInfo.VaultName | Should -Be "testvault" + $credentialInfo.SecretName | Should -Be "testsecret" + $credentialInfo.Credential.UserName | Should -Be "username" + $credentialInfo.Credential.GetNetworkCredential().Password | Should -Be "password" } } From 1fda40a46d615b03ff9e483ad4fd17975a0b0b00 Mon Sep 17 00:00:00 2001 From: Amber Erickson Date: Tue, 16 Aug 2022 14:32:10 -0700 Subject: [PATCH 06/14] Fix bugs, update tests --- src/code/PSCredentialInfo.cs | 15 ++++++++++++++- test/PSCredentialInfo.Tests.ps1 | 4 +--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/code/PSCredentialInfo.cs b/src/code/PSCredentialInfo.cs index 95036b9e3..5363f3e7a 100644 --- a/src/code/PSCredentialInfo.cs +++ b/src/code/PSCredentialInfo.cs @@ -88,7 +88,20 @@ public PSCredentialInfo(PSObject psObject) VaultName = (string) psObject.Properties[PSCredentialInfo.VaultNameAttribute]?.Value; SecretName = (string) psObject.Properties[PSCredentialInfo.SecretNameAttribute]?.Value; - Credential = (PSCredential) psObject.Properties[PSCredentialInfo.CredentialAttribute]?.Value; + + var credentialAttr = psObject.Properties[PSCredentialInfo.CredentialAttribute]?.Value; + if (credentialAttr is String) + { + Credential = new PSCredential("PSGetUser", new NetworkCredential("", (String) credentialAttr).SecurePassword); + } + else if ((credentialAttr as PSObject).BaseObject is SecureString) + { + Credential = new PSCredential("PSGetUser", (credentialAttr as PSObject).BaseObject as SecureString); + } + else if (credentialAttr is PSCredential) + { + Credential = (PSCredential)credentialAttr; + } } #endregion diff --git a/test/PSCredentialInfo.Tests.ps1 b/test/PSCredentialInfo.Tests.ps1 index 35688d387..5ae827ddb 100644 --- a/test/PSCredentialInfo.Tests.ps1 +++ b/test/PSCredentialInfo.Tests.ps1 @@ -78,7 +78,7 @@ Describe "Create PSCredentialInfo from a PSObject" -tags 'CI' { $credentialInfo.Credential.UserName | Should -Be "username" $credentialInfo.Credential.GetNetworkCredential().Password | Should -Be "password" } - + It "Creates PSCredentialInfo successfully from PSObject with VaultName, SecretName and string Credential" { $properties = [PSCustomObject]@{ VaultName = "testvault" @@ -90,7 +90,6 @@ Describe "Create PSCredentialInfo from a PSObject" -tags 'CI' { $credentialInfo.VaultName | Should -Be "testvault" $credentialInfo.SecretName | Should -Be "testsecret" - $credentialInfo.Credential.UserName | Should -Be "username" $credentialInfo.Credential.GetNetworkCredential().Password | Should -Be "password" } @@ -106,7 +105,6 @@ Describe "Create PSCredentialInfo from a PSObject" -tags 'CI' { $credentialInfo.VaultName | Should -Be "testvault" $credentialInfo.SecretName | Should -Be "testsecret" - $credentialInfo.Credential.UserName | Should -Be "username" $credentialInfo.Credential.GetNetworkCredential().Password | Should -Be "password" } } From d942e6510fa425ea65c2a19aed7965ae6eebe479 Mon Sep 17 00:00:00 2001 From: Amber Erickson Date: Tue, 16 Aug 2022 14:44:43 -0700 Subject: [PATCH 07/14] Add null check --- src/code/PSCredentialInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/code/PSCredentialInfo.cs b/src/code/PSCredentialInfo.cs index 5363f3e7a..89ff16cff 100644 --- a/src/code/PSCredentialInfo.cs +++ b/src/code/PSCredentialInfo.cs @@ -94,7 +94,7 @@ public PSCredentialInfo(PSObject psObject) { Credential = new PSCredential("PSGetUser", new NetworkCredential("", (String) credentialAttr).SecurePassword); } - else if ((credentialAttr as PSObject).BaseObject is SecureString) + else if ((credentialAttr as PSObject)?.BaseObject is SecureString) { Credential = new PSCredential("PSGetUser", (credentialAttr as PSObject).BaseObject as SecureString); } From c433ba6ae8ef789587339844e4902f04ce33f53a Mon Sep 17 00:00:00 2001 From: Amber Erickson Date: Tue, 16 Aug 2022 16:40:05 -0700 Subject: [PATCH 08/14] Remove unneeded constructors --- src/code/PSCredentialInfo.cs | 47 ++---------------------------------- 1 file changed, 2 insertions(+), 45 deletions(-) diff --git a/src/code/PSCredentialInfo.cs b/src/code/PSCredentialInfo.cs index 89ff16cff..6fb84baa2 100644 --- a/src/code/PSCredentialInfo.cs +++ b/src/code/PSCredentialInfo.cs @@ -15,64 +15,21 @@ public sealed class PSCredentialInfo { #region Constructor - /// - /// Initializes a new instance of the PSCredentialInfo class with - /// vaultName and secretName of type string - /// - /// - /// - public PSCredentialInfo(string vaultName, string secretName) - { - VaultName = vaultName; - SecretName = secretName; - Credential = null; - } - /// /// Initializes a new instance of the PSCredentialInfo class with /// vaultName and secretName of type string, and - /// credential of type PSCredential. + /// (optionally) credential of type PSCredential. /// /// /// /// - public PSCredentialInfo(string vaultName, string secretName, PSCredential credential) + public PSCredentialInfo(string vaultName, string secretName, PSCredential credential = null) { VaultName = vaultName; SecretName = secretName; Credential = credential; } - /// - /// Initializes a new instance of the PSCredentialInfo class with - /// vaultName and secretName of type string, and - /// credential of type String. - /// - /// - /// - /// - public PSCredentialInfo(string vaultName, string secretName, string credential) - { - VaultName = vaultName; - SecretName = secretName; - Credential = new PSCredential("PSGetUser", new NetworkCredential("", credential).SecurePassword); - } - - /// - /// Initializes a new instance of the PSCredentialInfo class with - /// vaultName and secretName of type string, and - /// credential of type SecureString. - /// - /// - /// - /// - public PSCredentialInfo(string vaultName, string secretName, SecureString credential) - { - VaultName = vaultName; - SecretName = secretName; - Credential = new PSCredential("PSGetUser", credential); - } - /// /// Initializes a new instance of the PSCredentialInfo class with /// vaultName and secretName of type string, and From cd1da1b2fb2d030fa7eb7df84b20a05ed3af204b Mon Sep 17 00:00:00 2001 From: alerickson <25858831+alerickson@users.noreply.github.com> Date: Wed, 17 Aug 2022 16:34:46 -0700 Subject: [PATCH 09/14] Update src/code/PSCredentialInfo.cs Co-authored-by: Paul Higinbotham --- src/code/PSCredentialInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/code/PSCredentialInfo.cs b/src/code/PSCredentialInfo.cs index 6fb84baa2..35cfbd8d4 100644 --- a/src/code/PSCredentialInfo.cs +++ b/src/code/PSCredentialInfo.cs @@ -47,7 +47,7 @@ public PSCredentialInfo(PSObject psObject) SecretName = (string) psObject.Properties[PSCredentialInfo.SecretNameAttribute]?.Value; var credentialAttr = psObject.Properties[PSCredentialInfo.CredentialAttribute]?.Value; - if (credentialAttr is String) + if (credentialAttr is string credStr) { Credential = new PSCredential("PSGetUser", new NetworkCredential("", (String) credentialAttr).SecurePassword); } From 911cd15a3da016c71c01c84eb069806d90097e19 Mon Sep 17 00:00:00 2001 From: alerickson <25858831+alerickson@users.noreply.github.com> Date: Wed, 17 Aug 2022 16:35:41 -0700 Subject: [PATCH 10/14] Update src/code/PSCredentialInfo.cs Co-authored-by: Paul Higinbotham --- src/code/PSCredentialInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/code/PSCredentialInfo.cs b/src/code/PSCredentialInfo.cs index 35cfbd8d4..bc5a56153 100644 --- a/src/code/PSCredentialInfo.cs +++ b/src/code/PSCredentialInfo.cs @@ -49,7 +49,7 @@ public PSCredentialInfo(PSObject psObject) var credentialAttr = psObject.Properties[PSCredentialInfo.CredentialAttribute]?.Value; if (credentialAttr is string credStr) { - Credential = new PSCredential("PSGetUser", new NetworkCredential("", (String) credentialAttr).SecurePassword); + Credential = new PSCredential("PSGetUser", new NetworkCredential("", credStr).SecurePassword); } else if ((credentialAttr as PSObject)?.BaseObject is SecureString) { From b209fbae339e37247ce54bd6ea6d31d7a5ce0747 Mon Sep 17 00:00:00 2001 From: alerickson <25858831+alerickson@users.noreply.github.com> Date: Wed, 17 Aug 2022 16:35:46 -0700 Subject: [PATCH 11/14] Update src/code/PSCredentialInfo.cs Co-authored-by: Paul Higinbotham --- src/code/PSCredentialInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/code/PSCredentialInfo.cs b/src/code/PSCredentialInfo.cs index bc5a56153..d82faa995 100644 --- a/src/code/PSCredentialInfo.cs +++ b/src/code/PSCredentialInfo.cs @@ -51,7 +51,7 @@ public PSCredentialInfo(PSObject psObject) { Credential = new PSCredential("PSGetUser", new NetworkCredential("", credStr).SecurePassword); } - else if ((credentialAttr as PSObject)?.BaseObject is SecureString) + else if ((credentialAttr as PSObject)?.BaseObject is SecureString credSS) { Credential = new PSCredential("PSGetUser", (credentialAttr as PSObject).BaseObject as SecureString); } From b43bdb1f5d2fa75c062185574d6145024ce565d6 Mon Sep 17 00:00:00 2001 From: alerickson <25858831+alerickson@users.noreply.github.com> Date: Wed, 17 Aug 2022 16:35:52 -0700 Subject: [PATCH 12/14] Update src/code/PSCredentialInfo.cs Co-authored-by: Paul Higinbotham --- src/code/PSCredentialInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/code/PSCredentialInfo.cs b/src/code/PSCredentialInfo.cs index d82faa995..9361ff176 100644 --- a/src/code/PSCredentialInfo.cs +++ b/src/code/PSCredentialInfo.cs @@ -53,7 +53,7 @@ public PSCredentialInfo(PSObject psObject) } else if ((credentialAttr as PSObject)?.BaseObject is SecureString credSS) { - Credential = new PSCredential("PSGetUser", (credentialAttr as PSObject).BaseObject as SecureString); + Credential = new PSCredential("PSGetUser", credSS); } else if (credentialAttr is PSCredential) { From 1e05bb68146f1219c871084ce95701cbfea90ab1 Mon Sep 17 00:00:00 2001 From: alerickson <25858831+alerickson@users.noreply.github.com> Date: Wed, 17 Aug 2022 16:35:58 -0700 Subject: [PATCH 13/14] Update src/code/PSCredentialInfo.cs Co-authored-by: Paul Higinbotham --- src/code/PSCredentialInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/code/PSCredentialInfo.cs b/src/code/PSCredentialInfo.cs index 9361ff176..787e8d434 100644 --- a/src/code/PSCredentialInfo.cs +++ b/src/code/PSCredentialInfo.cs @@ -55,7 +55,7 @@ public PSCredentialInfo(PSObject psObject) { Credential = new PSCredential("PSGetUser", credSS); } - else if (credentialAttr is PSCredential) + else if (credentialAttr is PSCredential psCred) { Credential = (PSCredential)credentialAttr; } From 7e6a6e0aefe2ce8478ad80d8d122913da4166a91 Mon Sep 17 00:00:00 2001 From: alerickson <25858831+alerickson@users.noreply.github.com> Date: Wed, 17 Aug 2022 16:36:04 -0700 Subject: [PATCH 14/14] Update src/code/PSCredentialInfo.cs Co-authored-by: Paul Higinbotham --- src/code/PSCredentialInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/code/PSCredentialInfo.cs b/src/code/PSCredentialInfo.cs index 787e8d434..e6155a3fe 100644 --- a/src/code/PSCredentialInfo.cs +++ b/src/code/PSCredentialInfo.cs @@ -57,7 +57,7 @@ public PSCredentialInfo(PSObject psObject) } else if (credentialAttr is PSCredential psCred) { - Credential = (PSCredential)credentialAttr; + Credential = psCred; } }