From 14c1642a846fb78a2d715acc7c2a3ec3c38e5a18 Mon Sep 17 00:00:00 2001 From: Tom Peltonen Date: Sat, 10 Jul 2021 14:25:15 +1000 Subject: [PATCH] Updated code --- ptrFiles.ps1 => ptfrFiles/ptrFiles.ps1 | 93 +++++++++++++++----------- 1 file changed, 53 insertions(+), 40 deletions(-) rename ptrFiles.ps1 => ptfrFiles/ptrFiles.ps1 (85%) diff --git a/ptrFiles.ps1 b/ptfrFiles/ptrFiles.ps1 similarity index 85% rename from ptrFiles.ps1 rename to ptfrFiles/ptrFiles.ps1 index d6f6249..5274244 100644 --- a/ptrFiles.ps1 +++ b/ptfrFiles/ptrFiles.ps1 @@ -3,10 +3,11 @@ param ( [Parameter(Mandatory)][String] $Action, [Parameter(Mandatory)][String] $Path, - [String] $RecipientKeyName, + [String] $RecipientKeyName, + [String] $SecretKey, [String] $TransferFileName, - [String] $ReconcileFileName = "##protect_transfer_reconcile##.csv", - [String] $SecretFileName = ".\transfer.key", + [String] $ReconcileFileName, + [String] $SecretFileName, [switch] $ExcludeHash, [switch] $Install7zip ) @@ -133,10 +134,9 @@ function Invoke-Pack { Param( [String] $TransferFolder, - [String] $ToName, + [String] $Secret, [String] $CompressFile, - [String] $ReconcileFile, - [String] $SecretEncrypted + [String] $ReconcileFile ) # Send If (!(Test-Path -Path $transferFolder )) { @@ -156,27 +156,16 @@ Param( $reconcileFile = $default_reconcileFile } - if ($secretEncrypted -eq "") - { - $secretEncrypted = $default_secretEncrypted - } - - # First step - create protected secret - $secret = New-RandomPassword -Length 80 - Protect-CmsMessage -To $toName -OutFile $secretEncrypted -Content $secret - - # Second step - compress the data files Compress-7Zip -Path $transferFolder -ArchiveFileName $compressFile -Format SevenZip - # Third step - create the reconcile file Set-Reconcile -ReconcileFile $reconcileFile -FolderName $transferFolder - # Fourth step - add reconcile file to ZIP and encrypt Write-Log "Add reconcile file '$reconcileFile' to file '$compressFile'" $fullReconcileName = (Get-Item $reconcileFile).FullName $fullZipName = (Get-Item $compressFile).FullName Compress-7Zip -Path $fullReconcileName -ArchiveFileName $fullZipName -Format SevenZip -Append -Password $secret -EncryptFilenames Remove-Item $fullReconcileName + Write-Log "Package ready in file '$compressFile' from folder '$transferFolder'" Write-Host "Package ready in file '$compressFile' from folder '$transferFolder'" -ForegroundColor Green } @@ -186,11 +175,10 @@ function Invoke-Unpack { Param( [String] $RestoreFolder, - [String] $ToName, - [String] $CompressFile, - [String] $SecretEncrypted + [String] $Secret, + [String] $CompressFile ) - # Receive + If (!(Test-Path -Path $CompressFile )) { Write-Log "Transfer/compress file '$CompressFile' does not exist" Write-Host "Transfer/compress file '$CompressFile' does not exist" -ForegroundColor Red @@ -198,17 +186,10 @@ Param( return } - if ($secretEncrypted -eq "") - { - $secretEncrypted = $default_secretEncrypted - } - - # First step - decrypt password for uncompressing Write-Log "Restoring files transferred to '$restoreFolder'" Write-Log "Package/Compress file is '$compressFile'" - $secret = Unprotect-CmsMessage -To $toName -Path $secretEncrypted - # Second step - uncompress the data files + # Uncompress the data files Expand-7Zip -ArchiveFileName $compressFile -TargetPath $restoreFolder -Password $secret Write-Log "Package unpacked from file '$compressFile' to folder '$restoreFolder'" Write-Host "Package unpacked from file '$compressFile' to folder '$restoreFolder'" -ForegroundColor Green @@ -223,6 +204,11 @@ Param( [Parameter(Mandatory)][String] $folderName ) + if ($reconcileFileName -eq "") + { + $reconcileFileName = $default_reconcileFile + } + Write-Log "Reconciling documents transferred" Write-Host "Reconciling documents transferred" If (!(Test-Path -Path $reconcileFileName )) { @@ -285,9 +271,9 @@ $actioned = $false if ($action -eq "Pack") { $actioned = $true - if ($RecipientKeyName -eq "") { - Write-Log "Recipient Key Name required for packing" - Write-Host "Recipient Key Name required for packing" -ForegroundColor Red + if (($RecipientKeyName -eq "") -and ($SecretKey -eq "")) { + Write-Log "Recipient Key Name or Secret Key required for packing" + Write-Host "Recipient Key Name or Secret Key required for packing" -ForegroundColor Red Close-Log return } @@ -295,17 +281,27 @@ if ($action -eq "Pack") { if ($TransferFileName -eq "") { $TransferFileName = ".\transfer_protect_$default_dateLocal.7z" } - - Invoke-Pack -TransferFolder $path -ToName $recipientKeyName -CompressFile $transferFileName -ReconcileFile $reconcileFileName -SecretEncrypted $secretFileName - + + if ($SecretKey -eq "") { + if ($secretFileName -eq "") + { + $secretFileName = $default_secretEncrypted + } + $secret = New-RandomPassword -Length 80 + Protect-CmsMessage -To $recipientKeyName -OutFile $secretFileName -Content $secret + } else { + $secret = $SecretKey + } + + Invoke-Pack -TransferFolder $path -Secret $secret -CompressFile $transferFileName -ReconcileFile $reconcileFileName } if ($action -eq "Unpack") { $actioned = $true - if ($RecipientKeyName -eq "") { - Write-Log "Recipient Key Name required for unpacking" - Write-Host "Recipient Key Name required for unpacking" -ForegroundColor Red + if (($RecipientKeyName -eq "") -and ($SecretKey -eq "")) { + Write-Log "Recipient Key Name or Secret Key required for unpacking" + Write-Host "Recipient Key Name or Secret Key required for unpacking" -ForegroundColor Red Close-Log return } @@ -316,19 +312,36 @@ if ($action -eq "Unpack") { return } - Invoke-Unpack -RestoreFolder $path -ToName $recipientKeyName -CompressFile $transferFileName + if ($SecretKey -eq "") { + if ($secretFileName -eq "") + { + $secretFileName = $default_secretEncrypted + } + $secret = Unprotect-CmsMessage -To $recipientKeyName -Path $secretFileName + } else { + $secret = $SecretKey + } + Invoke-Unpack -RestoreFolder $path -Secret $secret -CompressFile $transferFileName } if ($action -eq "ReconcileFile") { $actioned = $true + if ($reconcileFileName -eq "") + { + $reconcileFileName = $default_reconcileFile + } Set-Reconcile -ReconcileFile $reconcileFileName -FolderName $path -Feedback } if ($action -eq "Reconcile") { $actioned = $true + if ($reconcileFileName -eq "") + { + $reconcileFileName = $default_reconcileFile + } $localReconcileFile = Join-Path -Path $path -ChildPath $reconcileFileName Invoke-Reconcile -ReconcileFile $localReconcileFile -FolderName $path }