From fb0e6131e79aa2ba9c7acbd16f4ee4e73289f64b Mon Sep 17 00:00:00 2001
From: Zoran Ilibasic <zilibasic@s7designcreative.com>
Date: Thu, 12 Mar 2020 16:13:06 +0100
Subject: [PATCH] Improved download of the private and public keys and
 certificates (S/MIME and PGP).

---
 CHANGES.md                                    |  1 +
 Kernel/Modules/AdminPGP.pm                    |  2 +-
 Kernel/Modules/AdminSMIME.pm                  |  3 +-
 .../test/Selenium/Agent/Admin/AdminSMIME.t    | 29 ++++++++++++++++++-
 4 files changed, 32 insertions(+), 3 deletions(-)

--- a/Kernel/Modules/AdminPGP.pm
+++ b/Kernel/Modules/AdminPGP.pm
@@ -291,7 +291,7 @@ sub Run {
         return $LayoutObject->Attachment(
             ContentType => 'text/plain',
             Content     => $KeyString,
-            Filename    => "$Key.asc",
+            Filename    => $Key . '-' . $Type . '.asc',
             Type        => 'attachment',
         );
     }
--- a/Kernel/Modules/AdminSMIME.pm
+++ b/Kernel/Modules/AdminSMIME.pm
@@ -379,10 +379,11 @@ sub Run {
         else {
             $Download = $SMIMEObject->CertificateGet( Filename => $Filename );
         }
+
         return $LayoutObject->Attachment(
             ContentType => 'text/plain',
             Content     => $Download,
-            Filename    => "$Hash.pem",
+            Filename    => $Hash . '-' . $Type . '.pem',
             Type        => 'attachment',
         );
     }
--- a/scripts/test/Selenium/Agent/Admin/AdminSMIME.t
+++ b/scripts/test/Selenium/Agent/Admin/AdminSMIME.t
@@ -160,9 +160,36 @@ $Selenium->RunTest(
         $Selenium->WaitFor( WindowCount => 1 );
         $Selenium->switch_to_window( $Handles->[0] );
 
-        # check for test created Certificate and Privatekey and delete them
+        # Check download file name.
+        my $BaseURL = $ConfigObject->Get('HttpType') . '://';
+
+        $BaseURL .= $Helper->GetTestHTTPHostname() . '/';
+        $BaseURL .= $ConfigObject->Get('ScriptAlias') . 'index.pl?';
+
+        my $UserAgent = LWP::UserAgent->new(
+            Timeout => 60,
+        );
+        $UserAgent->cookie_jar( {} );    # keep cookies
+
+        my $ResponseLogin = $UserAgent->get(
+            $BaseURL . "Action=Login;User=$TestUserLogin;Password=$TestUserLogin;"
+        );
+
         for my $TestSMIME (qw(key cert)) {
 
+            # Check for test created Certificate and Private key download fime name.
+            my $Response = $UserAgent->get(
+                $BaseURL . "Action=AdminSMIME;Subaction=Download;Type=$TestSMIME;Filename=4d400195.0"
+            );
+            if ( $ResponseLogin->is_success() && $Response->is_success() ) {
+
+                $Self->True(
+                    index( $Response->header('content-disposition'), "4d400195-$TestSMIME.pem" ) > -1,
+                    "Download file name is correct - 4d400195-$TestSMIME.pem",
+                );
+            }
+
+            # Check for test created Certificate and Private key and delete them.
             $Self->True(
                 index( $Selenium->get_page_source(), "Type=$TestSMIME;Filename=" ) > -1,
                 "Test $TestSMIME SMIME found on table"
