DSCResources/Grani_CredentialManager/Grani_CredentialManagerHelper.psm1

#region Initialize

function Initialize {
    # Credential Manager C# on the fly compile to avoid dll lock.
    # Import Class as [GraniResource.CredentialManager]
    $code = Get-Content -Path (Join-Path -Path $PSScriptRoot -ChildPath "CredentialManager.cs") -Raw
    $referenceAssemblies = @("System", "System.Linq", "System.ComponentModel", "System.Management.Automation", "System.Runtime.InteropServices")
    Add-Type -TypeDefinition $code -ReferencedAssemblies $referenceAssemblies -ErrorAction SilentlyContinue;
}

. Initialize;

#endregion

#region Message Definition

Data VerboseMessages {
    ConvertFrom-StringData -StringData @"
"@

}

Data DebugMessages {
    ConvertFrom-StringData -StringData @"
"@

}

Data ErrorMessages {
    ConvertFrom-StringData -StringData @"
"@

}

#endregion

#region Wrapper

function ListCredential {
    [OutputType([PSCredential])]
    [CmdletBinding()]
    param
    ()
    
    return [GraniResource.CredentialManager]::List();
}

function RemoveTarget {
    [OutputType([void])]
    [CmdletBinding()]
    param
    (
        [Parameter(mandatory = $true, position = 0)]
        [ValidateNotNullOrEmpty()]
        [string]$Target,

        [Parameter(mandatory = $false, position = 1)]
        [ValidateNotNullOrEmpty()]
        [GraniResource.CredType]$Type = [GraniResource.CredType]::Generic
    )
 
    [GraniResource.CredentialManager]::Remove($Target, $Type);
}

function TestTarget {
    [OutputType([bool])]
    [CmdletBinding()]
    param
    (
        [Parameter(mandatory = $true, position = 0)]
        [ValidateNotNullOrEmpty()]
        [string]$Target,

        [Parameter(mandatory = $false, position = 1)]
        [ValidateNotNullOrEmpty()]
        [GraniResource.CredType]$Type = [GraniResource.CredType]::Generic
    )
 
    [GraniResource.CredentialManager]::Exists($Target, $Type);
}

function GetCredential {
    [OutputType([PSCredential])]
    [CmdletBinding()]
    param
    (
        [Parameter(mandatory = $true, position = 0)]
        [ValidateNotNullOrEmpty()]
        [string]$Target,

        [Parameter(mandatory = $false, position = 1)]
        [ValidateNotNullOrEmpty()]
        [GraniResource.CredType]$Type = [GraniResource.CredType]::Generic
    )
    
    return [GraniResource.CredentialManager]::Read($Target, $Type, "");
}

function SetCredential {
    [OutputType([void])]
    [CmdletBinding()]
    param
    (
        [Parameter(mandatory = $true, position = 0)]
        [ValidateNotNullOrEmpty()]
        [string]$Target,

        [Parameter(mandatory = $true, position = 1)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential,

        [Parameter(mandatory = $false, position = 2)]
        [ValidateNotNullOrEmpty()]
        [GraniResource.CredType]$Type = [GraniResource.CredType]::Generic
    )
    
    [GraniResource.CredentialManager]::Write($Target, $Credential, $Type)
}

#endregion

#region Helper

function IsCredentialEmpty {
    [OutputType([bool])]
    [CmdletBinding()]
    param
    (
        [Parameter(mandatory = $true, position = 1)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential
    )

    return ($null -eq $Credential) -or ([PSCredential]::Empty -eq $Credential)
}

function IsCredentialMatch {
    [OutputType([bool])]
    [CmdletBinding()]
    param
    (
        [Parameter(mandatory = $true, position = 0)]
        [ValidateNotNullOrEmpty()]
        [string]$Target,

        [Parameter(mandatory = $true, position = 1)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential
    )

    $current = GetCredential -Target $Target;
    $isUserNameMatch = $current.UserName -eq $Credential.UserName;
    $isPassMatch = $current.GetNetworkCredential().Password -eq $Credential.GetNetworkCredential().Password;
    return $isUserNameMatch -and $isPassMatch;
}

#endregion

Export-ModuleMember -Function *