This commit is contained in:
2026-11-11 16:07:24 -08:00
parent 7968973574
commit e4b19d1696
6 changed files with 915 additions and 5 deletions

253
down.html Normal file
View File

@@ -0,0 +1,253 @@
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta name="robots" content="noindex, nofollow">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Unavailable For Legal Reasons</title>
<link rel="stylesheet" href="/cdn-cgi/styles/main.css">
<script>
(function () {
const state = {
errorCode: null,
rayId: null,
timestamp: null,
ip: null
};
function getRayId() {
const candidates = [
document.querySelector('[data-ray-id]')?.dataset.rayId,
document.querySelector('meta[name="cf-ray"]')?.content
];
for (const value of candidates) {
if (value && /^[a-f0-9-]+$/i.test(value)) {
return value;
}
}
return null;
}
function getTimestamp() {
const candidates = [
document.querySelector('[data-timestamp]')?.dataset.timestamp,
document.querySelector('meta[name="cf-timestamp"]')?.content
];
for (const value of candidates) {
if (value && !Number.isNaN(Date.parse(value))) {
return new Date(value);
}
}
return new Date();
}
function setText(id, value, fallback = 'Unavailable') {
const element = document.getElementById(id);
if (element) element.textContent = value || fallback;
}
function initialize() {
const heading = document.querySelector('h1');
const errorMatch = heading?.textContent.match(/\b\d{3}\b/);
state.errorCode = errorMatch ? errorMatch[0] : null;
state.rayId = getRayId();
state.timestamp = getTimestamp();
setText('error-code', state.errorCode, '');
setText('ray-id', state.rayId);
setText('timestamp', state.timestamp.toISOString().replace('T', ' ').replace(/\.\d{3}Z$/, ' UTC'));
if (!state.errorCode) {
document.getElementById('error-code').hidden = true;
}
if (!state.rayId) {
document.getElementById('ray-information').hidden = true;
}
if (document.querySelector('title')) {
document.title = document.querySelector('h2')?.textContent.trim() || 'Unavailable';
}
}
async function getVisitorIP() {
const ipElement = document.getElementById('cf-footer-ip');
const revealButton = document.getElementById('cf-footer-ip-reveal');
const container = document.getElementById('cf-footer-item-ip');
try {
const response = await fetch('https://api.ipify.org?format=json', {
cache: 'no-store'
});
if (!response.ok) throw new Error('IP lookup failed');
const data = await response.json();
if (!data.ip) throw new Error('IP address unavailable');
ipElement.textContent = data.ip;
ipElement.classList.add('hidden');
revealButton.hidden = false;
container.classList.remove('hidden');
revealButton.onclick = function () {
ipElement.classList.remove('hidden');
revealButton.hidden = true;
};
} catch (error) {
container.classList.add('hidden');
console.error('Unable to retrieve visitor IP:', error);
}
}
function sendFeedback(helpful) {
const survey = document.getElementById('error-feedback-survey');
const success = document.getElementById('error-feedback-success');
if (!survey || !success) return;
survey.classList.add('feedback-hidden');
success.classList.remove('feedback-hidden');
}
document.addEventListener('DOMContentLoaded', function () {
initialize();
getVisitorIP();
const feedback = document.getElementById('error-feedback');
const yes = document.getElementById('feedback-button-yes');
const no = document.getElementById('feedback-button-no');
const reveal = document.getElementById('cf-footer-ip-reveal');
if (feedback && yes && no && 'classList' in feedback) {
feedback.classList.remove('feedback-hidden');
yes.addEventListener('click', () => sendFeedback(true));
no.addEventListener('click', () => sendFeedback(false));
}
if (reveal) {
reveal.addEventListener('click', function () {
reveal.hidden = true;
document.getElementById('cf-footer-ip').classList.remove('hidden');
});
}
});
})();
</script>
</head>
<body>
<div id="cf-wrapper">
<div class="cf-alert cf-alert-error cf-cookie-error hidden" id="cookie-alert" data-translate="enable_cookies">
Please enable cookies.
</div>
<div id="cf-error-details" class="p-0">
<header class="mx-auto pt-10 lg:pt-6 lg:px-8 w-240 lg:w-full mb-15 antialiased">
<h1
class="inline-block md:block mr-2 md:mb-2 font-light text-60 md:text-3xl text-black-dark leading-tight">
<span data-translate="error">Error 451</span>
</h1>
<span id="ray-information"
class="inline-block md:block heading-ray-id font-mono text-15 lg:text-sm lg:leading-relaxed">
Ray ID: <span id="ray-id"></span>
</span>
<span class="inline-block md:block heading-ray-id font-mono text-15 lg:text-sm lg:leading-relaxed"
id="timestamp"></span>
<h2 class="text-gray-600 leading-1.3 text-3xl lg:text-2xl font-light">
Unavailable For Legal Reasons
</h2>
</header>
<section class="w-240 lg:w-full mx-auto mb-8 lg:px-8">
<div id="what-happened-section" class="w-1/2 md:w-full">
<h2 class="text-3xl leading-tight font-normal mb-4 text-black-dark antialiased"
data-translate="what_happened">
What happened?
</h2>
<p>This website is unavailable for legal reasons.</p>
</div>
</section>
<div class="feedback-hidden py-8 text-center" id="error-feedback">
<div id="error-feedback-survey" class="footer-line-wrapper">
Was this page helpful?
<button class="border border-solid bg-white cf-button cursor-pointer ml-4 px-4 py-2 rounded"
id="feedback-button-yes" type="button">
Yes
</button>
<button class="border border-solid bg-white cf-button cursor-pointer ml-4 px-4 py-2 rounded"
id="feedback-button-no" type="button">
No
</button>
</div>
<div class="feedback-success feedback-hidden" id="error-feedback-success">
Thank you for your feedback!
</div>
</div>
<div
class="cf-error-footer cf-wrapper w-240 lg:w-full py-10 sm:py-4 sm:px-8 mx-auto text-center sm:text-left border-solid border-0 border-t border-gray-300">
<p class="text-13">
<span class="cf-footer-item sm:block sm:mb-1">
Cloudflare Ray ID:
<strong class="font-semibold" id="footer-ray-id">Unavailable</strong>
</span>
<span class="cf-footer-separator sm:hidden">&bull;</span>
<span id="cf-footer-item-ip" class="cf-footer-item hidden sm:block sm:mb-1">
Your IP:
<button type="button" id="cf-footer-ip-reveal" class="cf-footer-ip-reveal-btn">
Click to reveal
</button>
<span class="hidden" id="cf-footer-ip"></span>
</span>
<span class="cf-footer-separator sm:hidden">&bull;</span>
<span class="cf-footer-item sm:block sm:mb-1">
<span>Performance &amp; security by</span>
<a rel="noopener noreferrer" href="https://www.cloudflare.com/5xx-error-landing" id="brand_link"
target="_blank">
Cloudflare
</a>
</span>
</p>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function () {
const ray = document.getElementById('ray-id');
const footerRay = document.getElementById('footer-ray-id');
if (ray && footerRay && ray.textContent.trim()) {
footerRay.textContent = ray.textContent;
}
});
</script>
<div id="ts-blocks" hidden></div>
</body>
</html>