mirror of
https://github.com/nsacyber/HIRS.git
synced 2025-02-07 11:50:14 +00:00
Added download method mapper for certificates [no ci]
This commit is contained in:
parent
ff89d414f6
commit
a5388d6ec9
@ -46,6 +46,7 @@ import java.net.URISyntaxException;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
@ -267,6 +268,57 @@ public class CertificatePageController extends PageController<NoPageParams> {
|
|||||||
return redirectTo(getCertificatePage(certificateType), new NoPageParams(), model, attr);
|
return redirectTo(getCertificatePage(certificateType), new NoPageParams(), model, attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles request to download the cert by writing it to the response stream
|
||||||
|
* for download.
|
||||||
|
*
|
||||||
|
* @param certificateType String containing the certificate type
|
||||||
|
* @param id the UUID of the cert to download
|
||||||
|
* @param response the response object (needed to update the header with the
|
||||||
|
* file name)
|
||||||
|
* @throws java.io.IOException when writing to response output stream
|
||||||
|
*/
|
||||||
|
@RequestMapping(value = "/{certificateType}/download", method = RequestMethod.GET)
|
||||||
|
public void download(
|
||||||
|
@PathVariable("certificateType") final String certificateType,
|
||||||
|
@RequestParam final String id,
|
||||||
|
final HttpServletResponse response)
|
||||||
|
throws IOException {
|
||||||
|
log.info("Handling request to download " + id);
|
||||||
|
|
||||||
|
try {
|
||||||
|
UUID uuid = UUID.fromString(id);
|
||||||
|
Certificate certificate = certificateRepository.getCertificate(uuid);
|
||||||
|
if (certificate == null) {
|
||||||
|
// Use the term "record" here to avoid user confusion b/t cert and cred
|
||||||
|
String notFoundMessage = "Unable to locate record with ID: " + uuid;
|
||||||
|
log.warn(notFoundMessage);
|
||||||
|
// send a 404 error when invalid certificate
|
||||||
|
response.sendError(HttpServletResponse.SC_NOT_FOUND);
|
||||||
|
} else {
|
||||||
|
StringBuilder fileName = new StringBuilder("filename=\"");
|
||||||
|
fileName.append(getCertificateClass(certificateType).getSimpleName());
|
||||||
|
fileName.append("_");
|
||||||
|
fileName.append(certificate.getSerialNumber());
|
||||||
|
fileName.append(".cer\"");
|
||||||
|
|
||||||
|
// Set filename for download.
|
||||||
|
response.setHeader("Content-Disposition", "attachment;" + fileName);
|
||||||
|
response.setContentType("application/octet-stream");
|
||||||
|
|
||||||
|
// write cert to output stream
|
||||||
|
response.getOutputStream().write(certificate.getRawBytes());
|
||||||
|
}
|
||||||
|
} catch (IllegalArgumentException ex) {
|
||||||
|
String uuidError = "Failed to parse ID from: " + id;
|
||||||
|
log.error(uuidError, ex);
|
||||||
|
// send a 404 error when invalid certificate
|
||||||
|
response.sendError(HttpServletResponse.SC_NOT_FOUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles request to download the ACA cert by writing it to the response
|
* Handles request to download the ACA cert by writing it to the response
|
||||||
* stream for download.
|
* stream for download.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user