晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/proc/self/root/proc/thread-self/root/proc/self/root/opt/cpguard/app/resources/captcha/ |
| Current File : //proc/self/root/proc/thread-self/root/proc/self/root/opt/cpguard/app/resources/captcha/design.html |
<!--
NOTE :
This is the main HTML template for the captcha verification page.
Donot edit this file directly.
You can make a copy of this file as design_custom.html to customize the captcha page design.
The placeholder for the CAPTCHA widget will be replaced dynamically with the actual captcha widget code.
Do NOT remove the placeholder, as it is essential for the captcha functionality.
We do basic minification of this file during deployment.
Make sure to avoid multiline strings in quotes to prevent issues during minification.
-->
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title data-i18n="page_title">Security Check Required</title>
<meta name="description" content="Security verification required to continue." />
<style>
:root {
/* LIGHT MODE (Default) */
--bg0: #eef2f7;
--bg1: #f7f9fc;
--glass: rgba(255, 255, 255, .58);
--glass-2: rgba(255, 255, 255, .42);
--glass-solid: rgba(255, 255, 255, .70);
--line: rgba(15, 23, 42, .12);
--line-2: rgba(15, 23, 42, .08);
--text: #0f172a;
--muted: #5b667a;
--accent: #dc2626;
--card-bg: white;
--card-side-bg: rgba(255, 255, 255, .38);
--radius: 10px;
--radius-sm: 10px;
--shadow: 0 10px 30px rgba(15, 23, 42, .08);
--mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--sans: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji";
}
/* DARK MODE SUPPORT */
@media (prefers-color-scheme: dark) {
:root {
--bg0: #020617;
--bg1: #0f172a;
--glass: rgba(15, 23, 42, .60);
--glass-2: rgba(15, 23, 42, .42);
--glass-solid: rgba(30, 41, 59, .70);
--line: rgba(255, 255, 255, .15);
--line-2: rgba(255, 255, 255, .10);
--text: #f1f5f9;
--muted: #94a3b8;
--accent: #ef4444;
--card-bg: #1e293b;
--card-side-bg: rgba(30, 41, 59, .50);
--shadow: 0 10px 30px rgba(0, 0, 0, .5);
}
body:before {
opacity: .08;
/* Reduce noise opacity in dark mode */
}
.mark {
background: radial-gradient(90px 60px at 30% 20%, rgba(255, 255, 255, .10), transparent 60%),
linear-gradient(180deg, rgba(220, 38, 38, .2), rgba(255, 255, 255, .05)) !important;
}
.side h2,
.side h3,
.item strong {
color: #e2e8f0 !important;
}
/* Checkbox/Input adjustments for dark mode */
}
* {
box-sizing: border-box;
}
html,
body {
height: 100%;
}
body {
margin: 0;
font-family: var(--sans);
color: var(--text);
background:
radial-gradient(900px 500px at 18% 10%, rgba(99, 102, 241, .10), transparent 60%),
radial-gradient(900px 500px at 80% 0%, rgba(16, 185, 129, .08), transparent 55%),
radial-gradient(900px 500px at 72% 92%, rgba(220, 38, 38, .06), transparent 60%),
linear-gradient(180deg, var(--bg1), var(--bg0));
line-height: 1.35;
-webkit-font-smoothing: antialiased;
overflow-x: hidden;
}
body:before {
content: "";
position: fixed;
inset: 0;
pointer-events: none;
background: repeating-linear-gradient(0deg, rgba(255, 255, 255, .035) 0 1px, transparent 1px 2px);
opacity: .18;
mix-blend-mode: overlay;
}
.page {
min-height: 100%;
display: flex;
flex-direction: column;
}
.topbar {
position: sticky;
top: 0;
z-index: 10;
background: var(--glass);
backdrop-filter: blur(14px) saturate(140%);
-webkit-backdrop-filter: blur(14px) saturate(140%);
border-bottom: 1px solid var(--line-2);
}
.topbar-inner {
max-width: 1040px;
margin: 0 auto;
padding: 16px 20px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
}
.brand {
display: flex;
align-items: baseline;
gap: 10px;
min-width: 0;
}
.domain {
font-weight: 650;
letter-spacing: -.02em;
font-size: 16px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
color: var(--text);
}
.status {
font-size: 12px;
color: var(--muted);
font-family: var(--mono);
border: 1px solid var(--line-2);
padding: 6px 10px;
border-radius: var(--radius-sm);
background: rgba(255, 255, 255, .55);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
white-space: nowrap;
display: none;
}
.status-top {
font-size: 12px;
color: var(--muted);
font-family: var(--mono);
border: 1px solid var(--line-2);
padding: 6px 10px;
border-radius: var(--radius-sm);
background: rgba(255, 255, 255, .55);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
white-space: nowrap;
}
.main {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
padding: 28px 20px 18px;
}
.wrap {
width: 100%;
max-width: 1040px;
display: grid;
grid-template-columns: 1.1fr .9fr;
gap: 18px;
align-items: start;
}
.card-main {
border-radius: var(--radius);
background-color: var(--card-bg);
overflow: hidden;
}
.side {
outline-offset: -1px;
padding: 20px 18px;
}
.hero {
padding: 22px 22px 18px;
display: grid;
grid-template-columns: 56px 1fr;
gap: 16px;
align-items: start;
}
.mark {
width: 56px;
height: 56px;
border-radius: 14px;
background:
radial-gradient(90px 60px at 30% 20%, rgba(255, 255, 255, .70), transparent 60%),
linear-gradient(180deg, rgba(220, 38, 38, .14), rgba(255, 255, 255, .02));
border: 1px solid rgba(220, 38, 38, .18);
box-shadow: 0 8px 18px rgba(15, 23, 42, .06);
display: grid;
place-items: center;
}
.mark svg {
width: 28px;
height: 28px;
color: var(--accent);
}
h1 {
margin: 0 0 6px 0;
font-size: 22px;
letter-spacing: -.03em;
font-weight: 720;
color: var(--text);
}
.lead {
margin: 0;
color: var(--muted);
font-size: 13px;
max-width: 64ch;
}
.captcha {
border-top: 1px solid var(--line-2);
padding: 16px 22px 20px;
display: grid;
gap: 12px;
}
.captcha-title h2 {
margin: 0;
font-size: 13px;
font-weight: 700;
letter-spacing: -.01em;
color: var(--text);
}
.captcha-box {
background: radial-gradient(230px 140px at 22% 37%, rgba(255, 255, 255, 0.12), transparent 51%),
linear-gradient(180deg, rgba(255, 255, 255, .14), rgba(255, 255, 255, .08));
border: 1px solid var(--line-2);
border-radius: var(--radius-sm);
padding: 15px;
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
box-shadow: 0 10px 22px rgba(15, 23, 42, .05);
}
.captcha-left {
display: flex;
align-items: center;
gap: 8px;
position: relative;
float: left
}
.side h2 {
margin: 0 0 10px 0;
font-size: 18px;
font-weight: 760;
letter-spacing: -.01em;
color: #4e5d7c;
}
.side h3 {
margin: 0 0 10px 0;
font-size: 14px;
font-weight: 760;
letter-spacing: -.01em;
color: #4e5d7c;
}
.side p {
margin: 0 0 12px 0;
color: var(--muted);
font-size: 13px;
}
.list {
margin: 0;
padding: 0;
list-style: none;
display: grid;
gap: 10px;
}
.item {
margin-left: -10px;
border-radius: var(--radius-sm);
padding: 12px;
background: var(--card-side-bg);
backdrop-filter: blur(12px);
}
.item strong {
display: block;
font-size: 13px;
letter-spacing: -.01em;
margin-bottom: 2px;
font-weight: 720;
color: #4e5d7c;
}
.item span {
font-size: 12px;
color: var(--muted);
}
.actions {
margin-top: 12px;
display: flex;
gap: 10px;
flex-wrap: wrap;
}
.btn {
appearance: none;
border: 1px solid var(--line);
background: var(--glass-solid);
color: var(--text);
padding: 10px 12px;
border-radius: var(--radius-sm);
font-size: 13px;
font-weight: 700;
letter-spacing: -.01em;
cursor: pointer;
backdrop-filter: blur(12px);
transition: all .18s ease;
}
.btn:hover {
border-color: rgba(15, 23, 42, .22);
box-shadow: 0 10px 22px rgba(15, 23, 42, .06);
background: var(--bg0);
}
@media (prefers-color-scheme: dark) {
.btn:hover {
border-color: #fff;
}
}
.btn-primary {
border-color: rgba(220, 38, 38, .24);
background: linear-gradient(180deg, rgba(220, 38, 38, .12), rgba(255, 255, 255, .05));
}
footer {
padding: 0 0 14px;
}
.footer-inner {
max-width: 1040px;
margin: 0 auto;
padding: 14px 20px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
color: var(--muted);
font-size: 12px;
}
.footer-left {
display: flex;
align-items: center;
gap: 10px;
min-width: 0;
}
.footer-logo {
height: 32px;
width: auto;
display: block;
opacity: .95;
}
@media (max-width: 900px) {
.wrap {
grid-template-columns: 1fr;
}
.hero {
grid-template-columns: 52px 1fr;
padding: 20px 18px 16px;
}
.captcha {
padding: 14px 18px 18px;
}
.side {
padding: 18px;
}
h1 {
font-size: 20px;
}
}
</style>
</head>
<body>
<div class="page">
<header class="topbar">
<div class="topbar-inner">
<div class="brand" title="Requested host">
<div id="hostname" data-i18n="">Firewall Block</div>
</div>
<div class="status-top" data-i18n="status_badge">SECURITY CHECK</div>
</div>
</header>
<main class="main">
<div class="wrap">
<section class="card card-main" aria-labelledby="title">
<div class="hero">
<div class="mark" aria-hidden="true">
<svg fill="currentColor" width="32px" height="32px" viewBox="0 0 512 512"
xmlns="http://www.w3.org/2000/svg">
<path
d="M79.2,211.44h0c15.52-8.82,34.91-2.28,43.31,13.68l41.38,84.41a7,7,0,0,0,8.93,3.43h0a7,7,0,0,0,4.41-6.52V72c0-13.91,12.85-24,26.77-24s26,10.09,26,24V228.64A11.24,11.24,0,0,0,240.79,240,11,11,0,0,0,252,229V24c0-13.91,10.94-24,24.86-24S302,10.09,302,24V228.64A11.24,11.24,0,0,0,312.79,240,11,11,0,0,0,324,229V56c0-13.91,12.08-24,26-24s26,11.09,26,25V244.64A11.24,11.24,0,0,0,386.79,256,11,11,0,0,0,398,245V120c0-13.91,11.08-24,25-24s25.12,10.22,25,24V336c0,117.41-72,176-160,176H272c-88,0-115.71-39.6-136-88L67.33,255C60.67,237,63.69,220.25,79.2,211.44Z" />
</svg>
</div>
<div>
<h1 id="title" data-i18n="main_title">Verify you are human</h1>
<p class="lead" data-i18n="main_lead">
We detected unusual traffic patterns from your network. Please complete the verification
to continue.
</p>
</div>
</div>
<div class="captcha">
<div class="captcha-title">
<h2 data-i18n="captcha_title">Human verification</h2>
</div>
<div class="captcha-box">
<!-- Mandatory Placeholder for the captcha -->
{{captcha}}
<!-- Mandatory Placeholder for the captcha -->
</div>
<div class="actions">
<button class="btn btn-primary" type="button" onclick="location.reload()"
data-i18n="btn_retry">Try
again</button>
</div>
</div>
</section>
<aside class="card side" aria-label="Information">
<h2 data-i18n="aside_title">What happened?</h2>
<p data-i18n="aside_text">
We use automated security to prevent abusive traffic. Your IP is currently blocked or has been
flagged for unusual activity.
</p>
<h3 data-i18n="aside_subtitle">What can I do?</h3>
<ul class="list">
<li class="item">
<strong data-i18n="item_visitor_title">If you are a visitor</strong>
<span data-i18n="item_visitor_text">Complete the verification above, then retry. If it
persists, wait for some time and try again.</span>
</li>
<li class="item">
<strong data-i18n="item_owner_title">If you are the site owner</strong>
<span data-i18n="item_owner_text">Review cPGuard firewall/WAF/LFD activity to identify
the trigger. If appropriate, whitelist or remove the IP from temporary blocklist.</span>
</li>
</ul>
</aside>
</div>
</main>
<footer>
<div class="footer-inner">
<div class="footer-left">
<img class="footer-logo" src="https://opsshield.com/images/cpguard-logo.svg" alt="cPGuard" />
<div class="footer-text">© <span id="y"></span> cPGuard. <span data-i18n="rights">All rights
reserved.</span></div>
</div>
<div><span data-i18n="protected_by">Protected by</span> <strong>cPGuard Firewall</strong></div>
</div>
</footer>
</div>
</body>
<script>
// set dynamic host and year values
document.getElementById("hostname").textContent = window.location.hostname;
document.getElementById("y").textContent = new Date().getFullYear();
// --- LANGUAGE CONFIGURATION ---
const translations = {
"en": {
page_title: "Security Check Required",
brand: "Firewall Block",
status_badge: "SECURITY CHECK",
main_title: "Verify you are human",
main_lead: "We detected unusual traffic patterns from your network. Please complete the verification to continue.",
captcha_title: "Human verification",
msg_verified: "✅ Verified — redirecting…",
msg_failed: "❌ Verification failed. Please try again.",
btn_retry: "Try again",
aside_title: "What happened?",
aside_text: "We use automated security systems to prevent abusive traffic. Your IP address has been temporarily blocked or flagged for unusual activity.",
aside_subtitle: "What can I do?",
item_visitor_title: "If you are a visitor",
item_visitor_text: "Complete the verification above and try again. If the issue persists, please wait a while and retry.",
item_owner_title: "If you are the site owner",
item_owner_text: "Review cPGuard firewall/WAF/LFD activity logs to identify the trigger. If appropriate, whitelist the IP address.",
rights: "All rights reserved.",
protected_by: "Protected by",
widget_success: "Verified. Redirecting…",
widget_error: "Verification failed. Reloading…",
captcha_verifying: "Verifying…",
captcha_label: "I’m not a robot",
captcha_badge: "VERIFY"
},
"pt-BR": {
page_title: "Verificação de Segurança Necessária",
brand: "Bloqueio de Firewall",
status_badge: "VERIFICAÇÃO DE SEGURANÇA",
main_title: "Confirme que você é humano",
main_lead: "Detectamos padrões de tráfego incomuns na sua rede. Conclua a verificação para continuar.",
captcha_title: "Verificação humana",
msg_verified: "✅ Verificado — redirecionando…",
msg_failed: "❌ Falha na verificação. Tente novamente.",
btn_retry: "Tentar novamente",
aside_title: "O que aconteceu?",
aside_text: "Utilizamos sistemas de segurança automatizados para prevenir tráfego abusivo. Seu endereço IP foi temporariamente bloqueado ou sinalizado.",
aside_subtitle: "O que posso fazer?",
item_visitor_title: "Se você for um visitante",
item_visitor_text: "Conclua a verificação acima e tente novamente. Se o problema persistir, aguarde alguns instantes e tente de novo.",
item_owner_title: "Se você for o proprietário do site",
item_owner_text: "Verifique os logs do firewall/WAF/LFD do cPGuard para identificar o motivo. Se necessário, adicione o IP à lista de permissões.",
rights: "Todos os direitos reservados.",
protected_by: "Protegido por",
widget_success: "Verificado. Redirecionando…",
widget_error: "Falha na verificação. Recarregando…",
captcha_verifying: "Verificando…",
captcha_label: "Não sou um robô",
captcha_badge: "VERIFICAR"
},
"es": {
page_title: "Verificación de Seguridad Requerida",
brand: "Bloqueo del Firewall",
status_badge: "CONTROL DE SEGURIDAD",
main_title: "Verifique que es humano",
main_lead: "Hemos detectado tráfico inusual desde su red. Por favor, complete la verificación para continuar.",
captcha_title: "Verificación humana",
msg_verified: "✅ Verificado — redirigiendo…",
msg_failed: "❌ La verificación falló. Inténtelo de nuevo.",
btn_retry: "Intentar de nuevo",
aside_title: "¿Qué ocurrió?",
aside_text: "Utilizamos sistemas de seguridad automatizados para prevenir tráfico abusivo. Su dirección IP ha sido bloqueada temporalmente o marcada por actividad inusual.",
aside_subtitle: "¿Qué puedo hacer?",
item_visitor_title: "Si es un visitante",
item_visitor_text: "Complete la verificación anterior y vuelva a intentarlo. Si el problema persiste, espere un momento e inténtelo de nuevo.",
item_owner_title: "Si es el propietario del sitio",
item_owner_text: "Revise los registros del firewall/WAF/LFD de cPGuard para identificar la causa. Si corresponde, agregue el IP a la lista blanca.",
rights: "Todos los derechos reservados.",
protected_by: "Protegido por",
widget_success: "Verificado. Redirigiendo…",
widget_error: "Falló la verificación. Recargando…",
captcha_verifying: "Verificando…",
captcha_label: "No soy un robot",
captcha_badge: "VERIFICAR"
},
"ru": {
page_title: "Требуется проверка безопасности",
brand: "Блокировка брандмауэра",
status_badge: "ПРОВЕРКА БЕЗОПАСНОСТИ",
main_title: "Подтвердите, что вы человек",
main_lead: "Мы обнаружили необычный трафик из вашей сети. Пожалуйста, пройдите проверку, чтобы продолжить.",
captcha_title: "Проверка человека",
msg_verified: "✅ Проверено — перенаправление…",
msg_failed: "❌ Проверка не удалась. Попробуйте снова.",
btn_retry: "Попробовать снова",
aside_title: "Что произошло?",
aside_text: "Мы используем автоматические системы защиты для предотвращения вредоносного трафика. Ваш IP-адрес был временно заблокирован или отмечен как подозрительный.",
aside_subtitle: "Что можно сделать?",
item_visitor_title: "Если вы посетитель",
item_visitor_text: "Пройдите проверку выше и повторите попытку. Если проблема сохраняется, подождите некоторое время и попробуйте снова.",
item_owner_title: "Если вы владелец сайта",
item_owner_text: "Проверьте журналы firewall/WAF/LFD в cPGuard, чтобы определить причину. При необходимости добавьте IP в белый список.",
rights: "Все права защищены.",
protected_by: "Защищено",
widget_success: "Проверка пройдена. Перенаправление…",
widget_error: "Ошибка проверки. Перезагрузка…",
captcha_verifying: "Проверка…",
captcha_label: "Я не робот",
captcha_badge: "ПРОВЕРИТЬ"
},
"ko": {
page_title: "보안 확인이 필요합니다",
brand: "방화벽 차단",
status_badge: "보안 검사",
main_title: "사람인지 확인해 주세요",
main_lead: "귀하의 네트워크에서 비정상적인 트래픽이 감지되었습니다. 계속하려면 확인을 완료해 주세요.",
captcha_title: "사람 확인",
msg_verified: "✅ 확인됨 — 이동 중…",
msg_failed: "❌ 확인에 실패했습니다. 다시 시도해 주세요.",
btn_retry: "다시 시도",
aside_title: "무슨 일이 발생했나요?",
aside_text: "비정상적인 트래픽을 방지하기 위해 자동 보안 시스템을 사용하고 있습니다. 귀하의 IP 주소가 일시적으로 차단되었거나 의심스러운 활동으로 표시되었습니다.",
aside_subtitle: "어떻게 하면 되나요?",
item_visitor_title: "방문자인 경우",
item_visitor_text: "위의 확인을 완료한 후 다시 시도해 주세요. 문제가 계속되면 잠시 후 다시 시도하십시오.",
item_owner_title: "사이트 소유자인 경우",
item_owner_text: "cPGuard 방화벽/WAF/LFD 로그를 확인하여 원인을 파악하고, 필요 시 IP를 허용 목록에 추가하십시오.",
rights: "모든 권리 보유.",
protected_by: "보호 제공:",
widget_success: "확인됨. 이동 중…",
widget_error: "확인 실패. 다시 로드 중…",
captcha_verifying: "확인 중…",
captcha_label: "로봇이 아닙니다",
captcha_badge: "확인"
}
};
function applyLanguage() {
const browserLang = navigator.language || navigator.userLanguage;
let langKey = 'en'; // Default
if (translations[browserLang]) {
langKey = browserLang;
} else {
const shortCode = browserLang.split('-')[0];
if (translations[shortCode]) {
langKey = shortCode;
}
}
t = translations[langKey];
document.querySelectorAll('[data-i18n]').forEach(el => {
const key = el.getAttribute('data-i18n');
if (t[key]) {
el.textContent = t[key];
}
});
const widget = document.getElementById('altchaBox');
if (widget) {
if (t.widget_success) widget.setAttribute('success-text', t.widget_success);
if (t.widget_error) widget.setAttribute('error-text', t.widget_error);
}
document.documentElement.lang = langKey;
}
applyLanguage();
</script>
</html> |