Skip to content

Commit b098176

Browse files
🩹 [Patch]: Integrate Store module (#93)
## Description - Integrate [`Store`](https://psmodule.io/Store) module for storing variables and secrets. With this release you can change secret vault by running ```powershell Import-Module GitHub Set-GitHubConfig -SecretVaultName 'MyKeyVault' -SecretVaultType 'Az.KeyVault' Connect-GitHubAccount ``` ## Type of change <!-- Use the check-boxes [x] on the options that are relevant. --> - [ ] 📖 [Docs] - [ ] 🪲 [Fix] - [x] 🩹 [Patch] - [ ] ⚠️ [Security fix] - [ ] 🚀 [Feature] - [ ] 🌟 [Breaking change] ## Checklist <!-- Use the check-boxes [x] on the options that are relevant. --> - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas
1 parent 7b954c9 commit b098176

File tree

6 files changed

+51
-205
lines changed

6 files changed

+51
-205
lines changed

src/GitHub/GitHub.ps1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
$scriptFilePath = $MyInvocation.MyCommand.Path
22

3-
Write-Verbose "[$scriptFilePath] - Initializing GitHub module..."
3+
Write-Verbose "[$scriptFilePath] - Initializing GitHub PowerShell module..."
44

5-
Initialize-SecretVault -Name $script:SecretVault.Name -Type $script:SecretVault.Type
5+
Initialize-Store -Name 'GitHubPowerShell' -SecretVaultName $script:Config.Name -SecretVaultType $script:Config.Type
66

77
# Autologon if a token is present in environment variables
88
$envVar = Get-ChildItem -Path 'Env:' | Where-Object Name -In 'GH_TOKEN', 'GITHUB_TOKEN' | Select-Object -First 1

src/GitHub/data/Config.psd1

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
@{
2+
Name = 'SecretStore' # $script:Config.Name
3+
Type = 'Microsoft.PowerShell.SecretStore' # $script:Config.Type
4+
Prefix = 'GHPS' # $script:Config.Prefix
5+
}

src/GitHub/data/SecretVault.psd1

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/GitHub/private/Config/Initialize-SecretVault.ps1

Lines changed: 0 additions & 74 deletions
This file was deleted.
Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
function Get-GitHubConfig {
1+
#Requires -Modules Store
2+
3+
function Get-GitHubConfig {
24
<#
35
.SYNOPSIS
46
Get configuration value.
@@ -30,38 +32,22 @@
3032
'RefreshToken',
3133
'RefreshTokenExpirationDate',
3234
'Repo',
35+
'SecretVaultName',
36+
'SecretVaultType',
3337
'Scope',
3438
'UserName'
3539
)]
3640
[string] $Name
3741
)
3842

39-
$prefix = $script:SecretVault.Prefix
43+
$prefix = $script:Config.Prefix
4044

41-
switch ($Name) {
42-
'AccessToken' {
43-
Get-Secret -Name "$prefix`AccessToken"
44-
}
45-
'RefreshToken' {
46-
Get-Secret -Name "$prefix`RefreshToken"
45+
switch -Regex ($Name) {
46+
'^AccessToken$|^RefreshToken$' {
47+
Get-StoreConfig -Name "$prefix$Name"
4748
}
4849
default {
49-
$RefreshTokenSecretInfo = Get-SecretInfo -Name "$prefix`RefreshToken"
50-
if ($null -ne $RefreshTokenSecretInfo.Metadata) {
51-
$RefreshTokenMetadata = $RefreshTokenSecretInfo.Metadata | ConvertFrom-HashTable | ConvertTo-HashTable
52-
}
53-
54-
$AccessTokenSecretInfo = Get-SecretInfo -Name "$prefix`AccessToken"
55-
if ($null -ne $AccessTokenSecretInfo.Metadata) {
56-
$AccessTokenMetadata = $AccessTokenSecretInfo.Metadata | ConvertFrom-HashTable | ConvertTo-HashTable
57-
}
58-
$metadata = Join-Object -Main $RefreshTokenMetadata -Overrides $AccessTokenMetadata -AsHashtable
59-
60-
if ($Name) {
61-
$metadata.$Name
62-
} else {
63-
$metadata.GetEnumerator() | Sort-Object -Property Name
64-
}
50+
Get-StoreConfig -Name $Name
6551
}
6652
}
6753
}
Lines changed: 34 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
function Set-GitHubConfig {
1+
#Requires -Modules Store
2+
3+
function Set-GitHubConfig {
24
<#
35
.SYNOPSIS
46
Set the GitHub configuration.
@@ -63,6 +65,14 @@
6365
[Parameter()]
6466
[string] $Repo,
6567

68+
# Set the secret vault name.
69+
[Parameter()]
70+
[string] $SecretVaultName,
71+
72+
# Set the secret vault type.
73+
[Parameter()]
74+
[string] $SecretVaultType,
75+
6676
# Set the scope.
6777
[Parameter()]
6878
[string] $Scope,
@@ -72,108 +82,32 @@
7282
[string] $UserName
7383
)
7484

75-
$prefix = $script:SecretVault.Prefix
76-
77-
#region AccessToken
78-
$secretName = "$prefix`AccessToken"
79-
$removeKeys = 'AccessToken', 'RefreshToken', 'RefreshTokenExpirationDate'
80-
$keepTypes = 'String', 'Int', 'DateTime'
81-
82-
# Get existing metadata if it exists
83-
$newSecretMetadata = @{}
84-
if (Get-SecretInfo -Name $secretName) {
85-
$secretGetInfoParam = @{
86-
Name = $secretName
87-
Vault = $script:SecretVault.Name
88-
}
89-
$secretInfo = Get-SecretInfo @secretGetInfoParam
90-
Write-Verbose "$secretName - secretInfo : $($secretInfo | Out-String)"
91-
$secretMetadata = $secretInfo.Metadata | ConvertFrom-HashTable | ConvertTo-HashTable
92-
$newSecretMetadata = Join-Object -Main $newSecretMetadata -Overrides $secretMetadata -AsHashtable
93-
}
94-
95-
# Get metadata updates from parameters and clean up unwanted data
96-
$updateSecretMetadata = $PSBoundParameters | ConvertFrom-HashTable | ConvertTo-HashTable
97-
Write-Verbose "updateSecretMetadata : $($updateSecretMetadata | Out-String)"
98-
Write-Verbose "updateSecretMetadataType : $($updateSecretMetadata.GetType())"
99-
Remove-HashtableEntry -Hashtable $updateSecretMetadata -KeepTypes $keepTypes -RemoveNames $removeKeys
100-
Write-Verbose "updateSecretMetadata : $($updateSecretMetadata | Out-String)"
101-
102-
$newSecretMetadata = Join-Object -Main $newSecretMetadata -Overrides $updateSecretMetadata -AsHashtable
103-
Write-Verbose "newSecretMetadata : $($newSecretMetadata | Out-String)"
104-
Write-Verbose "newSecretMetadataType : $($newSecretMetadata.GetType())"
105-
106-
if ($AccessToken) {
107-
$accessTokenSetParam = @{
108-
Name = $secretName
109-
Vault = $script:SecretVault.Name
110-
SecureStringSecret = $AccessToken
111-
}
112-
if ($PSCmdlet.ShouldProcess("secret [$secretName] in secret vault [$($script:SecretVault.Name)]", 'Set')) {
113-
Set-Secret @accessTokenSetParam
114-
}
115-
}
116-
117-
if (Get-SecretInfo -Name $secretName) {
118-
$secretSetInfoParam = @{
119-
Name = $secretName
120-
Vault = $script:SecretVault.Name
121-
Metadata = $newSecretMetadata
122-
}
123-
if ($PSCmdlet.ShouldProcess("secret [$secretName] in secret vault [$($script:SecretVault.Name)]", 'Set')) {
124-
Set-SecretInfo @secretSetInfoParam
125-
}
126-
}
127-
#endregion AccessToken
128-
129-
#region RefreshToken
130-
$secretName = "$prefix`RefreshToken"
131-
$removeKeys = 'AccessToken', 'RefreshToken', 'AccessTokenExpirationDate'
132-
133-
# Get existing metadata if it exists
134-
$newSecretMetadata = @{}
135-
if (Get-SecretInfo -Name $secretName) {
136-
$secretGetInfoParam = @{
137-
Name = $secretName
138-
Vault = $script:SecretVault.Name
139-
}
140-
$secretInfo = Get-SecretInfo @secretGetInfoParam
141-
Write-Verbose "$secretName - secretInfo : $($secretInfo | Out-String)"
142-
$secretMetadata = $secretInfo.Metadata | ConvertFrom-HashTable | ConvertTo-HashTable
143-
$newSecretMetadata = Join-Object -Main $newSecretMetadata -Overrides $secretMetadata -AsHashtable
85+
$prefix = $script:Config.Prefix
86+
87+
$Settings = @{
88+
"$prefix`AccessToken" = $AccessToken
89+
AccessTokenExpirationDate = $AccessTokenExpirationDate
90+
AccessTokenType = $AccessTokenType
91+
ApiBaseUri = $ApiBaseUri
92+
ApiVersion = $ApiVersion
93+
AuthType = $AuthType
94+
DeviceFlowType = $DeviceFlowType
95+
Owner = $Owner
96+
"$prefix`RefreshToken" = $RefreshToken
97+
RefreshTokenExpirationDate = $RefreshTokenExpirationDate
98+
Repo = $Repo
99+
SecretVaultName = $SecretVaultName
100+
SecretVaultType = $SecretVaultType
101+
Scope = $Scope
102+
UserName = $UserName
144103
}
145104

146-
# Get metadata updates from parameters and clean up unwanted data
147-
$updateSecretMetadata = $PSBoundParameters | ConvertFrom-HashTable | ConvertTo-HashTable
148-
Write-Verbose "updateSecretMetadata : $($updateSecretMetadata | Out-String)"
149-
Write-Verbose "updateSecretMetadataType : $($updateSecretMetadata.GetType())"
150-
Remove-HashtableEntry -Hashtable $updateSecretMetadata -KeepTypes $keepTypes -RemoveNames $removeKeys
151-
Write-Verbose "updateSecretMetadata : $($updateSecretMetadata | Out-String)"
152-
153-
$newSecretMetadata = Join-Object -Main $newSecretMetadata -Overrides $updateSecretMetadata -AsHashtable
154-
Write-Verbose "newSecretMetadata : $($newSecretMetadata | Out-String)"
155-
Write-Verbose "newSecretMetadataType : $($newSecretMetadata.GetType())"
156-
157-
if ($RefreshToken) {
158-
$refreshTokenSetParam = @{
159-
Name = $secretName
160-
Vault = $script:SecretVault.Name
161-
SecureStringSecret = $RefreshToken
162-
}
163-
if ($PSCmdlet.ShouldProcess("secret [$secretName] in secret vault [$($script:SecretVault.Name)]", 'Set')) {
164-
Set-Secret @refreshTokenSetParam
165-
}
166-
}
105+
$Settings | Remove-HashtableEntry -NullOrEmptyValues
167106

168-
if (Get-SecretInfo -Name $secretName) {
169-
$secretSetInfoParam = @{
170-
Name = $secretName
171-
Vault = $script:SecretVault.Name
172-
Metadata = $newSecretMetadata
173-
}
174-
if ($PSCmdlet.ShouldProcess("secret [$secretName] in secret vault [$($script:SecretVault.Name)]", 'Set')) {
175-
Set-SecretInfo @secretSetInfoParam
107+
foreach ($key in $Settings.Keys) {
108+
if ($PSCmdlet.ShouldProcess("Setting $key", "Setting $key to $($Settings[$key])")) {
109+
Write-Verbose "Setting $key to $($Settings[$key])"
110+
Set-StoreConfig -Name $key -Value $Settings[$key]
176111
}
177112
}
178-
#endregion AccessToken
179113
}

0 commit comments

Comments
 (0)