internal/functions/Remove-PasswordStateResource.ps1
<# .SYNOPSIS A function to simplify the deletion of password state resources via the rest API .DESCRIPTION A function to simplify the deletion of password state resources via the rest API. .EXAMPLE PS C:\> Remove-PasswordStateResource -uri "/api/lists?LISTID" Removes a password list on the password api. .PARAMETER URI The api resource to access such as /api/lists .PARAMETER Method Optional Parameter to override the method from Delete. .PARAMETER ContentType Optional Parameter to override the default content type from application/json. .PARAMETER Body The body to be submitted in the rest request it should be in JSON format. .PARAMETER ExtraParams Optional Parameter to allow extra parameters to be passed to invoke-restmethod. Should be passed as a hashtable. .OUTPUTS Will return the response from the rest API. .NOTES Daryl Newsholme 2018 #> function Remove-PasswordStateResource { [CmdletBinding(SupportsShouldProcess = $true)] param ( [string]$uri, [string]$method = "DELETE", [string]$body = $null, [string]$ContentType = "application/json", [hashtable]$extraparams = $null ) begin { # Force TLS 1.2 $SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 # Import the environment $passwordstateenvironment = $(Get-PasswordStateEnvironment) # If the apikey is windowsauth then rebuild the uri string to match the windows auth apis, otherwise just build the api headers. Switch ($passwordstateenvironment.AuthType) { WindowsIntegrated { $uri = $uri -Replace "^/api/", "/winapi/" } WindowsCustom { $uri = $uri -Replace "^/api/", "/winapi/" } APIKey { $headers = @{"APIKey" = "$($passwordstateenvironment.Apikey)" } } } } process { $params = @{ "UseBasicParsing" = $true "URI" = "$($passwordstateenvironment.baseuri)$uri" "Method" = $method.ToUpper() "ContentType" = $ContentType "Body" = [System.Text.Encoding]::UTF8.GetBytes($body) } if ($body) { Write-PSFMessage -Level Verbose -Message "Using body $($body)" } else { $params.Remove("Body") } if ($headers -and $null -ne $extraparams.Headers) { Write-Verbose "[$(Get-Date -format G)] Adding API Headers and extra param headers" $headers += $extraparams.headers $params += @{"headers" = $headers } $skipheaders = $true } if ($extraparams -and $null -eq $extraparams.Headers) { Write-Verbose "[$(Get-Date -format G)] Adding extra parameter $($extraparams.keys) $($extraparams.values)" $params += $extraparams } if ($headers -and $skipheaders -ne $true) { Write-Verbose "[$(Get-Date -format G)] Adding API Headers only" $params += @{"headers" = $headers } } if ($PSCmdlet.ShouldProcess("[$($params.Method)] uri:$($params.uri) Headers:$($headers) Body:$($params.body)")) { Switch ($passwordstateenvironment.AuthType) { APIKey { # Hit the API with the headers Write-Verbose "using uri $($params.uri)" $result = Invoke-RestMethod @params -TimeoutSec 60 } WindowsCustom { Write-Verbose "using uri $($params.uri)" $result = Invoke-RestMethod @params -Credential $passwordstateenvironment.apikey -TimeoutSec 60 } WindowsIntegrated { # Hit the api with windows auth Write-Verbose "using uri $($params.uri)" $result = Invoke-RestMethod @params -UseDefaultCredentials -TimeoutSec 60 } } } } end { [System.Net.ServicePointManager]::SecurityProtocol = $SecurityProtocol return $result } } |