NN.Zisson.psm1

#Region './Private/Get-ZIAccessToken.ps1' 0
function Get-ZiAccessToken {
    param (
        [string]$accessTokenPath = "$env:USERPROFILE\.creds\Zisson\zissonAccessToken.xml"
    )

    if (!(Test-Path $accessTokenPath)) {
        New-ZiAccessToken
    }
    
    Import-Clixml $accessTokenPath | ConvertFrom-SecureString -AsPlainText
}
#EndRegion './Private/Get-ZIAccessToken.ps1' 12
#Region './Private/Get-ZiEndpoint.ps1' 0
function Get-ZiEndpoint {
    [CmdletBinding()]
    param (
        [string]$EndpointPath = "$env:USERPROFILE\.creds\Zisson\zissonEndpoint.xml"
    )

    process {
        if (!(Test-Path $EndpointPath)) {
            New-ZiEndpoint
        }

        Import-Clixml $EndpointPath
    }
}
#EndRegion './Private/Get-ZiEndpoint.ps1' 15
#Region './Public/Get-ZIQueueCalls.ps1' 0
function Get-ZIQueueCalls {
    param (
        [Parameter(Mandatory)][datetime]$startDate,
        [Parameter(Mandatory)][datetime]$endDate,
        [int]$queueList
    )

    $splat = @{
        "Method" = "GET"
        "Uri" = "$(Get-ZiEndpoint)/api/simple/QueueCallsAll"
        "Headers" = @{
            "Authorization" = "Basic $(Get-ZiAccessToken)"
        }
        "Body" = @{
            "start_date" = $startDate
            "end_date"  = $endDate
            "queue_list" = $queueList
        }
    }
    Invoke-RestMethod @splat
}
#EndRegion './Public/Get-ZIQueueCalls.ps1' 22
#Region './Public/Get-ZIQueueChats.ps1' 0
function Get-ZIQueueChats {
    param (
        [Parameter(Mandatory)][datetime]$startDate,
        [Parameter(Mandatory)][datetime]$endDate
    )

    $splat = @{
        "Method" = "GET"
        "Uri" = "$(Get-ZiEndpoint)/api/simple/QueueChats"
        "Headers" = @{
            "Authorization" = "Basic $(Get-ZiAccessToken)"
        }
        "Body" = @{
            "start_date" = $startDate
            "end_date"  = $endDate
        }
    }
    Invoke-RestMethod @splat
}
#EndRegion './Public/Get-ZIQueueChats.ps1' 20
#Region './Public/Get-ZIQueueStatus.ps1' 0
function Get-ZIQueueStatus {
    param (
        [string]$queueName,
        [string]$queueType
    )

    $splat = @{
        "Method" = "GET"
        "Uri" = "$(Get-ZiEndpoint)/api/simple/QueueStatus"
        "Headers" = @{
            "Authorization" = "Basic $(Get-ZiAccessToken)"
        }
        "Body" = @{
            "queue_name" = $queueName
            "queue_type"  = $queueType
        }
    }
    Invoke-RestMethod @splat
}
#EndRegion './Public/Get-ZIQueueStatus.ps1' 20
#Region './Public/New-ZiAccessToken.ps1' 0
function New-ZIAccessToken {
    param (
        [string]$accessTokenPath = "$env:USERPROFILE\.creds\Zisson\zissonAccessToken.xml"
    )

    $username = Read-Host "Enter API username"
    $passwd = Read-Host -AsSecureString "Enter API password"

    $accessTokenDir = $accessTokenPath.Substring(0, $accessTokenPath.lastIndexOf('\'))
    if (!(Test-Path $accessTokenDir)) {
        #Create parent folders of the access token file
        $null = New-Item -ItemType Directory $accessTokenDir
    }
    
    #Encode credentials to Base64
    $text = "$($username):$($passwd | ConvertFrom-SecureString -AsPlainText)"
    $bytes = [Text.Encoding]::UTF8.GetBytes($text)
    $accessToken = [Convert]::ToBase64String($bytes)

    #Create access token file
    $accessToken | ConvertTo-SecureString -AsPlainText | Export-Clixml $accessTokenPath
}
#EndRegion './Public/New-ZiAccessToken.ps1' 23
#Region './Public/New-ZiEndpoint.ps1' 0
function New-ZiEndpoint {
    [CmdletBinding()]
    param (
        [string]$EndpointPath = "$env:USERPROFILE\.creds\Zisson\zissonEndpoint.xml"
    )

    process {
        $DomainSuffix = Read-Host "Enter your Zisson domain suffix (no/com)"
        switch ($DomainSuffix) {
            no {
                $Endpoint = "https://api.zisson.no"
            }
            com {
                $Endpoint = "https://api.zisson.com"
            }
            Default {
                Write-Error "Domain suffix was set to `"$DomainSuffix`". Please enter either `"no`" or `"com`"" -ErrorAction Stop
            }
        }

        #Create parent folders of the access token file
        $EndpointDir = $EndpointPath.Substring(0, $EndpointPath.lastIndexOf('\'))
        if (!(Test-Path $EndpointDir)) {
            $null = New-Item -ItemType Directory $EndpointDir
        }

        $Endpoint | Export-Clixml $EndpointPath
    }
}
#EndRegion './Public/New-ZiEndpoint.ps1' 30
#Region './Public/Send-ZISMS.ps1' 0
function Send-ZISMS {
    param (
        [Parameter(Mandatory)][string]$message,
        [Parameter(Mandatory)][string]$recipients,
        [Parameter(Mandatory)][string]$senderNumber,
        [Parameter(Mandatory)][string]$senderName
    )

    $splat = @{
        "Method" = "POST"
        "Uri" = "$(Get-ZiEndpoint)/api/simple/SendSms"
        "Headers" = @{
            "Authorization" = "Basic $(Get-ZiAccessToken)"
        }
        "Body" = @{
            "sender_number" = $senderNumber
            "sender_name" = $senderName
            "recipients" = $recipients
            "msg" = $message
        }
    }
    Invoke-RestMethod @splat
}
#EndRegion './Public/Send-ZISMS.ps1' 24