6.8 KiB
Lizenzserver Konfiguration Implementation
Overview
✅ COMPLETED: Implemented client configuration management and single-session enforcement for Account Forger software.
Implementation Status (2025-06-21)
✅ License activation works (consumes device slots)
✅ Basic verification exists at /api/license/verify
✅ Heartbeat system implemented (30-second intervals)
✅ Single-session enforcement implemented
✅ Admin panel has full UI and backend for "Lizenzserver Konfiguration"
✅ Session management and monitoring
✅ Automatic cleanup of expired sessions
Requirements
- Single Session Enforcement: Only one device can run the software at a time (even if activated on multiple devices)
- Heartbeat System: 30-second heartbeats to track active sessions
- Version Management: Control minimum supported version and update notifications
- Client Configuration: Manage Account Forger settings from admin panel
Completed Features
1. Database Schema ✅
Admin Panel Database
-- Client configuration (one row for Account Forger)
CREATE TABLE client_configs (
id SERIAL PRIMARY KEY,
client_name VARCHAR(100) NOT NULL DEFAULT 'Account Forger',
api_key VARCHAR(255) NOT NULL,
heartbeat_interval INTEGER DEFAULT 30, -- seconds
session_timeout INTEGER DEFAULT 60, -- seconds (2x heartbeat)
current_version VARCHAR(20) NOT NULL,
minimum_version VARCHAR(20) NOT NULL,
download_url TEXT,
whats_new TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Active sessions tracking
CREATE TABLE active_sessions (
id SERIAL PRIMARY KEY,
license_id INTEGER REFERENCES licenses(id) ON DELETE CASCADE,
hardware_id VARCHAR(255) NOT NULL,
ip_address INET,
client_version VARCHAR(20),
session_token VARCHAR(255) UNIQUE NOT NULL,
started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
last_heartbeat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(license_id) -- Only one active session per license
);
-- Session history for debugging
CREATE TABLE session_history (
id SERIAL PRIMARY KEY,
license_id INTEGER REFERENCES licenses(id) ON DELETE CASCADE,
hardware_id VARCHAR(255) NOT NULL,
ip_address INET,
client_version VARCHAR(20),
started_at TIMESTAMP,
ended_at TIMESTAMP,
end_reason VARCHAR(50) -- 'normal', 'timeout', 'forced', 'replaced'
);
2. License Server Endpoints ✅
Implemented endpoints in /v2_lizenzserver/app/api/license.py:
-
POST /api/license/session/start
- Input: license_key, machine_id, hardware_hash, version
- Check: License valid? Already active session?
- If active session exists: Return error "Es ist nur eine Sitzung erlaubt, stelle sicher, dass nirgendwo sonst das Programm läuft"
- If no session: Create session, return session_token and version info
- Response includes: session_token, whats_new (if newer version), download_url
-
POST /api/license/session/heartbeat
- Input: session_token, license_key
- Update last_heartbeat timestamp
- Return: success status
-
POST /api/license/session/end
- Input: session_token
- Mark session as ended
- Log to session_history
-
Background job: Clean up sessions older than 60 seconds without heartbeat
3. Admin Panel Implementation ✅
Implemented routes in /v2_adminpanel/routes/admin_routes.py:
-
GET /lizenzserver/config
- Show current client configuration
- Display active sessions count
-
POST /lizenzserver/config/update
- Update version, download URL, what's new
- Update minimum supported version
-
GET /lizenzserver/sessions
- List all active sessions
- Show: License key, Customer name, Hardware ID, IP, Started at, Last heartbeat
-
POST /lizenzserver/sessions/{session_id}/terminate
- Force close a session (admin only: rac00n, w@rh@mm3r)
-
GET /lizenzserver/config/client/new ✅
- Shows client configuration page
- Handles initial client config and updates
4. Security
- API key required for all client requests
- License key validates ownership
- Hardware ID ensures device authenticity
- Session tokens prevent replay attacks
5. Client Flow
-
Startup:
POST /api/license/session/start -> Get session_token or error -> Show version update if available -
Running (every 30 seconds):
POST /api/license/session/heartbeat -> Keep session alive -
Shutdown:
POST /api/license/session/end -> Clean session exit
6. Error Handling
- Network interruption: Session expires after 60s
- Software crash: Session expires after 60s
- Multiple launch attempts: Show error message
- Version too old: Block with message to update
7. Admin Features
- View active sessions
- Force terminate sessions
- Update version requirements
- View session history (last 24h)
- Manage client configuration
Implementation Completed
- ✅ Created database tables (client_configs, license_sessions, session_history)
- ✅ Implemented session management in license server
- ✅ Added heartbeat endpoint
- ✅ Created admin panel routes for configuration
- ✅ Implemented session viewing/management with terminate capability
- ✅ Added background cleanup job (runs every 60 seconds)
- ⏳ Ready for testing with Account Forger client
Implementation Notes
- ✅ YAGNI: One global config for all Account Forger instances
- ✅ No per-customer settings
- ✅ No grace period for session reclaim
- ✅ Generic error messages (no "who's using it" info)
- ✅ Version format: 1.0.0
- ✅ Session tokens: UUID format
- ✅ Background cleanup: Every 60 seconds
- ✅ API Key: Single global key stored in client_configs
UI Improvements (2025-06-21)
Single-Page Administration
- ✅ Merged all configuration into the main administration page
- ✅ Removed separate "Account Forger Konfiguration" page
- ✅ Removed "Neuer Client" button (not needed with single global config)
Account Forger Configuration Section
- ✅ Inline version management (current and minimum version)
- ✅ API key display with copy-to-clipboard functionality
- ✅ Removed download_url and whats_new fields (handled elsewhere)
- ✅ Direct save without page navigation
Live Session Monitor
- ✅ Real-time session count with badge
- ✅ Mini table showing last 5 active sessions
- ✅ Auto-refresh every 30 seconds via AJAX
- ✅ "Alle anzeigen" link to full session management page
Technical Settings
- ✅ Feature flags in collapsible accordion
- ✅ Rate limits in collapsible accordion
- ✅ Clean separation between daily operations and technical settings
Database Schema Updates
- ✅ Removed download_url column from client_configs
- ✅ Removed whats_new column from client_configs
- ✅ Simplified to only essential configuration fields