Files
Kiwy-Signage/dev/tests/test_authentication.py
T
SKE087 31807f37bf Cleanup repo + harden offline install and watchdog
Repo hygiene:
- Remove dead scripts (.wait-for-display, .display-keepalive, .keep-screen-alive)
- Remove stale backup/scratch (install.sh.bak, New.txt, stale .pyc)
- Stop tracking machine-specific/generated state (config/app_config.json,
  playlists/server_playlist.json, src/player_auth.json, generated launchers)
- Prune duplicate wheel versions (one per package)
- Reorganize working_files -> dev/, dev/tests/, documentation/dev-notes/, scripts/
- Extend .gitignore; fix no-op rules in repo/.gitignore

Offline install (install.sh):
- Non-fatal system-dep step; per-package apt retry; .deb bundle install
- Skip pip self-upgrade offline; guard online fallbacks behind connectivity probe
- Dependency-free fetch_url (curl/wget/urllib); --no-reboot flag
- Fix corrupted literal backslash-bang escapes (shebangs, test -f, banner)
- Idempotent cron install (no more stacked @reboot lines)

Autostart / watchdog:
- start.sh: single-instance flock lock (.player_watchdog.lock) acquired only
  after a display is confirmed, preventing parallel watchdogs
- Set XDG_RUNTIME_DIR when missing; exit early if headless
- run_player.sh: activate .venv; stop_player.sh: clear lock file
2026-10-14 23:29:14 +03:00

186 lines
5.9 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
Test script for Kiwy-Signage authentication with DigiServer v2
Run this to verify authentication is working before updating main.py
"""
import sys
import os
# Add src directory to path
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src'))
from player_auth import PlayerAuth
import json
def load_app_config():
"""Load existing app_config.json"""
# Try multiple possible locations
possible_paths = [
'config/app_config.json',
'resources/app_config.txt',
'src/config/app_config.json',
'../config/app_config.json'
]
for config_file in possible_paths:
if os.path.exists(config_file):
print(f" Found config: {config_file}")
with open(config_file, 'r') as f:
return json.load(f)
print(f"❌ Config file not found! Tried:")
for path in possible_paths:
print(f" - {path}")
return None
def test_authentication():
"""Test authentication with DigiServer v2"""
print("=" * 60)
print("Kiwy-Signage Authentication Test")
print("=" * 60)
print()
# Load config
print("📁 Loading configuration...")
config = load_app_config()
if not config:
return False
server_ip = config.get('server_ip', '')
hostname = config.get('screen_name', '')
quickconnect = config.get('quickconnect_key', '')
port = config.get('port', '')
print(f" Server: {server_ip}:{port}")
print(f" Hostname: {hostname}")
print(f" Quick Connect: {'*' * len(quickconnect)}")
print()
# Build server URL
import re
ip_pattern = r'^\d+\.\d+\.\d+\.\d+$'
if re.match(ip_pattern, server_ip):
server_url = f'http://{server_ip}:{port}'
else:
server_url = f'http://{server_ip}'
print(f"🌐 Server URL: {server_url}")
print()
# Test server connection
print("🔌 Testing server connection...")
try:
import requests
response = requests.get(f"{server_url}/api/health", timeout=5)
if response.status_code == 200:
data = response.json()
print(f" ✅ Server is healthy (version: {data.get('version')})")
else:
print(f" ⚠️ Server responded with status: {response.status_code}")
except Exception as e:
print(f" ❌ Cannot connect to server: {e}")
print()
print("💡 Make sure DigiServer v2 is running and accessible!")
return False
print()
# Initialize auth
print("🔐 Initializing authentication...")
auth = PlayerAuth(config_file='src/player_auth.json')
# Check if already authenticated
if auth.is_authenticated():
print(f" ℹ️ Found existing authentication")
print(f" Player: {auth.get_player_name()}")
print()
print("✓ Verifying saved authentication...")
valid, info = auth.verify_auth()
if valid:
print(f" ✅ Authentication is valid!")
print(f" Player ID: {info['player_id']}")
print(f" Player Name: {info['player_name']}")
print(f" Group ID: {info.get('group_id', 'None')}")
print(f" Orientation: {info.get('orientation', 'Landscape')}")
print()
# Test playlist fetch
print("📋 Testing playlist fetch...")
playlist_data = auth.get_playlist()
if playlist_data:
version = playlist_data.get('playlist_version', 0)
content_count = len(playlist_data.get('playlist', []))
print(f" ✅ Playlist received!")
print(f" Version: {version}")
print(f" Content items: {content_count}")
else:
print(f" ⚠️ Could not fetch playlist")
print()
# Test heartbeat
print("💓 Testing heartbeat...")
if auth.send_heartbeat(status='online'):
print(f" ✅ Heartbeat sent successfully")
else:
print(f" ⚠️ Heartbeat failed")
print()
print("=" * 60)
print("✅ All tests passed! Player is ready to use.")
print("=" * 60)
return True
else:
print(f" ❌ Saved authentication is expired or invalid")
print(f" Re-authenticating...")
print()
# Need to authenticate
print("🔑 Authenticating with server...")
success, error = auth.authenticate(
server_url=server_url,
hostname=hostname,
quickconnect_code=quickconnect
)
if success:
print(f" ✅ Authentication successful!")
print(f" Player: {auth.get_player_name()}")
print(f" Player ID: {auth.get_player_id()}")
print()
# Save confirmation
print(f"💾 Authentication saved to: src/player_auth.json")
print()
print("=" * 60)
print("✅ Authentication successful! Player is ready to use.")
print("=" * 60)
return True
else:
print(f" ❌ Authentication failed: {error}")
print()
print("💡 Troubleshooting:")
print(" 1. Check player exists in DigiServer v2 (hostname must match)")
print(" 2. Verify quickconnect_key matches server configuration")
print(" 3. Check server logs for authentication attempts")
print()
print("=" * 60)
print("❌ Authentication test failed")
print("=" * 60)
return False
if __name__ == '__main__':
try:
success = test_authentication()
sys.exit(0 if success else 1)
except KeyboardInterrupt:
print("\n⚠️ Test cancelled by user")
sys.exit(1)
except Exception as e:
print(f"\n❌ Unexpected error: {e}")
import traceback
traceback.print_exc()
sys.exit(1)