Compare commits
16 Commits
contributo
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4b4bf20a6f | ||
|
|
9407f5c4b0 | ||
|
|
8715274c9a | ||
|
|
6ef6720ec0 | ||
|
|
c0c146b2b9 | ||
|
|
64510f7e7e | ||
|
|
4603828b92 | ||
|
|
cdf7875ddb | ||
|
|
50a11a5f50 | ||
|
|
145711bdc7 | ||
|
|
0e4958aa10 | ||
|
|
99653868c7 | ||
|
|
20d08290af | ||
|
|
90883843e6 | ||
|
|
eb63741e04 | ||
|
|
bbf519e110 |
91
.github/README.md
vendored
91
.github/README.md
vendored
@@ -1021,6 +1021,13 @@ Credit to the following users for contributing to Web-Check
|
||||
<sub><b>PhiRequiem</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href="https://github.com/ntaiko">
|
||||
<img src="https://avatars.githubusercontent.com/u/108784453?v=4" width="80;" alt="ntaiko"/>
|
||||
<br />
|
||||
<sub><b>Nikolaos G. Ntaiko</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href="https://github.com/Myzel394">
|
||||
<img src="https://avatars.githubusercontent.com/u/50424412?v=4" width="80;" alt="Myzel394"/>
|
||||
@@ -1028,6 +1035,8 @@ Credit to the following users for contributing to Web-Check
|
||||
<sub><b>Myzel394</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a href="https://github.com/murrple-1">
|
||||
<img src="https://avatars.githubusercontent.com/u/5559656?v=4" width="80;" alt="murrple-1"/>
|
||||
@@ -1035,8 +1044,6 @@ Credit to the following users for contributing to Web-Check
|
||||
<sub><b>Murray Christopherson</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a href="https://github.com/t3chn0m4g3">
|
||||
<img src="https://avatars.githubusercontent.com/u/4318452?v=4" width="80;" alt="t3chn0m4g3"/>
|
||||
@@ -1072,6 +1079,8 @@ Credit to the following users for contributing to Web-Check
|
||||
<sub><b>Ed Preston</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a href="https://github.com/dimitri-kandassamy">
|
||||
<img src="https://avatars.githubusercontent.com/u/21193806?v=4" width="80;" alt="dimitri-kandassamy"/>
|
||||
@@ -1079,8 +1088,6 @@ Credit to the following users for contributing to Web-Check
|
||||
<sub><b>Dimitri Kandassamy</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a href="https://github.com/0xflotus">
|
||||
<img src="https://avatars.githubusercontent.com/u/26602940?v=4" width="80;" alt="0xflotus"/>
|
||||
@@ -1102,19 +1109,12 @@ Huge thanks to these wonderful people, who sponsor me on GitHub, their support h
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a href="https://github.com/koconder">
|
||||
<img src="https://avatars.githubusercontent.com/u/25068?u=582657b23622aaa3dfe68bd028a780f272f456fa&v=4" width="80;" alt="koconder"/>
|
||||
<a href="https://github.com/vincentkoc">
|
||||
<img src="https://avatars.githubusercontent.com/u/25068?v=4" width="80;" alt="vincentkoc"/>
|
||||
<br />
|
||||
<sub><b>Vincent Koc</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href="https://github.com/tbjers">
|
||||
<img src="https://avatars.githubusercontent.com/u/1117052?v=4" width="80;" alt="tbjers"/>
|
||||
<br />
|
||||
<sub><b>Torgny Bjers</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href="https://github.com/AnandChowdhary">
|
||||
<img src="https://avatars.githubusercontent.com/u/2841780?u=747e554b3a7f12eb20b7910e1c87d817844f714f&v=4" width="80;" alt="AnandChowdhary"/>
|
||||
@@ -1143,8 +1143,6 @@ Huge thanks to these wonderful people, who sponsor me on GitHub, their support h
|
||||
<sub><b>Ulises Gascón</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a href="https://github.com/digitalarche">
|
||||
<img src="https://avatars.githubusercontent.com/u/6546135?u=564756d7f44ab2206819eb3148f6d822673f5066&v=4" width="80;" alt="digitalarche"/>
|
||||
@@ -1152,6 +1150,8 @@ Huge thanks to these wonderful people, who sponsor me on GitHub, their support h
|
||||
<sub><b>Digital Archeology</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a href="https://github.com/InDieTasten">
|
||||
<img src="https://avatars.githubusercontent.com/u/7047377?u=8d8f8017628b38bc46dcbf3620e194b01d3fb2d1&v=4" width="80;" alt="InDieTasten"/>
|
||||
@@ -1173,6 +1173,13 @@ Huge thanks to these wonderful people, who sponsor me on GitHub, their support h
|
||||
<sub><b>Brian McGonagill</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href="https://github.com/arcestia">
|
||||
<img src="https://avatars.githubusercontent.com/u/7936962?v=4" width="80;" alt="arcestia"/>
|
||||
<br />
|
||||
<sub><b>Laurensius Jeffrey</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href="https://github.com/vlad-tim">
|
||||
<img src="https://avatars.githubusercontent.com/u/11474041?u=eee43705b54d2ec9f51fc4fcce5ad18dd17c87e4&v=4" width="80;" alt="vlad-tim"/>
|
||||
@@ -1189,13 +1196,6 @@ Huge thanks to these wonderful people, who sponsor me on GitHub, their support h
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a href="https://github.com/patvdv">
|
||||
<img src="https://avatars.githubusercontent.com/u/12430107?u=e8911c2fb91af4d30432f76da8c40927b2830bd7&v=4" width="80;" alt="patvdv"/>
|
||||
<br />
|
||||
<sub><b>Patrick Van Der Veken</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href="https://github.com/mryesiller">
|
||||
<img src="https://avatars.githubusercontent.com/u/24632172?u=0d20f2d615158f87cd60a3398d3efb026c32f291&v=4" width="80;" alt="mryesiller"/>
|
||||
@@ -1210,29 +1210,6 @@ Huge thanks to these wonderful people, who sponsor me on GitHub, their support h
|
||||
<sub><b>Shiverme Timbers</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href="https://github.com/forwardemail">
|
||||
<img src="https://avatars.githubusercontent.com/u/32481436?v=4" width="80;" alt="forwardemail"/>
|
||||
<br />
|
||||
<sub><b>Forward Email - Open-source & Privacy-focused Email Service (2023)</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href="https://github.com/semiceau">
|
||||
<img src="https://avatars.githubusercontent.com/u/50425951?v=4" width="80;" alt="semiceau"/>
|
||||
<br />
|
||||
<sub><b>GT</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href="https://github.com/Bastii717">
|
||||
<img src="https://avatars.githubusercontent.com/u/53431819?u=604977bed6ad6875ada890d0d3765a4cacc2fa14&v=4" width="80;" alt="Bastii717"/>
|
||||
<br />
|
||||
<sub><b>Bastii717</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a href="https://github.com/getumbrel">
|
||||
<img src="https://avatars.githubusercontent.com/u/59408891?v=4" width="80;" alt="getumbrel"/>
|
||||
@@ -1240,6 +1217,13 @@ Huge thanks to these wonderful people, who sponsor me on GitHub, their support h
|
||||
<sub><b>Umbrel</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href="https://github.com/OlliVHH">
|
||||
<img src="https://avatars.githubusercontent.com/u/84959562?v=4" width="80;" alt="OlliVHH"/>
|
||||
<br />
|
||||
<sub><b>HamburgerJung</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href="https://github.com/frankdez93">
|
||||
<img src="https://avatars.githubusercontent.com/u/87549420?v=4" width="80;" alt="frankdez93"/>
|
||||
@@ -1254,19 +1238,28 @@ Huge thanks to these wonderful people, who sponsor me on GitHub, their support h
|
||||
<sub><b>Terminal Trove</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a href="https://github.com/nrvo">
|
||||
<img src="https://avatars.githubusercontent.com/u/151435968?u=e1dcb307fd0efdc45cddbe9490a7b956e4da6835&v=4" width="80;" alt="nrvo"/>
|
||||
<a href="https://github.com/st617">
|
||||
<img src="https://avatars.githubusercontent.com/u/128325650?v=4" width="80;" alt="st617"/>
|
||||
<br />
|
||||
<sub><b>Nrvo</b></sub>
|
||||
<sub><b>st617</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href="https://github.com/hudsonrock-partnerships">
|
||||
<img src="https://avatars.githubusercontent.com/u/163282900?v=4" width="80;" alt="hudsonrock-partnerships"/>
|
||||
<img src="https://avatars.githubusercontent.com/u/163282900?u=5f2667f7fe5d284ac7a2da6b0800ea8970b0fcbf&v=4" width="80;" alt="hudsonrock-partnerships"/>
|
||||
<br />
|
||||
<sub><b>hudsonrock-partnerships</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href="https://github.com/CarterPerez-dev">
|
||||
<img src="https://avatars.githubusercontent.com/u/188120068?v=4" width="80;" alt="CarterPerez-dev"/>
|
||||
<br />
|
||||
<sub><b>Carter Perez</b></sub>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tbody>
|
||||
|
||||
@@ -2,12 +2,17 @@ import net from 'net';
|
||||
import middleware from './_common/middleware.js';
|
||||
|
||||
// A list of commonly used ports.
|
||||
const PORTS = [
|
||||
const DEFAULT_PORTS_TO_CHECK = [
|
||||
20, 21, 22, 23, 25, 53, 80, 67, 68, 69,
|
||||
110, 119, 123, 143, 156, 161, 162, 179, 194,
|
||||
389, 443, 587, 993, 995,
|
||||
3000, 3306, 3389, 5060, 5900, 8000, 8080, 8888
|
||||
];
|
||||
/*
|
||||
* Checks if the env PORTS_TO_CHECK is set, if so the string is split via "," to get an array of ports to check.
|
||||
* If the env is not set, return the default commonly used ports.
|
||||
*/
|
||||
const PORTS = process.env.PORTS_TO_CHECK ? process.env.PORTS_TO_CHECK.split(",") : DEFAULT_PORTS_TO_CHECK
|
||||
|
||||
async function checkPort(port, domain) {
|
||||
return new Promise((resolve, reject) => {
|
||||
|
||||
@@ -1,40 +1,116 @@
|
||||
import puppeteer from 'puppeteer-core';
|
||||
import chromium from 'chrome-aws-lambda';
|
||||
import middleware from './_common/middleware.js';
|
||||
import { execFile } from 'child_process';
|
||||
import { promises as fs } from 'fs';
|
||||
import path from 'path';
|
||||
import pkg from 'uuid';
|
||||
const { v4: uuidv4 } = pkg;
|
||||
|
||||
// Helper function for direct chromium screenshot as fallback
|
||||
const directChromiumScreenshot = async (url) => {
|
||||
console.log(`[DIRECT-SCREENSHOT] Starting direct screenshot process for URL: ${url}`);
|
||||
|
||||
// Create a tmp filename
|
||||
const tmpDir = '/tmp';
|
||||
const uuid = uuidv4();
|
||||
const screenshotPath = path.join(tmpDir, `screenshot-${uuid}.png`);
|
||||
|
||||
console.log(`[DIRECT-SCREENSHOT] Will save screenshot to: ${screenshotPath}`);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const chromePath = process.env.CHROME_PATH || '/usr/bin/chromium';
|
||||
const args = [
|
||||
'--headless',
|
||||
'--disable-gpu',
|
||||
'--no-sandbox',
|
||||
`--screenshot=${screenshotPath}`,
|
||||
url
|
||||
];
|
||||
|
||||
console.log(`[DIRECT-SCREENSHOT] Executing: ${chromePath} ${args.join(' ')}`);
|
||||
|
||||
execFile(chromePath, args, async (error, stdout, stderr) => {
|
||||
if (error) {
|
||||
console.error(`[DIRECT-SCREENSHOT] Chromium error: ${error.message}`);
|
||||
return reject(error);
|
||||
}
|
||||
|
||||
try {
|
||||
// Read the screenshot file
|
||||
const screenshotData = await fs.readFile(screenshotPath);
|
||||
console.log(`[DIRECT-SCREENSHOT] Screenshot read successfully`);
|
||||
|
||||
// Convert to base64
|
||||
const base64Data = screenshotData.toString('base64');
|
||||
|
||||
await fs.unlink(screenshotPath).catch(err =>
|
||||
console.warn(`[DIRECT-SCREENSHOT] Failed to delete temp file: ${err.message}`)
|
||||
);
|
||||
|
||||
resolve(base64Data);
|
||||
} catch (readError) {
|
||||
console.error(`[DIRECT-SCREENSHOT] Failed reading screenshot: ${readError.message}`);
|
||||
reject(readError);
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
const screenshotHandler = async (targetUrl) => {
|
||||
|
||||
console.log(`[SCREENSHOT] Request received for URL: ${targetUrl}`);
|
||||
|
||||
if (!targetUrl) {
|
||||
console.error('[SCREENSHOT] URL is missing from queryStringParameters');
|
||||
throw new Error('URL is missing from queryStringParameters');
|
||||
}
|
||||
|
||||
|
||||
if (!targetUrl.startsWith('http://') && !targetUrl.startsWith('https://')) {
|
||||
targetUrl = 'http://' + targetUrl;
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
new URL(targetUrl);
|
||||
} catch (error) {
|
||||
console.error(`[SCREENSHOT] URL provided is invalid: ${targetUrl}`);
|
||||
throw new Error('URL provided is invalid');
|
||||
}
|
||||
|
||||
// First try direct Chromium
|
||||
try {
|
||||
console.log(`[SCREENSHOT] Using direct Chromium method for URL: ${targetUrl}`);
|
||||
const base64Screenshot = await directChromiumScreenshot(targetUrl);
|
||||
console.log(`[SCREENSHOT] Direct screenshot successful`);
|
||||
return { image: base64Screenshot };
|
||||
} catch (directError) {
|
||||
console.error(`[SCREENSHOT] Direct screenshot method failed: ${directError.message}`);
|
||||
console.log(`[SCREENSHOT] Falling back to puppeteer method...`);
|
||||
}
|
||||
|
||||
// fall back puppeteer
|
||||
let browser = null;
|
||||
try {
|
||||
browser = await puppeteer.launch({
|
||||
console.log(`[SCREENSHOT] Launching puppeteer browser`);
|
||||
browser = await puppeteer.launch({
|
||||
args: [...chromium.args, '--no-sandbox'], // Add --no-sandbox flag
|
||||
defaultViewport: { width: 800, height: 600 },
|
||||
executablePath: process.env.CHROME_PATH || await chromium.executablePath,
|
||||
headless: chromium.headless,
|
||||
executablePath: process.env.CHROME_PATH || '/usr/bin/chromium',
|
||||
headless: true,
|
||||
ignoreHTTPSErrors: true,
|
||||
ignoreDefaultArgs: ['--disable-extensions'],
|
||||
});
|
||||
|
||||
|
||||
console.log(`[SCREENSHOT] Creating new page`);
|
||||
let page = await browser.newPage();
|
||||
|
||||
|
||||
console.log(`[SCREENSHOT] Setting page preferences`);
|
||||
await page.emulateMediaFeatures([{ name: 'prefers-color-scheme', value: 'dark' }]);
|
||||
page.setDefaultNavigationTimeout(8000);
|
||||
|
||||
console.log(`[SCREENSHOT] Navigating to URL: ${targetUrl}`);
|
||||
await page.goto(targetUrl, { waitUntil: 'domcontentloaded' });
|
||||
|
||||
|
||||
console.log(`[SCREENSHOT] Checking if body element exists`);
|
||||
await page.evaluate(() => {
|
||||
const selector = 'body';
|
||||
return new Promise((resolve, reject) => {
|
||||
@@ -45,14 +121,21 @@ const screenshotHandler = async (targetUrl) => {
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
console.log(`[SCREENSHOT] Taking screenshot`);
|
||||
const screenshotBuffer = await page.screenshot();
|
||||
|
||||
console.log(`[SCREENSHOT] Converting screenshot to base64`);
|
||||
const base64Screenshot = screenshotBuffer.toString('base64');
|
||||
|
||||
|
||||
console.log(`[SCREENSHOT] Screenshot complete, returning image`);
|
||||
return { image: base64Screenshot };
|
||||
|
||||
} catch (error) {
|
||||
console.error(`[SCREENSHOT] Puppeteer screenshot failed: ${error.message}`);
|
||||
throw error;
|
||||
} finally {
|
||||
if (browser !== null) {
|
||||
console.log(`[SCREENSHOT] Closing browser`);
|
||||
await browser.close();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "web-check",
|
||||
"type": "module",
|
||||
"version": "2.0.0",
|
||||
"version": "2.0.2",
|
||||
"homepage": "https://web-check.xyz",
|
||||
"scripts": {
|
||||
"start": "node server",
|
||||
|
||||
@@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="155" height="20" role="img" aria-label="Website: web-check.zyz"><title>Website: web-check.zyz</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="155" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="70" height="20" fill="#1c1d28"/><rect x="70" width="85" height="20" fill="#9fef00"/><rect width="155" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><image x="5" y="3" width="14" height="14" xlink:href="data:image/svg+xml;base64,PHN2ZyBmaWxsPSJ3aGl0ZSIgcm9sZT0iaW1nIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHRpdGxlPkdvb2dsZSBDbG91ZCBTdG9yYWdlPC90aXRsZT48cGF0aCBkPSJNMjQgMi40djguNGgtMi40VjIuNEgyNHpNMCAxMC44aDIuNFYyLjRIMHY4LjR6bTMtOC40aDE4djguNEgzVjIuNHptMTIuNiA0LjJhMS44IDEuOCAwIDEgMCAzLjYgMCAxLjggMS44IDAgMCAwLTMuNiAwem0tMTAuOC42SDEyVjZINC44djEuMnptMTYuOCAxNC40SDI0di04LjRoLTIuNHY4LjR6TTAgMjEuNmgyLjR2LTguNEgwdjguNHptMy04LjRoMTh2OC40SDN2LTguNHptMTIuNiA0LjJhMS44IDEuOCAwIDEgMCAzLjYgMCAxLjggMS44IDAgMCAwLTMuNiAwek00LjggMThIMTJ2LTEuMkg0LjhWMTh6Ii8+PC9zdmc+"/><text aria-hidden="true" x="445" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="430">Website</text><text x="445" y="140" transform="scale(.1)" fill="#fff" textLength="430">Website</text><text aria-hidden="true" x="1115" y="150" fill="#ccc" fill-opacity=".3" transform="scale(.1)" textLength="750">web-check.zyz</text><text x="1115" y="140" transform="scale(.1)" fill="#333" textLength="750">webcheck.zyz</text></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="155" height="20" role="img" aria-label="Website: web-check.xyz"><title>Website: web-check.xyz</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="155" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="70" height="20" fill="#1c1d28"/><rect x="70" width="85" height="20" fill="#9fef00"/><rect width="155" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><image x="5" y="3" width="14" height="14" xlink:href="data:image/svg+xml;base64,PHN2ZyBmaWxsPSJ3aGl0ZSIgcm9sZT0iaW1nIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHRpdGxlPkdvb2dsZSBDbG91ZCBTdG9yYWdlPC90aXRsZT48cGF0aCBkPSJNMjQgMi40djguNGgtMi40VjIuNEgyNHpNMCAxMC44aDIuNFYyLjRIMHY4LjR6bTMtOC40aDE4djguNEgzVjIuNHptMTIuNiA0LjJhMS44IDEuOCAwIDEgMCAzLjYgMCAxLjggMS44IDAgMCAwLTMuNiAwem0tMTAuOC42SDEyVjZINC44djEuMnptMTYuOCAxNC40SDI0di04LjRoLTIuNHY4LjR6TTAgMjEuNmgyLjR2LTguNEgwdjguNHptMy04LjRoMTh2OC40SDN2LTguNHptMTIuNiA0LjJhMS44IDEuOCAwIDEgMCAzLjYgMCAxLjggMS44IDAgMCAwLTMuNiAwek00LjggMThIMTJ2LTEuMkg0LjhWMTh6Ii8+PC9zdmc+"/><text aria-hidden="true" x="445" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="430">Website</text><text x="445" y="140" transform="scale(.1)" fill="#fff" textLength="430">Website</text><text aria-hidden="true" x="1115" y="150" fill="#ccc" fill-opacity=".3" transform="scale(.1)" textLength="750">web-check.xyz</text><text x="1115" y="140" transform="scale(.1)" fill="#333" textLength="750">webcheck.zyz</text></g></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
@@ -22,7 +22,7 @@ const siteInfo = {
|
||||
site: import.meta.env.SITE_URL || 'https://web-check.xyz',
|
||||
analytics: {
|
||||
enable: import.meta.env.ENABLE_ANALYTICS,
|
||||
domain: 'web-check.xyz',
|
||||
domain: 'web-check.as93.net',
|
||||
script: 'https://no-track.as93.net/js/script.js',
|
||||
},
|
||||
};
|
||||
@@ -92,8 +92,7 @@ const makeBreadcrumbs = () => {
|
||||
|
||||
<!-- Non-tracking hit counter -->
|
||||
{analytics.enable && (
|
||||
<script defer is:inline type="text/partytown"
|
||||
data-domain={analytics.domain} src={analytics.script}></script>
|
||||
<script defer data-domain={analytics.domain} src={analytics.script}></script>
|
||||
)}
|
||||
|
||||
<!-- Schema.org markup for Google -->
|
||||
|
||||
@@ -151,7 +151,7 @@ export const ExpandableRow = (props: RowProps) => {
|
||||
return (
|
||||
<StyledRow as="li" key={`${row.lbl}-${index}`}>
|
||||
<span className="lbl" title={row.title?.toString()}>{row.lbl}</span>
|
||||
<span className="val" title={row.val} onClick={() => copyToClipboard(row.val)}>
|
||||
<span className="val" title={row.val?.toString()} onClick={() => copyToClipboard(row.val)}>
|
||||
{formatValue(row.val)}
|
||||
</span>
|
||||
{ row.plaintext && <PlainText>{row.plaintext}</PlainText> }
|
||||
|
||||
@@ -11,15 +11,17 @@ const cardStyles = `
|
||||
`;
|
||||
|
||||
const RobotsTxtCard = ( props: { data: { robots: RowProps[]}, title: string, actionButtons: any}): JSX.Element => {
|
||||
const robots = props.data;
|
||||
const { data } = props;
|
||||
const robots = data?.robots || [];
|
||||
|
||||
return (
|
||||
<Card heading={props.title} actionButtons={props.actionButtons} styles={cardStyles}>
|
||||
<div className="content">
|
||||
{
|
||||
robots.robots.length === 0 && <p>No crawl rules found.</p>
|
||||
robots.length === 0 && <p>No crawl rules found.</p>
|
||||
}
|
||||
{
|
||||
robots.robots.map((row: RowProps, index: number) => {
|
||||
robots.map((row: RowProps, index: number) => {
|
||||
return (
|
||||
<Row key={`${row.lbl}-${index}`} lbl={row.lbl} val={row.val} />
|
||||
)
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
import styled from '@emotion/styled';
|
||||
import { useEffect } from 'react';
|
||||
import { useLocation } from 'react-router-dom';
|
||||
|
||||
import colors from 'web-check-live/styles/colors';
|
||||
import Heading from 'web-check-live/components/Form/Heading';
|
||||
@@ -118,6 +120,21 @@ const makeAnchor = (title: string): string => {
|
||||
};
|
||||
|
||||
const About = (): JSX.Element => {
|
||||
const location = useLocation();
|
||||
|
||||
useEffect(() => {
|
||||
// Scroll to hash fragment if present
|
||||
if (location.hash) {
|
||||
// Add a small delay to ensure the page has fully rendered
|
||||
setTimeout(() => {
|
||||
const element = document.getElementById(location.hash.slice(1));
|
||||
if (element) {
|
||||
element.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
||||
}
|
||||
}, 100);
|
||||
}
|
||||
}, [location]);
|
||||
|
||||
return (
|
||||
<div>
|
||||
<AboutContainer>
|
||||
|
||||
@@ -278,7 +278,7 @@ const Home = (): JSX.Element => {
|
||||
<Heading as="h2" size="small" color={colors.primary}>Supported Checks</Heading>
|
||||
<ul>
|
||||
{docs.map((doc, index) => (<li key={index}>{doc.title}</li>))}
|
||||
<li><Link to="/about">+ more!</Link></li>
|
||||
<li><Link to="/check/about">+ more!</Link></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className="links">
|
||||
@@ -288,7 +288,7 @@ const Home = (): JSX.Element => {
|
||||
<a target="_blank" rel="noreferrer" href="https://app.netlify.com/start/deploy?repository=https://github.com/lissy93/web-check" title="Deploy your own private or public instance of Web-Check to Netlify">
|
||||
<Button>Deploy your own</Button>
|
||||
</a>
|
||||
<Link to="/about#api-documentation" title="View the API documentation, to use Web-Check programmatically">
|
||||
<Link to="/check/about#api-documentation" title="View the API documentation, to use Web-Check programmatically">
|
||||
<Button>API Docs</Button>
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user