Classes/Public/MoveSession.ps1


class MoveSession {
    ## A Name parameter to identify the session in other -MoveSessions functions
    [String]$Name

    # Move Server hostname
    [string]$MoveServer

    # Move Server hostname port
    [int]$MovePort

    # MoveVersion drives the selection of compatible APIs to use
    [string]$MoveVersion

    # Logged in Move User's Context (indicates loggedin-ness)
    [pscustomobject]$UserContext

    # Token Expiry Date from Status.ExpiryDate API login response
    [datetime]$ExpirationDate

    # MoveWebSession Variable. Maintained by the Invoke-WebRequest function's capability
    [Microsoft.PowerShell.Commands.WebRequestSession]$MoveWebSession

    ## Tracks non-changing items to reduce HTTP lookups, and increase speed of scripts.
    ## DataCache is expected to be a k/v pair, where the V could be another k/v pair,
    ## However, it's implementation will be more of the nature to hold the list of object calls from the API
    ## like 'credentials' = @(@{...},@{...}); 'actions' = @(@{...},@{...})
    ## Get-Move* functions will cache unless a -NoCache switch is provided
    [hashtable]$DataCache

    ## Should PowerShell ignore the SSL Cert on the Move Server?
    [bool]$AllowInsecureSSL

    MoveSession() {
        $this.Name = 'Default'
        $this.AllowInsecureSSL = $false
        $this.DataCache = @{}
        $this.UserContext = $null
        $this.MovePort = 9669
        $this.MoveWebSession = New-Object -Type Microsoft.PowerShell.Commands.WebRequestSession
    }

    MoveSession([String]$_name = 'Default') {
        $this.Name = $_name
        $this.AllowInsecureSSL = $false
        $this.DataCache = @{}
        $this.UserContext = $null
        $this.MovePort = 9669
        $this.MoveWebSession = New-Object -Type Microsoft.PowerShell.Commands.WebRequestSession
    }

    MoveSession([String]$_name = 'Default', [String]$_server, [Bool]$_allowInsecureSSL = $false) {
        $this.Name = $_name
        $this.AllowInsecureSSL = $_allowInsecureSSL
        $this.MoveServer = $_server
        $this.MovePort = 443
        $this.DataCache = @{}
        $this.UserContext = $null
        $this.MoveWebSession = New-Object -Type Microsoft.PowerShell.Commands.WebRequestSession
    }

    MoveSession([String]$_name = 'Default', [String]$_server, [int]$_port, [Bool]$_allowInsecureSSL = $false) {
        $this.Name = $_name
        $this.AllowInsecureSSL = $_allowInsecureSSL
        $this.MoveServer = $_server
        $this.MovePort = $_port
        $this.DataCache = @{}
        $this.UserContext = $null
        $this.MoveWebSession = New-Object -Type Microsoft.PowerShell.Commands.WebRequestSession
    }

    [void] setExpirationDate([datetime]$loginRequestTime, [psobject] $status) {
        $tokenLifeTimeInSeconds = $status.ExpiryDate - $status.IssueDate
        $tokenExpirationDate = $loginRequestTime.AddSeconds($tokenLifeTimeInSeconds - 60) # 1-minute cushion
        $this.ExpirationDate = $tokenExpirationDate
    }
}