DSCResources/EventStoreLogin/EventStoreLogin.psm1

function Test-EventStoreUserHasPassword{

    [OutputType('System.Boolean')]
    [Cmdletbinding()]
    Param(
        [String]    $url = "http://localhost:2113",
        [System.Management.Automation.PSCredential] $credential
    )

    Write-Verbose ":: Check if User: $user Has Password on URL:$url"

  # $credential = New-Object System.Management.Automation.PSCredential($user, $password)
    # $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$password)))

    $url = $url + '/users/' + $user
    Write-Verbose ":: Rest URL: $url"

    try {
        Write-Verbose ":: Try Invoke with Credentials $url"
        $response = Invoke-RestMethod  $url -Credential $credential -Method Get
        Write-Verbose ":: Response StatusCode: $response.StatusCode"
        Write-Verbose ":: Response: $response"
        Write-Verbose ":: Benutzer $user kann sich mit dem Kennwort anmelden"
        return $true # benutzer kann
    }
    catch {

        Write-Verbose ":: $_"
        if( $_.Exception.Response.StatusCode.Value__ -ne 401 )
        {
                Write-Verbose ":: Not a 401 Status - fehler"
                throw $_.Exception
        }

        if( $_.Exception.Response.StatusCode.Value__ -eq 401 )
        {
                Write-Verbose "::401 Status - Benutzer kann sich nicht mit dem Kennwort anmelden"
                return $false;
        }
    }

}

function Set-EventStoreUserPassword{

    [Cmdletbinding()]
    Param(
        [String]    $url = "http://localhost:2113",
        [System.Management.Automation.PSCredential] $user,
        [System.Management.Automation.PSCredential] $credential
    )

    Write-Verbose ":: Setting the Password for User: ($user.UserName) with Admin User: ($credential.UserName) on URL:$url"

    $url = -join ( $url , '/users/', $user.UserName , '/command/reset-password' )
    Write-Verbose ":: Rest URL: $url"

    $JSON = '{"newPassword":"' + $user.GetNetworkCredential().Password + '"}'

    Write-Verbose ":: JSON: $JSON"
    Write-Verbose ":: Invoking RestMethod"
    Invoke-RestMethod $url -Credential $credential -Method Post -Body $JSON -ContentType "application/json"

    Write-Verbose ":: Waiting 2 seconds"
    Start-Sleep -s 2
}


function Get-TargetResource
{
    [CmdletBinding()]
    [OutputType([System.Collections.Hashtable])]
    param
    (
        [Parameter(Mandatory = $true)] [String] $Url,
        [Parameter(Mandatory = $true)] [String] $User,
        [Parameter()] [String] $Password,
        [Parameter()] [String] $NewPassword,
        [Parameter()] [String] $AdminUser,
        [Parameter()] [String] $AdminPassword
    )


    Write-Verbose 'Start Get-TargetResource'
    Write-Verbose "Url: $Url"

     $returnValue = @{
        Url = $Url
    }

    $returnValue
}

function Set-TargetResource
{
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory = $true)] [String] $Url,
        [Parameter(Mandatory = $true)] [String] $User,
        [Parameter()] [String] $Password,
        [Parameter()] [String] $NewPassword,
        [Parameter()] [String] $AdminUser,
        [Parameter()] [String] $AdminPassword
    )
        $userSecPassword = ConvertTo-SecureString $Password -AsPlainText -Force
        $userCredential = New-Object System.Management.Automation.PSCredential($User, $userSecPassword)

        $adminSecPassword = ConvertTo-SecureString $AdminPassword -AsPlainText -Force
        $adminCredential = New-Object System.Management.Automation.PSCredential($AdminUser, $adminSecPassword)

<<<<<<< HEAD
    $userpwd = ConvertTo-SecureString $NewPassword -AsPlainText -Force
    $usercred = New-Object System.Management.Automation.PSCredential($User, $userpwd)

    $adminpwd = ConvertTo-SecureString $AdminPassword -AsPlainText -Force
    $admincred = New-Object System.Management.Automation.PSCredential($AdminUser, $adminpwd)

    Set-EventStoreUserPassword -url $Url -user $usercred -credential $admincred
    # Set-EventStoreUserPassword -url $Url -user $User -newpassword $NewPassword -adminuser $AdminUser -adminpassword $AdminPassword
=======
        Set-EventStoreUserPassword -credential $adminCredential -user $userCredential

     # Set-EventStoreUserPassword -url $Url -user $User -newpassword $NewPassword -adminuser $AdminUser -adminpassword $AdminPassword
>>>>>>> e9421b2e35ca352cf8f3fc5a2177e059e3ad8ab5
}

function Test-TargetResource
{
    [CmdletBinding()]
    [OutputType([System.Boolean])]
    param
    (
        [Parameter(Mandatory = $true)] [String] $Url,
        [Parameter(Mandatory = $true)] [String] $User,
        [Parameter()] [String] $Password,
        [Parameter()] [String] $NewPassword,
        [Parameter()] [String] $AdminUser,
        [Parameter()] [String] $AdminPassword
    )

<<<<<<< HEAD
    $pwd = ConvertTo-SecureString $NewPassword -AsPlainText -Force
    $cred = New-Object System.Management.Automation.PSCredential($User, $pwd)
    $ret = (Test-EventStoreUserHasPassword -url $Url -credential $cred)

    # $ret = (Test-EventStoreUserHasPassword -url $Url -user $User -password $NewPassword)
=======
    $userSecPassword = ConvertTo-SecureString $Password -AsPlainText -Force
    $userCredential = New-Object System.Management.Automation.PSCredential($User, $userSecPassword)

    $ret = (Test-EventStoreUserHasPassword -url $Url -credential $userCredential)
>>>>>>> e9421b2e35ca352cf8f3fc5a2177e059e3ad8ab5

    Write-Host "EventStoreUserHasPassword $url $ret"

    if ($ret -eq "False") {
        return $true;
    }

    return $false;
}

Export-ModuleMember -Function *-TargetResource