diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 1d34288..0f8912e 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -9,7 +9,29 @@ services: restart: unless-stopped volumes: - ../:/app + # Force use of the container database + environment: + - DATABASE_URL=postgresql://marzban:marzban_pass@db:5432/marzban_bot env_file: - ../.env ports: - "8888:8888" + depends_on: + - db + + db: + image: postgres:15-alpine + container_name: marzban_db + restart: unless-stopped + environment: + POSTGRES_USER: marzban + POSTGRES_PASSWORD: marzban_pass + POSTGRES_DB: marzban_bot + volumes: + - postgres_data:/var/lib/postgresql/data + # Expose port if you want to connect externally (e.g. DBeaver) + ports: + - "5432:5432" + +volumes: + postgres_data: diff --git a/web_app/static/js/app.js b/web_app/static/js/app.js index 652ea2e..bb0c7e7 100644 --- a/web_app/static/js/app.js +++ b/web_app/static/js/app.js @@ -183,6 +183,25 @@ function showAccessDenied() { document.body.appendChild(div); } +function showInviteRequired() { + document.body.innerHTML = ''; + document.body.style.display = 'block'; + const div = document.createElement('div'); + div.style.cssText = 'display:flex; flex-direction:column; align-items:center; justify-content:center; height:100vh; padding:24px; text-align:center; background:var(--md-sys-color-background); color:var(--md-sys-color-on-background); font-family:var(--font-brand);'; + + div.innerHTML = ` + +

Registration Required

+

+ You need to activate the bot with an invite code to use this app. +

+ + `; + document.body.appendChild(div); +} + function initApp() { // Enhanced OS Detection const ua = navigator.userAgent.toLowerCase(); @@ -361,6 +380,12 @@ async function loadDashboard() { try { const res = await fetch(`${API_BASE}/user/${currentState.user.id}`); + + if (res.status === 404) { + showInviteRequired(); + return; + } + const data = await res.json(); if (data.error) throw new Error(data.error);