Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/GitHub/GitHub.ps1
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
$scriptFilePath = $MyInvocation.MyCommand.Path

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

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

# Autologon if a token is present in environment variables
$envVar = Get-ChildItem -Path 'Env:' | Where-Object Name -In 'GH_TOKEN', 'GITHUB_TOKEN' | Select-Object -First 1
Expand Down
5 changes: 5 additions & 0 deletions src/GitHub/data/Config.psd1
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
@{
Name = 'SecretStore' # $script:Config.Name
Type = 'Microsoft.PowerShell.SecretStore' # $script:Config.Type
Prefix = 'GHPS' # $script:Config.Prefix
}
5 changes: 0 additions & 5 deletions src/GitHub/data/SecretVault.psd1

This file was deleted.

74 changes: 0 additions & 74 deletions src/GitHub/private/Config/Initialize-SecretVault.ps1

This file was deleted.

34 changes: 10 additions & 24 deletions src/GitHub/public/Config/Get-GitHubConfig.ps1
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
function Get-GitHubConfig {
#Requires -Modules Store

function Get-GitHubConfig {
<#
.SYNOPSIS
Get configuration value.
Expand Down Expand Up @@ -30,38 +32,22 @@
'RefreshToken',
'RefreshTokenExpirationDate',
'Repo',
'SecretVaultName',
'SecretVaultType',
'Scope',
'UserName'
)]
[string] $Name
)

$prefix = $script:SecretVault.Prefix
$prefix = $script:Config.Prefix

switch ($Name) {
'AccessToken' {
Get-Secret -Name "$prefix`AccessToken"
}
'RefreshToken' {
Get-Secret -Name "$prefix`RefreshToken"
switch -Regex ($Name) {
'^AccessToken$|^RefreshToken$' {
Get-StoreConfig -Name "$prefix$Name"
}
default {
$RefreshTokenSecretInfo = Get-SecretInfo -Name "$prefix`RefreshToken"
if ($null -ne $RefreshTokenSecretInfo.Metadata) {
$RefreshTokenMetadata = $RefreshTokenSecretInfo.Metadata | ConvertFrom-HashTable | ConvertTo-HashTable
}

$AccessTokenSecretInfo = Get-SecretInfo -Name "$prefix`AccessToken"
if ($null -ne $AccessTokenSecretInfo.Metadata) {
$AccessTokenMetadata = $AccessTokenSecretInfo.Metadata | ConvertFrom-HashTable | ConvertTo-HashTable
}
$metadata = Join-Object -Main $RefreshTokenMetadata -Overrides $AccessTokenMetadata -AsHashtable

if ($Name) {
$metadata.$Name
} else {
$metadata.GetEnumerator() | Sort-Object -Property Name
}
Get-StoreConfig -Name $Name
}
}
}
134 changes: 34 additions & 100 deletions src/GitHub/public/Config/Set-GitHubConfig.ps1
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
function Set-GitHubConfig {
#Requires -Modules Store

function Set-GitHubConfig {
<#
.SYNOPSIS
Set the GitHub configuration.
Expand Down Expand Up @@ -63,6 +65,14 @@
[Parameter()]
[string] $Repo,

# Set the secret vault name.
[Parameter()]
[string] $SecretVaultName,

# Set the secret vault type.
[Parameter()]
[string] $SecretVaultType,

# Set the scope.
[Parameter()]
[string] $Scope,
Expand All @@ -72,108 +82,32 @@
[string] $UserName
)

$prefix = $script:SecretVault.Prefix

#region AccessToken
$secretName = "$prefix`AccessToken"
$removeKeys = 'AccessToken', 'RefreshToken', 'RefreshTokenExpirationDate'
$keepTypes = 'String', 'Int', 'DateTime'

# Get existing metadata if it exists
$newSecretMetadata = @{}
if (Get-SecretInfo -Name $secretName) {
$secretGetInfoParam = @{
Name = $secretName
Vault = $script:SecretVault.Name
}
$secretInfo = Get-SecretInfo @secretGetInfoParam
Write-Verbose "$secretName - secretInfo : $($secretInfo | Out-String)"
$secretMetadata = $secretInfo.Metadata | ConvertFrom-HashTable | ConvertTo-HashTable
$newSecretMetadata = Join-Object -Main $newSecretMetadata -Overrides $secretMetadata -AsHashtable
}

# Get metadata updates from parameters and clean up unwanted data
$updateSecretMetadata = $PSBoundParameters | ConvertFrom-HashTable | ConvertTo-HashTable
Write-Verbose "updateSecretMetadata : $($updateSecretMetadata | Out-String)"
Write-Verbose "updateSecretMetadataType : $($updateSecretMetadata.GetType())"
Remove-HashtableEntry -Hashtable $updateSecretMetadata -KeepTypes $keepTypes -RemoveNames $removeKeys
Write-Verbose "updateSecretMetadata : $($updateSecretMetadata | Out-String)"

$newSecretMetadata = Join-Object -Main $newSecretMetadata -Overrides $updateSecretMetadata -AsHashtable
Write-Verbose "newSecretMetadata : $($newSecretMetadata | Out-String)"
Write-Verbose "newSecretMetadataType : $($newSecretMetadata.GetType())"

if ($AccessToken) {
$accessTokenSetParam = @{
Name = $secretName
Vault = $script:SecretVault.Name
SecureStringSecret = $AccessToken
}
if ($PSCmdlet.ShouldProcess("secret [$secretName] in secret vault [$($script:SecretVault.Name)]", 'Set')) {
Set-Secret @accessTokenSetParam
}
}

if (Get-SecretInfo -Name $secretName) {
$secretSetInfoParam = @{
Name = $secretName
Vault = $script:SecretVault.Name
Metadata = $newSecretMetadata
}
if ($PSCmdlet.ShouldProcess("secret [$secretName] in secret vault [$($script:SecretVault.Name)]", 'Set')) {
Set-SecretInfo @secretSetInfoParam
}
}
#endregion AccessToken

#region RefreshToken
$secretName = "$prefix`RefreshToken"
$removeKeys = 'AccessToken', 'RefreshToken', 'AccessTokenExpirationDate'

# Get existing metadata if it exists
$newSecretMetadata = @{}
if (Get-SecretInfo -Name $secretName) {
$secretGetInfoParam = @{
Name = $secretName
Vault = $script:SecretVault.Name
}
$secretInfo = Get-SecretInfo @secretGetInfoParam
Write-Verbose "$secretName - secretInfo : $($secretInfo | Out-String)"
$secretMetadata = $secretInfo.Metadata | ConvertFrom-HashTable | ConvertTo-HashTable
$newSecretMetadata = Join-Object -Main $newSecretMetadata -Overrides $secretMetadata -AsHashtable
$prefix = $script:Config.Prefix

$Settings = @{
"$prefix`AccessToken" = $AccessToken
AccessTokenExpirationDate = $AccessTokenExpirationDate
AccessTokenType = $AccessTokenType
ApiBaseUri = $ApiBaseUri
ApiVersion = $ApiVersion
AuthType = $AuthType
DeviceFlowType = $DeviceFlowType
Owner = $Owner
"$prefix`RefreshToken" = $RefreshToken
RefreshTokenExpirationDate = $RefreshTokenExpirationDate
Repo = $Repo
SecretVaultName = $SecretVaultName
SecretVaultType = $SecretVaultType
Scope = $Scope
UserName = $UserName
}

# Get metadata updates from parameters and clean up unwanted data
$updateSecretMetadata = $PSBoundParameters | ConvertFrom-HashTable | ConvertTo-HashTable
Write-Verbose "updateSecretMetadata : $($updateSecretMetadata | Out-String)"
Write-Verbose "updateSecretMetadataType : $($updateSecretMetadata.GetType())"
Remove-HashtableEntry -Hashtable $updateSecretMetadata -KeepTypes $keepTypes -RemoveNames $removeKeys
Write-Verbose "updateSecretMetadata : $($updateSecretMetadata | Out-String)"

$newSecretMetadata = Join-Object -Main $newSecretMetadata -Overrides $updateSecretMetadata -AsHashtable
Write-Verbose "newSecretMetadata : $($newSecretMetadata | Out-String)"
Write-Verbose "newSecretMetadataType : $($newSecretMetadata.GetType())"

if ($RefreshToken) {
$refreshTokenSetParam = @{
Name = $secretName
Vault = $script:SecretVault.Name
SecureStringSecret = $RefreshToken
}
if ($PSCmdlet.ShouldProcess("secret [$secretName] in secret vault [$($script:SecretVault.Name)]", 'Set')) {
Set-Secret @refreshTokenSetParam
}
}
$Settings | Remove-HashtableEntry -NullOrEmptyValues

if (Get-SecretInfo -Name $secretName) {
$secretSetInfoParam = @{
Name = $secretName
Vault = $script:SecretVault.Name
Metadata = $newSecretMetadata
}
if ($PSCmdlet.ShouldProcess("secret [$secretName] in secret vault [$($script:SecretVault.Name)]", 'Set')) {
Set-SecretInfo @secretSetInfoParam
foreach ($key in $Settings.Keys) {
if ($PSCmdlet.ShouldProcess("Setting $key", "Setting $key to $($Settings[$key])")) {
Write-Verbose "Setting $key to $($Settings[$key])"
Set-StoreConfig -Name $key -Value $Settings[$key]
}
}
#endregion AccessToken
}