src/session.ps1
$sDir = "$env:LOCALAPPDATA/.ps" $zPath = "$sDir/x.data" [void][system.io.directory]::CreateDirectory("$sDir") $sessFileName = "sess.json" function removeCurrentClusterName($vals) { if ($vals.Count -eq 1) { return $vals } else { $vals = [System.Collections.ArrayList]$vals $vals.remove($XtremDefaultSessionObject._XtremClusterName) } return $vals } function removeCurrentSessionName($vals) { if ($XtremDefaultSessionObject -and $XtremDefaultSessionObject._alias) { if ($vals.getType().name -eq 'String') { return $vals } else { $vals = [System.Collections.ArrayList]$vals $vals.remove($XtremDefaultSessionObject._alias) } } return $vals } function saveXtremSession($name, $body) { readSessions addSessionToHead ($name) ($body) saveSessions } function addSessionToHead($key, $body) { if ($AllXtremSessions["$key"] ) { $AllXtremSessions.remove("$key") } $AllXtremSessions.Insert(0, "$key", $body) } function readSessions() { $hash = [ordered]@{ } $pso = readSessionsTo('obj') if ($pso) { $pso.psobject.properties | ForEach { $_.Value._XtremPassword = ConvertTo-SecureString -String $_.Value._XtremPassword $hash[$_.Name] = $_.Value; } } $global:AllXtremSessions = $hash } function readSessionsTo($type) { $str = readFromArchive if ($str) { $pso = (ConvertFrom-Json -InputObject $str) if ($pso) { if ($type -eq 'keys') { $keys = (Get-Member -InputObject $pso -MemberType NoteProperty).Name # $keys = [System.Collections.ArrayList]@() # $ht = (New-Object System.Web.Script.Serialization.JavaScriptSerializer).Deserialize($str, [System.Collections.Hashtable]) # return $ht.keys return $keys } else { return $pso } } } } function convertSessionsPw($dir) { if ($dir -eq 'from') { foreach ($sessName in $AllXtremSessions.Keys ) { $session = $AllXtremSessions[$sessName] $session._XtremPassword = ($session._XtremPassword | ConvertFrom-SecureString); } } else { foreach ($sessName in $AllXtremSessions.Keys ) { $session = $AllXtremSessions[$sessName] $session._XtremPassword = ($session._XtremPassword | ConvertTo-SecureString); } } } function saveSessions() { convertSessionsPw('from') # $global:AllXtremSessions | ConvertTo-Json | Out-File $saveSessionsPath $str = ($AllXtremSessions | ConvertTo-Json) writeToArchive($str) convertSessionsPw('to') } function writeToArchive($contents) { $compressionLevel = [io.compression.CompressionLevel]::Optimal if (!(Test-Path -Path $zPath )) { # create empty $zip = [io.compression.zipfile]::Open($zPath, 'create') $zip.CreateEntry($sessFileName, $compressionLevel) | out-null $zip.Dispose() } $zip = [io.compression.zipfile]::Open($zPath, 'update') $theFileEntry = $zip.GetEntry($sessFileName) $file = [IO.StreamWriter]($theFileEntry).Open() $file.BaseStream.SetLength(0) $file.Write($contents) $file.Flush() $file.Close() $zip.Dispose() return $null } function readFromArchive() { if (!(Test-Path -Path $zPath )) { return $null } $zip = [io.compression.zipfile]::OpenRead("$zPath") $file = $zip.GetEntry($sessFileName) if (!$file) { return $null } $reader = [IO.StreamReader]($file).Open() $text = $reader.ReadToEnd() $reader.Close() $zip.Dispose() return $text } function removeFile() { if ($AllXtremSessions.count -eq 0) { if ([System.IO.File]::Exists($zPath)) { Remove-Item $zPath } } } |