lib/Classes/Public/TMSession.ps1
class TMSession { ## A Name parameter to identify the session in other -TMSessions functions [String]$Name # TM Server hostname [String]$TMServer # TMVersion drives the selection of compatible APIs to use [String]$TMVersion # Logged in TM User's Context (indicates loggedin-ness) [PSCustomObject]$UserContext # TMWebSession Variable. Maintained by the Invoke-WebRequest function's capability $TMWebSession # TMRestSession Variable. Maintained by the Invoke-RestMethod function's capability $TMRestSession ## 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-TM* functions will cache unless a -NoCache switch is provided [Hashtable]$DataCache ## Should PowerShell ignore the SSL Cert on the TM Server? [Bool]$AllowInsecureSSL ## Hods the TM Server's Public Key [String]$PublicKey TMSession() { $this.Name = 'Default' $this.AllowInsecureSSL = $false $this.DataCache = @{} $this.UserContext = $null $this.TMWebSession = New-Object -Type Microsoft.PowerShell.Commands.WebRequestSession $this.TMRestSession = New-Object -Type Microsoft.PowerShell.Commands.WebRequestSession } TMSession([String]$_name = 'Default') { $this.Name = $_name $this.AllowInsecureSSL = $false $this.DataCache = @{} $this.UserContext = $null $this.TMWebSession = New-Object -Type Microsoft.PowerShell.Commands.WebRequestSession $this.TMRestSession = New-Object -Type Microsoft.PowerShell.Commands.WebRequestSession } TMSession([String]$_name = 'Default', [String]$_server, [Bool]$_allowInsecureSSL = $false) { $this.Name = $_name $this.AllowInsecureSSL = $_allowInsecureSSL $this.TMServer = $_server $this.DataCache = @{} $this.UserContext = $null $this.TMWebSession = New-Object -Type Microsoft.PowerShell.Commands.WebRequestSession $this.TMRestSession = New-Object -Type Microsoft.PowerShell.Commands.WebRequestSession } ## Constructor used by Import-TMCActionRequest TMSession([PSObject]$_actionrequest) { $server = $_actionrequest.tmUserSession.url -replace 'https://', '' ## Assign Default Values $this.Name = 'Default' $this.AllowInsecureSSL = $False $this.TMServer = $server $this.TMVersion = ($_actionrequest.tmUserSession.tmVersion -split '-')[0] $this.DataCache = @{} $this.UserContext = $_actionrequest.tmUserSession.userContext ## Build a Rest and Web Session Object $this.TMWebSession = New-Object -Type Microsoft.PowerShell.Commands.WebRequestSession $this.TMRestSession = New-Object -Type Microsoft.PowerShell.Commands.WebRequestSession ## Add the JSESSIONID Cookie $JSessionCookie = New-Object System.Net.Cookie $JSessionCookie.Name = "JSESSIONID" $JSessionCookie.Value = $_actionrequest.tmUserSession.jsessionid $JSessionCookie.Domain = $server $this.TMWebSession.Cookies.Add($JSessionCookie) ## Add the Bearer Token header $this.TMRestSession.Headers.Add('Authorization', "Bearer $($_actionrequest.options.callback.token)") ## Add the CSRF header if ($_actionrequest.tmUserSession.csrf) { $this.TMWebSession.Headers.Add($_actionrequest.tmUserSession.csrf.tokenHeaderName, $_actionrequest.tmUserSession.csrf.token) $this.TMRestSession.Headers.Add($_actionrequest.tmUserSession.csrf.tokenHeaderName, $_actionrequest.tmUserSession.csrf.token) } ## Add TMConsole's Public Session Key to the TMSession $this.PublicKey = $_actionrequest.publicRSAKey } } |