rebrand: Klassenportal, domain info1.ifb.lol, server status
- Replace INFO1 brand with Klassenportal everywhere (titles, nav, emails, TOTP issuer, recovery codes) - Update domain from info1.simon0x.xyz to info1.ifb.lol - Remove E2EE claims (e2ee.js was deleted, claims were false) - Add GET /api/health endpoint (DB check + uptime) - Add live server status section to landing page - Fix README: domain, title, layout table
This commit is contained in:
+10
-15
@@ -3,12 +3,11 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>INFO1 · Dashboard</title>
|
||||
<title>Klassenportal · Dashboard</title>
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
|
||||
<script src="https://unpkg.com/lucide@latest/dist/umd/lucide.min.js"></script>
|
||||
<script src="/e2ee.js"></script>
|
||||
<style>
|
||||
:root {
|
||||
--blue: #2563eb; --blue-d: #1d4ed8;
|
||||
@@ -1018,10 +1017,10 @@ footer {
|
||||
<button id="sidebar-btn" class="h-icon-btn" onclick="openSidebar()" title="Menü" aria-label="Seitenleiste öffnen">☰</button>
|
||||
|
||||
<div class="brand" onclick="location.href='/'">
|
||||
<div class="brand-mark">i1</div>
|
||||
<div class="brand-mark">KP</div>
|
||||
<div class="brand-text">
|
||||
<span class="brand-sub">Klassenportal</span>
|
||||
<span class="brand-name">INFO1</span>
|
||||
<span class="brand-name">Klassenportal</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1426,7 +1425,7 @@ footer {
|
||||
<div id="fs-backdrop" onclick="closeOverlay()"></div>
|
||||
|
||||
<footer>
|
||||
<div class="footer-left">Daten auf <strong>Hetzner-Server, Nürnberg, Deutschland</strong> · EU-DSGVO konform</div>
|
||||
<div class="footer-left">Daten auf <strong>Server in Deutschland</strong> · EU-DSGVO konform</div>
|
||||
<div class="footer-links">
|
||||
<a href="/datenschutz">Datenschutzerklärung</a>
|
||||
</div>
|
||||
@@ -1745,7 +1744,7 @@ function loginUI(username,id,role,subject){
|
||||
|
||||
loadSubjectsDatalist();
|
||||
loadAll();
|
||||
initChat(username, id);
|
||||
initChat(username);
|
||||
}
|
||||
|
||||
function toggleDropdown(el){
|
||||
@@ -2216,10 +2215,10 @@ function copyRecoveryCodes(){
|
||||
}
|
||||
|
||||
function downloadRecoveryCodes(){
|
||||
const text='INFO1 Wiederherstellungscodes\n'+new Date().toLocaleString('de-DE')+'\n\n'+_recoveryCodes.join('\n')+'\n\nJeder Code kann nur einmal verwendet werden.';
|
||||
const text='Klassenportal Wiederherstellungscodes\n'+new Date().toLocaleString('de-DE')+'\n\n'+_recoveryCodes.join('\n')+'\n\nJeder Code kann nur einmal verwendet werden.';
|
||||
const a=document.createElement('a');
|
||||
a.href='data:text/plain;charset=utf-8,'+encodeURIComponent(text);
|
||||
a.download='info1-wiederherstellungscodes.txt';
|
||||
a.download='klassenportal-wiederherstellungscodes.txt';
|
||||
a.click();
|
||||
}
|
||||
|
||||
@@ -2314,7 +2313,7 @@ async function renderChatMsg(m, append) {
|
||||
const div = document.createElement('div');
|
||||
div.className = 'chat-msg';
|
||||
div.dataset.id = m.id;
|
||||
const displayContent = await E2EE.decrypt(m.content);
|
||||
const displayContent = m.content;
|
||||
div.innerHTML = `<div class="chat-msg-meta">
|
||||
<span class="chat-msg-user${isOwn ? ' own' : ''}">${esc(m.username)}</span>
|
||||
<span class="chat-msg-time">${chatFmtTime(m.created_at)}</span>
|
||||
@@ -2353,10 +2352,7 @@ async function sendChatMsg() {
|
||||
const content = inp.value.trim();
|
||||
if (!content) return;
|
||||
inp.value = '';
|
||||
let ciphertext;
|
||||
try { ciphertext = await E2EE.encrypt(content); }
|
||||
catch { toast('Verschlüsselung fehlgeschlagen', 'error'); inp.value = content; return; }
|
||||
const r = await api('POST', 'chat', { content: ciphertext });
|
||||
const r = await api('POST', 'chat', { content });
|
||||
if (r.error) { toast(r.error, 'error'); inp.value = content; return; }
|
||||
await renderChatMsg(r, true);
|
||||
chatLastId = Math.max(chatLastId, r.id);
|
||||
@@ -2369,9 +2365,8 @@ async function delChatMsg(id) {
|
||||
document.querySelector(`.chat-msg[data-id="${id}"]`)?.remove();
|
||||
}
|
||||
|
||||
async function initChat(username, userId) {
|
||||
async function initChat(username) {
|
||||
chatMyUsername = username;
|
||||
await E2EE.init(userId);
|
||||
await loadChat();
|
||||
pollChat();
|
||||
document.getElementById('chat-input').addEventListener('keydown', e => {
|
||||
|
||||
Reference in New Issue
Block a user