Major update 2 / login

This commit is contained in:
2026-04-26 16:33:04 +03:00
parent 5bff9a287d
commit e8fd35105f
15 changed files with 999 additions and 96 deletions

View File

@@ -1,4 +1,5 @@
from flask import Blueprint, render_template, request, jsonify
from flask_login import login_required, current_user
from db import get_db
import json
from datetime import datetime, timedelta
@@ -11,21 +12,36 @@ dashboard = Blueprint('dashboard', __name__)
# Serve the dashboard HTML
# ------------------------------------------------------------------
@dashboard.route('/')
@login_required
def index():
conn = get_db()
# Get the logged-in user's clan
clan = conn.execute(
'SELECT id FROM clans WHERE owner_id = ?', (current_user.id,)
).fetchone()
if not clan:
# User has no clan yet — send them to options to create one
conn.close()
return render_template('index.html', players=[], no_clan=True)
clan_id = clan['id']
# Only fetch players that are members of this clan
rows = conn.execute('''
SELECT player, player_id, MAX(updated_at) as last_seen, MAX(world_id) as world_id
FROM town_state
WHERE player IS NOT NULL
GROUP BY player, player_id
ORDER BY player ASC
''').fetchall()
# Pre-fetch all active captchas
SELECT ts.player, ts.player_id, MAX(ts.updated_at) as last_seen, MAX(ts.world_id) as world_id
FROM town_state ts
INNER JOIN clan_members cm ON cm.player_id = ts.player_id AND cm.clan_id = ?
WHERE ts.player IS NOT NULL
GROUP BY ts.player, ts.player_id
ORDER BY ts.player ASC
''', (clan_id,)).fetchall()
captcha_rows = conn.execute("SELECT key, value FROM kv_store WHERE key LIKE 'captcha_active_%'").fetchall()
active_captchas = {r['key'].replace('captcha_active_', ''): True for r in captcha_rows if r['value'] == '1'}
conn.close()
players = []
now = datetime.utcnow()
for r in rows:
@@ -37,26 +53,30 @@ def index():
is_online = True
except Exception:
pass
players.append({
'player': r['player'],
'player_id': r['player_id'],
'world_id': r['world_id'] or 'Unknown',
'is_online': is_online,
'player': r['player'],
'player_id': r['player_id'],
'world_id': r['world_id'] or 'Unknown',
'is_online': is_online,
'captcha_active': active_captchas.get(r['player_id'], False)
})
return render_template('index.html', players=players)
return render_template('index.html', players=players, no_clan=False)
@dashboard.route('/player/<player_id>')
@login_required
def player_hub(player_id):
return render_template('hub.html', player_id=player_id)
@dashboard.route('/player/<player_id>/admin')
@login_required
def player_dashboard(player_id):
return render_template('dashboard.html', player_id=player_id)
@dashboard.route('/player/<player_id>/farm')
@login_required
def player_farm(player_id):
return render_template('farm.html', player_id=player_id)