updated player

This commit is contained in:
2025-11-22 09:48:48 +02:00
parent 493f307599
commit 3f9674517d
26 changed files with 1208 additions and 13 deletions

View File

@@ -0,0 +1,276 @@
# Kiwy-Signage Player Migration Guide
## Updating to DigiServer v2 Authentication
This guide explains how to update your Kiwy-Signage player to use the new secure authentication system with DigiServer v2.
## What Changed?
### Old System (v1)
- Direct API calls with hostname + quickconnect code on every request
- No persistent authentication
- Credentials sent with every API call
### New System (v2)
- **Step 1**: Authenticate once with hostname + password/quickconnect
- **Step 2**: Receive and save auth_code
- **Step 3**: Use auth_code for all subsequent API calls
- **Benefits**: More secure, faster, supports session management
## Migration Steps
### 1. Copy New Files
Copy the authentication modules to your Kiwy-Signage project:
```bash
cd /home/pi/Desktop/Kiwy-Signage/src/
# New files are already created:
# - player_auth.py (authentication module)
# - get_playlists_v2.py (updated playlist fetcher)
```
### 2. Update main.py Imports
In `main.py`, replace the old import:
```python
# OLD:
from get_playlists import (
update_playlist_if_needed,
send_playing_status_feedback,
send_playlist_restart_feedback,
send_player_error_feedback
)
# NEW:
from get_playlists_v2 import (
update_playlist_if_needed,
send_playing_status_feedback,
send_playlist_restart_feedback,
send_player_error_feedback
)
```
### 3. Add Authentication on Startup
In `main.py`, add authentication check in the `SignagePlayer` class:
```python
def build(self):
"""Build the application UI"""
# Load configuration
self.config = self.load_config()
# NEW: Authenticate with server
from player_auth import PlayerAuth
auth = PlayerAuth()
if not auth.is_authenticated():
Logger.info("First time setup - authenticating...")
from get_playlists_v2 import ensure_authenticated
if not ensure_authenticated(self.config):
Logger.error("❌ Failed to authenticate with server!")
# Show error popup or retry
else:
Logger.info(f"✅ Authenticated as: {auth.get_player_name()}")
# Continue with normal startup...
return SignagePlayerWidget(config=self.config)
```
### 4. Update Server Configuration
Your existing `app_config.txt` works as-is! The new system uses the same fields:
```json
{
"server_ip": "your-server-ip",
"port": "5000",
"screen_name": "player-001",
"quickconnect_key": "QUICK123",
...
}
```
**Note**: `screen_name` is now used as `hostname` for authentication.
### 5. Testing
1. **Stop the old player**:
```bash
pkill -f main.py
```
2. **Delete old authentication data** (first time only):
```bash
rm -f /home/pi/Desktop/Kiwy-Signage/src/player_auth.json
```
3. **Start the updated player**:
```bash
cd /home/pi/Desktop/Kiwy-Signage/src/
python3 main.py
```
4. **Check logs for authentication**:
- Look for: `✅ Authentication successful`
- Or: `❌ Authentication failed: [error message]`
## Troubleshooting
### Authentication Fails
**Problem**: `❌ Authentication failed: Invalid credentials`
**Solution**:
1. Verify player exists in DigiServer v2:
- Login to http://your-server:5000
- Go to Players → check if hostname exists
2. Verify quickconnect code:
- In DigiServer, check player's Quick Connect Code
- Update `app_config.txt` with correct code
3. Check server URL:
```python
# Test connection
import requests
response = requests.get('http://your-server:5000/api/health')
print(response.json()) # Should show: {'status': 'healthy'}
```
### Auth Code Expired
**Problem**: Player was working, now shows auth errors
**Solution**:
```bash
# Clear saved auth and re-authenticate
rm /home/pi/Desktop/Kiwy-Signage/src/player_auth.json
# Restart player - will auto-authenticate
```
### Can't Connect to Server
**Problem**: `Cannot connect to server`
**Solution**:
1. Check server is running:
```bash
curl http://your-server:5000/api/health
```
2. Check network connectivity:
```bash
ping your-server-ip
```
3. Verify server URL in `app_config.txt`
## Configuration Files
### player_auth.json (auto-created)
This file stores the authentication token:
```json
{
"hostname": "player-001",
"auth_code": "rrX4JtM99e4e6ni0VCsuIstjTVQQqILXeRmGu_Ek2Ks",
"player_id": 1,
"player_name": "Demo Player",
"group_id": 5,
"orientation": "Landscape",
"authenticated": true,
"server_url": "http://your-server:5000"
}
```
**Important**: Keep this file secure! It contains your player's access token.
## Advanced: Custom Authentication
If you need custom authentication logic:
```python
from player_auth import PlayerAuth
# Initialize
auth = PlayerAuth(config_file='custom_auth.json')
# Authenticate with password instead of quickconnect
success, error = auth.authenticate(
server_url='http://your-server:5000',
hostname='player-001',
password='your_secure_password' # Use password instead
)
if success:
print(f"✅ Authenticated as: {auth.get_player_name()}")
# Get playlist
playlist_data = auth.get_playlist()
# Send heartbeat
auth.send_heartbeat(status='playing')
# Send feedback
auth.send_feedback(
message="Playing video.mp4",
status="playing",
playlist_version=5
)
else:
print(f"❌ Failed: {error}")
```
## Rollback to Old System
If you need to rollback:
```bash
cd /home/pi/Desktop/Kiwy-Signage/src/
# Rename new files
mv get_playlists_v2.py get_playlists_v2.py.backup
mv player_auth.py player_auth.py.backup
# Use old get_playlists.py (keep as-is)
# Old system will continue working with DigiServer v1
```
## Benefits of New System
✅ **More Secure**: Auth tokens instead of passwords in every request
✅ **Better Performance**: No bcrypt verification on every API call
✅ **Session Management**: Server tracks player sessions
✅ **Easier Debugging**: Auth failures vs API failures are separate
✅ **Future-Proof**: Ready for token refresh, expiration, etc.
## Next Steps
Once migration is complete:
1. **Monitor player logs** for first 24 hours
2. **Verify playlist updates** are working
3. **Check feedback** is being received in DigiServer
4. **Update other players** one at a time
## Support
If you encounter issues:
1. **Check player logs**: `tail -f player.log`
2. **Check server logs**: DigiServer v2 logs in `instance/logs/`
3. **Test API manually**:
```bash
# Test authentication
curl -X POST http://your-server:5000/api/auth/player \
-H "Content-Type: application/json" \
-d '{"hostname":"player-001","quickconnect_code":"QUICK123"}'
```
---
**Migration completed!** Your Kiwy-Signage player now uses secure authentication with DigiServer v2. 🎉