#!/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)