diff --git a/server/lambda/follow-redirects.js b/server/lambda/follow-redirects.js new file mode 100644 index 0000000..0ff4cb1 --- /dev/null +++ b/server/lambda/follow-redirects.js @@ -0,0 +1,31 @@ +exports.handler = async (event) => { + const { url } = event.queryStringParameters; + const redirects = []; + + try { + const got = await import('got'); + await got.default(url, { + followRedirect: true, + maxRedirects: 12, + hooks: { + beforeRedirect: [ + (options, response) => { + redirects.push(response.headers.location); + }, + ], + }, + }); + + return { + statusCode: 200, + body: JSON.stringify({ + redirects: redirects, + }), + }; + } catch (error) { + return { + statusCode: 500, + body: `Error: ${error.message}`, + }; + } +}; diff --git a/server/lambda/get-txt.js b/server/lambda/get-txt.js new file mode 100644 index 0000000..a296b71 --- /dev/null +++ b/server/lambda/get-txt.js @@ -0,0 +1,30 @@ +const dns = require('dns').promises; + +exports.handler = async (event) => { + const url = new URL(event.queryStringParameters.url); + try { + const txtRecords = await dns.resolveTxt(url.hostname); + + // Parsing and formatting TXT records into a single object + const readableTxtRecords = txtRecords.reduce((acc, recordArray) => { + const recordObject = recordArray.reduce((recordAcc, recordString) => { + const splitRecord = recordString.split('='); + const key = splitRecord[0]; + const value = splitRecord.slice(1).join('='); + return { ...recordAcc, [key]: value }; + }, {}); + return { ...acc, ...recordObject }; + }, {}); + + return { + statusCode: 200, + body: JSON.stringify(readableTxtRecords), + }; + } catch (error) { + console.error('Error:', error); + return { + statusCode: 500, + body: JSON.stringify({ message: error.message }), + }; + } +};