diff --git a/services/caddy/Caddyfile b/services/caddy/Caddyfile index bd5f80b..b779aed 100644 --- a/services/caddy/Caddyfile +++ b/services/caddy/Caddyfile @@ -110,10 +110,13 @@ truenews.sesur.dev { file_server } t.sesur.dev { - basicauth { + root * /opt/homelab/services/mtproto_page/xk9m2p4q7 + + @data path /data.json + basicauth @data { pvlx $2b$05$wXo0zmemeoOJ3ukx4pORSuq/9IoH/Lo5PIvGk3uzNvcAMmtpjI1o2 } - root * /opt/homelab/services/mtproto_page/xk9m2p4q7 + file_server header { X-Robots-Tag "noindex, nofollow" diff --git a/services/mtproto_page/xk9m2p4q7/data.json b/services/mtproto_page/xk9m2p4q7/data.json new file mode 100644 index 0000000..c6f520c --- /dev/null +++ b/services/mtproto_page/xk9m2p4q7/data.json @@ -0,0 +1,23 @@ +[ + { + "name": "Finland", + "flag": "🇫🇮", + "server": "31.57.61.253", + "port": 8443, + "secret": "ee6a2be996de31501c347f0f690fa9163e6d61782e7275" + }, + { + "name": "Sweden", + "flag": "🇸🇪", + "server": "77.221.137.83", + "port": 8443, + "secret": "eeeb5a33684ac1e9005e0364b58502a2016d61782e7275" + }, + { + "name": "Paris", + "flag": "🇫🇷", + "server": "45.39.255.201", + "port": 8443, + "secret": "ee47c0a56f112a9e015c15aa4ed2fe5d5f6d61782e7275" + } +] diff --git a/services/mtproto_page/xk9m2p4q7/index.html b/services/mtproto_page/xk9m2p4q7/index.html index 11214e5..0a24fcb 100644 --- a/services/mtproto_page/xk9m2p4q7/index.html +++ b/services/mtproto_page/xk9m2p4q7/index.html @@ -15,6 +15,7 @@ --accent2: #7b2fff; --text: #c8c8d8; --dim: #55556a; + --danger: #ff3b6b; --mono: 'Space Mono', monospace; --sans: 'Syne', sans-serif; } @@ -107,9 +108,75 @@ 50% { opacity: 0.3; } } + /* ── auth wall ── */ + #auth-wall { + width: 100%; max-width: 360px; + display: flex; flex-direction: column; gap: 1.5rem; + animation: fadeUp 0.4s ease both; + } + .auth-label { + font-size: 0.65rem; letter-spacing: 0.12em; + text-transform: uppercase; color: var(--dim); + margin-bottom: 0.5rem; + } + .auth-label span { color: var(--accent); } + .input-wrap { + position: relative; + } + .input-wrap input { + width: 100%; + background: var(--surface); + border: 1px solid var(--border); + color: #fff; + font-family: var(--mono); font-size: 0.9rem; + padding: 0.85rem 3rem 0.85rem 1rem; + outline: none; + transition: border-color 0.2s; + letter-spacing: 0.05em; + } + .input-wrap input:focus { border-color: var(--accent); } + .input-wrap input.error { border-color: var(--danger); } + .input-wrap button { + position: absolute; right: 0; top: 0; bottom: 0; + width: 48px; background: none; border: none; cursor: pointer; + color: var(--dim); font-size: 1.1rem; + transition: color 0.2s; + } + .input-wrap button:hover { color: var(--accent); } + .err-msg { + font-size: 0.7rem; color: var(--danger); + margin-top: 0.5rem; display: none; + } + .err-msg.show { display: block; } + .btn-primary { + width: 100%; + background: transparent; + border: 1px solid var(--accent); + color: var(--accent); + font-family: var(--mono); font-size: 0.8rem; + letter-spacing: 0.1em; text-transform: uppercase; + padding: 0.9rem; + cursor: pointer; + position: relative; overflow: hidden; + transition: color 0.2s; + } + .btn-primary:disabled { opacity: 0.5; cursor: default; } + .btn-primary::before { + content: ''; + position: absolute; inset: 0; + background: var(--accent); + transform: translateX(-100%); + transition: transform 0.25s ease; + z-index: -1; + } + .btn-primary:not(:disabled):hover { color: var(--bg); } + .btn-primary:not(:disabled):hover::before { transform: translateX(0); } + + /* ── proxy list ── */ #proxy-list { width: 100%; max-width: 680px; - display: flex; flex-direction: column; gap: 1rem; + display: none; + flex-direction: column; gap: 1rem; animation: fadeUp 0.4s ease both; } @@ -152,10 +219,7 @@ font-weight: 700; font-size: 1rem; color: #fff; letter-spacing: -0.01em; } - .node-flag { - margin-left: auto; - font-size: 1.2rem; - } + .node-flag { margin-left: auto; font-size: 1.2rem; } .card-meta { display: grid; grid-template-columns: auto 1fr; gap: 0.3rem 1rem; @@ -164,9 +228,7 @@ .card-meta .key { color: var(--dim); } .card-meta .val { color: var(--text); font-size: 0.68rem; word-break: break-all; } - .card-actions { - display: flex; gap: 0.5rem; flex-wrap: wrap; - } + .card-actions { display: flex; gap: 0.5rem; flex-wrap: wrap; } .btn-tg { flex: 1; background: linear-gradient(90deg, var(--accent2), #4a1fff); @@ -232,6 +294,18 @@
Введи пароль
+Неправильный пароль. Ты знаешь кому писать.
+// Доступные прокси — Telegram MTProto