updated to work
This commit is contained in:
143
server.py
143
server.py
@@ -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():
|
||||
|
||||
Reference in New Issue
Block a user