updated to work

This commit is contained in:
ske087
2025-08-19 11:13:49 +03:00
parent ab36454574
commit 65c1f75bb9
2 changed files with 193 additions and 24 deletions

143
server.py
View File

@@ -175,6 +175,15 @@ def admin():
# Get all files for management
all_files = MediaFile.query.filter_by(is_active=True).order_by(MediaFile.upload_date.desc()).all()
# Get all users
all_users = User.query.order_by(User.username).all()
# Get all players
all_players = Player.query.order_by(Player.device_id).all()
# Get all channels for player assignment
all_channels = StreamingChannel.query.filter_by(is_active=True).order_by(StreamingChannel.name).all()
return render_template('admin.html',
total_files=total_files,
total_users=total_users,
@@ -182,7 +191,10 @@ def admin():
total_channels=total_channels,
recent_activity=recent_activity,
recent_files=recent_files,
all_files=all_files)
all_files=all_files,
all_users=all_users,
all_players=all_players,
all_channels=all_channels)
@app.route('/user')
@login_required
@@ -304,6 +316,135 @@ def add_channel():
return redirect(url_for('view_channels'))
# User Management Routes
@app.route('/add_user', methods=['POST'])
@login_required
def add_user():
if current_user.role != 'admin':
flash('Access denied. Admin privileges required.', 'error')
return redirect(request.referrer)
try:
# Check if username already exists
existing_user = User.query.filter_by(username=request.form['username']).first()
if existing_user:
flash('Username already exists.', 'error')
return redirect(request.referrer)
# Check if email already exists
existing_email = User.query.filter_by(email=request.form['email']).first()
if existing_email:
flash('Email already exists.', 'error')
return redirect(request.referrer)
user = User(
username=request.form['username'],
email=request.form['email'],
role=request.form.get('role', 'user')
)
user.set_password(request.form['password'])
db.session.add(user)
db.session.commit()
log_activity('User created', f'Created user: {user.username} ({user.role})')
flash(f'User "{user.username}" created successfully!', 'success')
except Exception as e:
flash(f'Error creating user: {str(e)}', 'error')
return redirect(url_for('admin'))
@app.route('/delete_user/<int:user_id>')
@login_required
def delete_user(user_id):
if current_user.role != 'admin':
flash('Access denied. Admin privileges required.', 'error')
return redirect(request.referrer)
user = User.query.get_or_404(user_id)
# Prevent deleting yourself
if user.id == current_user.id:
flash('You cannot delete your own account.', 'error')
return redirect(request.referrer)
# Prevent deleting the only admin
if user.role == 'admin' and User.query.filter_by(role='admin').count() <= 1:
flash('Cannot delete the only admin user.', 'error')
return redirect(request.referrer)
username = user.username
db.session.delete(user)
db.session.commit()
log_activity('User deleted', f'Deleted user: {username}')
flash(f'User "{username}" deleted successfully!', 'success')
return redirect(url_for('admin'))
# Player Management Routes
@app.route('/add_player', methods=['POST'])
@login_required
def add_player():
try:
# Check if device_id already exists
existing_player = Player.query.filter_by(device_id=request.form['device_id']).first()
if existing_player:
flash('Device ID already exists.', 'error')
return redirect(request.referrer)
player = Player(
device_id=request.form['device_id'],
name=request.form.get('name', ''),
channel_id=int(request.form['channel_id']) if request.form.get('channel_id') else None
)
db.session.add(player)
db.session.commit()
log_activity('Player added', f'Added player: {player.device_id}')
flash(f'Player "{player.device_id}" added successfully!', 'success')
except Exception as e:
flash(f'Error adding player: {str(e)}', 'error')
return redirect(url_for('admin'))
@app.route('/delete_player/<int:player_id>')
@login_required
def delete_player(player_id):
if current_user.role != 'admin':
flash('Access denied. Admin privileges required.', 'error')
return redirect(request.referrer)
player = Player.query.get_or_404(player_id)
device_id = player.device_id
db.session.delete(player)
db.session.commit()
log_activity('Player deleted', f'Deleted player: {device_id}')
flash(f'Player "{device_id}" deleted successfully!', 'success')
return redirect(url_for('admin'))
@app.route('/assign_player_channel/<int:player_id>', methods=['POST'])
@login_required
def assign_player_channel(player_id):
try:
player = Player.query.get_or_404(player_id)
channel_id = int(request.form['channel_id']) if request.form.get('channel_id') else None
old_channel = player.channel.name if player.channel else 'None'
player.channel_id = channel_id
new_channel = StreamingChannel.query.get(channel_id).name if channel_id else 'None'
db.session.commit()
log_activity('Player channel assigned', f'Player {player.device_id}: {old_channel}{new_channel}')
flash(f'Player "{player.device_id}" assigned to channel successfully!', 'success')
except Exception as e:
flash(f'Error assigning player: {str(e)}', 'error')
return redirect(request.referrer)
# API Routes
@app.route('/api/content')
def api_content():