237 lines
8.3 KiB
Python
237 lines
8.3 KiB
Python
from flask import Blueprint, render_template, request, redirect, url_for, flash
|
|
from ..nosql import get_nosql
|
|
from ..dlp import checkChannelId, getChannelInfo
|
|
from ..decorators import login_required
|
|
from ..tasks import websub_subscribe_callback, websub_unsubscribe_callback
|
|
from datetime import datetime
|
|
from secrets import token_urlsafe
|
|
|
|
bp = Blueprint('admin', __name__, url_prefix='/admin')
|
|
|
|
@bp.route('')
|
|
@login_required
|
|
def base():
|
|
return render_template('admin/index.html')
|
|
|
|
@bp.route('/system', methods=['GET', 'POST'])
|
|
@login_required
|
|
def system():
|
|
if request.method == 'POST':
|
|
task = request.form.get('task', None)
|
|
if task == 'update-value':
|
|
pass
|
|
|
|
return render_template('admin/system.html')
|
|
|
|
@bp.route('/channel', methods=['GET', 'POST'])
|
|
@login_required
|
|
def channels():
|
|
channels = {}
|
|
generic = {}
|
|
|
|
if request.method == 'POST':
|
|
channelId = request.form.get('channel_id', None)
|
|
originalName = request.form.get('original_name', None)
|
|
addedDate = request.form.get('added_date', None)
|
|
|
|
### add some validation
|
|
|
|
addedDate = datetime.strptime(addedDate, '%Y-%m-%d')
|
|
|
|
if checkChannelId(channelId) is False:
|
|
channelId, originalName = getChannelInfo(channelId, ('channel_id', 'uploader'))
|
|
|
|
if not get_nosql().insert_new_channel(channelId, originalName, addedDate):
|
|
flash('Error inserting new channel, you probably made a mistake somewhere')
|
|
return redirect(url_for('admin.channels'))
|
|
|
|
return redirect(url_for('admin.channel', channelId=channelId))
|
|
|
|
generic['currentDate'] = datetime.utcnow()
|
|
channelIds = get_nosql().list_all_channels()
|
|
|
|
for channelId in channelIds:
|
|
channels[channelId] = get_nosql().get_channel_info(channelId)
|
|
channels[channelId]['video_count'] = get_nosql().get_channel_videos_count(channelId)
|
|
|
|
return render_template('admin/channels.html', channels=channels, generic=generic)
|
|
|
|
@bp.route('/channel/<channelId>', methods=['GET', 'POST'])
|
|
@login_required
|
|
def channel(channelId):
|
|
channelInfo = get_nosql().get_channel_info(channelId)
|
|
|
|
if not channelInfo:
|
|
flash('That channel ID does not exist in the system')
|
|
return redirect(url_for('admin.channels'))
|
|
|
|
if request.method == 'POST':
|
|
task = request.form.get('task', None)
|
|
key = request.form.get('key', None)
|
|
value = request.form.get('value', None)
|
|
|
|
if task == 'subscribe-websub':
|
|
task = websub_subscribe_callback.delay(channelId)
|
|
flash(f"Started task {task.id}")
|
|
return redirect(url_for('admin.channel', channelId=channelId))
|
|
|
|
if task == 'update-value':
|
|
if key in ['active', 'websub']:
|
|
value = True if value else False
|
|
|
|
if key in ['added_date']:
|
|
value = datetime.strptime(value, '%Y-%m-%d')
|
|
|
|
get_nosql().update_channel_key(channelId, key, value)
|
|
return redirect(url_for('admin.channel', channelId=channelId))
|
|
|
|
return render_template('admin/channel.html', channelInfo=channelInfo)
|
|
|
|
@bp.route('/run', methods=['GET', 'POST'])
|
|
@login_required
|
|
def runs():
|
|
if request.method == 'POST':
|
|
task = request.form.get('task', None)
|
|
if task == 'clean_runs':
|
|
get_nosql().clean_runs()
|
|
return redirect(url_for('admin.runs'))
|
|
|
|
|
|
runs = reversed(list(get_nosql().get_runs()))
|
|
return render_template('admin/runs.html', runs=runs)
|
|
|
|
@bp.route('/run/<runId>', methods=['GET', 'POST'])
|
|
@login_required
|
|
def run(runId):
|
|
run = get_nosql().get_run(runId)
|
|
return render_template('admin/run.html', run=run)
|
|
|
|
@bp.route('/websub', methods=['GET', 'POST'])
|
|
@login_required
|
|
def websub():
|
|
render = {}
|
|
|
|
if request.method == 'POST':
|
|
task = request.form.get('task', None)
|
|
value = request.form.get('value', None)
|
|
|
|
if task == 'unsubscribe':
|
|
task = websub_unsubscribe_callback.delay(value)
|
|
|
|
flash(f"Started task {task.id}")
|
|
return redirect(url_for('admin.websub'))
|
|
elif task == 'clean-retired':
|
|
get_nosql().websub_cleanRetired()
|
|
return redirect(url_for('admin.websub'))
|
|
elif task == 'unsubscribe-callbacks':
|
|
for callbackId in get_nosql().websub_getCallbacks():
|
|
websub_unsubscribe_callback.delay(callbackId)
|
|
flash(f"Started unsubscribe tasks for all callbacks")
|
|
return redirect(url_for('admin.websub'))
|
|
elif task == 'subscribe-channels':
|
|
for channelId in get_nosql().list_all_channels(websub=True):
|
|
websub_subscribe_callback.delay(channelId)
|
|
flash(f'Started subscribe tasks for activated channels')
|
|
return redirect(url_for('admin.websub'))
|
|
|
|
|
|
callbackIds = get_nosql().websub_getCallbacks()
|
|
callbacks = {}
|
|
|
|
render['stats'] = get_nosql().websub_statistics()
|
|
|
|
for callbackId in callbackIds:
|
|
callbacks[callbackId] = get_nosql().websub_getCallback(callbackId)
|
|
|
|
return render_template('admin/websub.html', callbacks=callbacks, render=render)
|
|
|
|
@bp.route('/reports', methods=['GET', 'POST'])
|
|
@login_required
|
|
def reports():
|
|
if request.method == 'POST':
|
|
task = request.form.get('task', None)
|
|
value = request.form.get('value', None)
|
|
|
|
if task == 'close':
|
|
get_nosql().close_report(value)
|
|
flash(f'Report closed {value}')
|
|
return redirect(url_for('admin.reports'))
|
|
|
|
reports = get_nosql().list_reports()
|
|
|
|
return render_template('admin/reports.html', reports=reports)
|
|
|
|
@bp.route('/queue', methods=['GET', 'POST'])
|
|
@login_required
|
|
def queue():
|
|
if request.method == 'POST':
|
|
task = request.form.get('task', None)
|
|
value = request.form.get('value', None)
|
|
|
|
if task == 'add-endpoint':
|
|
description = request.form.get('description', None)
|
|
if not description or len(description) <= 7:
|
|
flash('Description must be at least 8 characters long')
|
|
|
|
if value and len(value) >= 12:
|
|
get_nosql().queue_newEndpoint(value, description)
|
|
flash(f'Created endpoint ID: {value}')
|
|
else:
|
|
value = token_urlsafe(16)
|
|
get_nosql().queue_newEndpoint(value, description)
|
|
flash(f'Created endpoint ID: {value}')
|
|
|
|
elif task == 'retire':
|
|
get_nosql().queue_retireEndpoint(value)
|
|
flash(f'Endpoint retired: {value}')
|
|
|
|
elif task == 'clean-retired':
|
|
get_nosql().queue_cleanRetired()
|
|
flash(f'Cleaned retired endpoints')
|
|
|
|
elif task == 'manual-queue':
|
|
get_nosql().queue_insertQueue(value, 'webui')
|
|
flash(f'Added to queue: {value}')
|
|
|
|
elif task == 'delete-queue':
|
|
get_nosql().queue_deleteQueue(value)
|
|
flash(f'Deleted from queue: {value}')
|
|
|
|
elif task == 'empty-queue':
|
|
get_nosql().queue_emptyQueue()
|
|
flash(f'Queue has been emptied')
|
|
|
|
return redirect(url_for('admin.queue'))
|
|
|
|
endpoints = get_nosql().queue_getEndpoints()
|
|
queue = get_nosql().queue_getQueue()
|
|
|
|
return render_template('admin/queue.html', endpoints=endpoints, queue=queue)
|
|
|
|
@bp.route('/users', methods=['GET', 'POST'])
|
|
@login_required
|
|
def users():
|
|
if request.method == 'POST':
|
|
task = request.form.get('task', None)
|
|
value = request.form.get('value', None)
|
|
|
|
if task == 'add-user':
|
|
alias = request.form.get('alias', None)
|
|
description = request.form.get('description', None)
|
|
|
|
if value is None or alias is None:
|
|
flash('Missing fields')
|
|
return redirect(url_for('admin.users'))
|
|
|
|
doc_id = get_nosql().add_user(value, alias, description)
|
|
flash(f'User added: {doc_id}')
|
|
return redirect(url_for('admin.users'))
|
|
|
|
if task == 'delete-user':
|
|
get_nosql().delete_user(value)
|
|
flash(f'User deleted: {value}')
|
|
return redirect(url_for('admin.users'))
|
|
|
|
users = get_nosql().list_all_users()
|
|
|
|
return render_template('admin/users.html', users=users) |