Adds server-side native screenshot capture functionality
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
const net = require('net');
|
||||
const psl = require('psl');
|
||||
// const { URL } = require('url');
|
||||
|
||||
const errorResponse = (message, statusCode = 444) => {
|
||||
@@ -8,29 +9,19 @@ const errorResponse = (message, statusCode = 444) => {
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
const getBaseDomain = (url) => {
|
||||
// Determine whether a protocol is present
|
||||
let protocol = '';
|
||||
if (url.startsWith('http://')) {
|
||||
protocol = 'http://';
|
||||
} else if (url.startsWith('https://')) {
|
||||
protocol = 'https://';
|
||||
}
|
||||
|
||||
// Remove protocol for domain parsing but keep it for final output
|
||||
let noProtocolUrl = url.replace(protocol, '');
|
||||
const parsed = psl.parse(noProtocolUrl);
|
||||
return protocol + parsed.domain;
|
||||
};
|
||||
|
||||
// Split on '.' and get the last two sections
|
||||
const domainParts = noProtocolUrl.split('.');
|
||||
|
||||
// If there's more than one '.'
|
||||
// then get only the last two parts to ignore subdomains
|
||||
if (domainParts.length > 2) {
|
||||
return protocol + domainParts.slice(-2).join('.');
|
||||
} else {
|
||||
return url;
|
||||
}
|
||||
}
|
||||
|
||||
exports.handler = async function(event, context) {
|
||||
let url = event.queryStringParameters.url;
|
||||
@@ -79,6 +70,11 @@ exports.handler = async function(event, context) {
|
||||
};
|
||||
|
||||
const parseWhoisData = (data) => {
|
||||
|
||||
if (data.includes('No match for')) {
|
||||
return { error: 'No matches found for domain in internic database'};
|
||||
}
|
||||
|
||||
const lines = data.split('\r\n');
|
||||
const parsedData = {};
|
||||
|
||||
@@ -86,25 +82,16 @@ const parseWhoisData = (data) => {
|
||||
|
||||
for (const line of lines) {
|
||||
const index = line.indexOf(':');
|
||||
|
||||
// If this line is a continuation of the previous line
|
||||
if (index === -1) {
|
||||
if (lastKey !== '') {
|
||||
parsedData[lastKey] += ' ' + line.trim();
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
let key = line.slice(0, index).trim();
|
||||
const value = line.slice(index + 1).trim();
|
||||
|
||||
// Ignore lines that are not key-value pairs
|
||||
if (value.length === 0) continue;
|
||||
|
||||
// Convert keys to format without spaces or special characters
|
||||
key = key.replace(/\W+/g, '_');
|
||||
|
||||
// Store the key to handle multi-line values
|
||||
lastKey = key;
|
||||
|
||||
parsedData[key] = value;
|
||||
|
||||
Reference in New Issue
Block a user