Updates all API endpoints to use common middleware

This commit is contained in:
Alicia Sykes
2023-08-09 22:33:36 +01:00
parent 85af5f9327
commit d2a56eb526
21 changed files with 264 additions and 550 deletions

View File

@@ -1,43 +1,28 @@
const https = require('https');
const middleware = require('./_common/middleware');
exports.handler = async function (event, context) {
const url = (event.queryStringParameters || event.query).url;
const errorResponse = (message, statusCode = 500) => {
return {
statusCode: statusCode,
body: JSON.stringify({ error: message }),
};
};
if (!url) {
return errorResponse('URL query parameter is required', 400);
}
const fetchSiteCertificateHandler = async (url) => {
try {
const response = await new Promise((resolve, reject) => {
const req = https.request(url, res => {
// Check if the SSL handshake was authorized
if (!res.socket.authorized) {
resolve(errorResponse(`SSL handshake not authorized. Reason: ${res.socket.authorizationError}`));
reject(new Error(`SSL handshake not authorized. Reason: ${res.socket.authorizationError}`));
} else {
let cert = res.socket.getPeerCertificate(true);
if (!cert || Object.keys(cert).length === 0) {
resolve(errorResponse("No certificate presented by the server."));
reject(new Error("No certificate presented by the server."));
} else {
// omit the raw and issuerCertificate fields
const { raw, issuerCertificate, ...certWithoutRaw } = cert;
resolve({
statusCode: 200,
body: JSON.stringify(certWithoutRaw),
});
resolve(certWithoutRaw);
}
}
});
req.on('error', error => {
resolve(errorResponse(`Error fetching site certificate: ${error.message}`));
reject(new Error(`Error fetching site certificate: ${error.message}`));
});
req.end();
@@ -45,6 +30,8 @@ exports.handler = async function (event, context) {
return response;
} catch (error) {
return errorResponse(`Unexpected error occurred: ${error.message}`);
throw new Error(error.message);
}
};
exports.handler = middleware(fetchSiteCertificateHandler);