Public/Authentication/Connect-WebrootUnity.ps1

Function Connect-WebrootUnity {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, ParameterSetName = 'New')]
        [string]$client_id,
        [Parameter(Mandatory = $true, ParameterSetName = 'New')]
        [string]$client_secret,
        [Parameter(Mandatory = $true, ParameterSetName = 'New')]
        [pscredential]$credentials,
        [Parameter(ParameterSetName = 'New')]
        [Parameter(ParameterSetName = 'ReNew')]
        [string]$scope = '*',
        [Parameter(ParameterSetName = 'New')]
        [Parameter(ParameterSetName = 'ReNew')]
        [Switch]$force,
        $RenewBuffer = 10
    )

    Write-Verbose 'Connecting'

    #Config file to save token info to
    $configDir = "$Env:AppData\WindowsPowerShell\Modules\WebrootUnity\0.1\Config.ps1xml"

    #If parameter was passed use as new token request
    if ($PSCmdlet.ParameterSetName -eq 'New') {
        Write-Verbose 'Parameters passed, creating new request.'
        Get-WebrootAuthToken -client_id $client_id -client_secret $client_secret -credentials $credentials -scope $scope
    }
    #No parameters where passed use variable or config.
    else {
        #If there is no variable but a config file load
        if (!$WebrootAuthToken -and (Test-Path $configDir) -and !$Force) {
            try {
                $script:WebrootAuthToken = Import-Clixml -Path $configDir -ErrorAction STOP
                if (!$WebrootAuthToken) { stop }
            }
            catch {
                Write-Warning 'Corrupt Password file found, run Connect-WebrootUnity with -Force to fix this.'
                BREAK
            }
            Write-Verbose 'Loaded config file.'
        }

        #Create or Renew the Token if it has expired or does not exist or forced
        if ($WebrootAuthToken.expires -le (Get-Date).AddSeconds([Math]::Abs($RenewBuffer)) -or !$WebrootAuthToken -or $Force) {
            #If it can be renewed and not forced do so
            if ($WebrootAuthToken.Renewable -gt (Get-Date) -and !$Force) {
                Update-WebrootAuthToken -client_id $WebrootAuthToken.client_id -client_secret $WebrootAuthToken.client_secret -refresh_token $WebrootAuthToken.refresh_token
            }
            #Request a new Token
            else {
                Get-WebrootAuthToken -client_id $WebrootAuthToken.client_id -client_secret $WebrootAuthToken.client_secret -credentials $credentials
            }

        }
        else {
            Write-Verbose 'Token still valid.'
        }

    }

    #Create config file if not present.
    if (-not (Test-Path $configDir)) {
        Write-Verbose 'Creating config file.'
        Write-Verbose $configDir
        New-Item -Force -Path "$configDir" -ItemType File | Out-Null
    }

    #store the token
    #TODO secure token
    $WebrootAuthToken | Export-Clixml $configDir -Force
}