1
0
Fork 0
mirror of https://gitlab.com/SIGBUS/nyaa.git synced 2024-12-22 10:50:07 +00:00

Move admin routes into blueprint

and update templates

Routes:
* /reports
* /adminlog
This commit is contained in:
Kfir Hadas 2017-07-08 00:48:28 +03:00
parent f316353176
commit 3913d8cea2
4 changed files with 79 additions and 71 deletions

View file

@ -707,75 +707,6 @@ def submit_report(torrent_id):
return flask.redirect(flask.url_for('view_torrent', torrent_id=torrent_id))
@app.route('/adminlog', methods=['GET'])
def view_adminlog():
if not flask.g.user or not flask.g.user.is_moderator:
flask.abort(403)
page = flask.request.args.get('p', flask.request.args.get('offset', 1, int), int)
logs = models.AdminLog.all_logs() \
.order_by(models.AdminLog.created_time.desc()) \
.paginate(page=page, per_page=20)
return flask.render_template('adminlog.html',
adminlog=logs)
@app.route('/reports', methods=['GET', 'POST'])
def view_reports():
if not flask.g.user or not flask.g.user.is_moderator:
flask.abort(403)
page = flask.request.args.get('p', flask.request.args.get('offset', 1, int), int)
reports = models.Report.not_reviewed(page)
report_action = forms.ReportActionForm(flask.request.form)
if flask.request.method == 'POST' and report_action.validate():
action = report_action.action.data
torrent_id = report_action.torrent.data
report_id = report_action.report.data
torrent = models.Torrent.by_id(torrent_id)
report = models.Report.by_id(report_id)
report_user = models.User.by_id(report.user_id)
if not torrent or not report or report.status != 0:
flask.abort(404)
else:
log = "Report #{}: {} [#{}]({}), reported by [{}]({})"
if action == 'delete':
torrent.deleted = True
report.status = 1
log = log.format(report_id, 'Deleted', torrent_id,
flask.url_for('view_torrent', torrent_id=torrent_id),
report_user.username,
flask.url_for('view_user', user_name=report_user.username))
elif action == 'hide':
log = log.format(report_id, 'Hid', torrent_id,
flask.url_for('view_torrent', torrent_id=torrent_id),
report_user.username,
flask.url_for('view_user', user_name=report_user.username))
torrent.hidden = True
report.status = 1
else:
log = log.format(report_id, 'Closed', torrent_id,
flask.url_for('view_torrent', torrent_id=torrent_id),
report_user.username,
flask.url_for('view_user', user_name=report_user.username))
report.status = 2
adminlog = models.AdminLog(log=log, admin_id=flask.g.user.id)
db.session.add(adminlog)
models.Report.remove_reviewed(torrent_id)
db.session.commit()
flask.flash('Closed report #{}'.format(report.id), 'success')
return flask.redirect(flask.url_for('view_reports'))
return flask.render_template('reports.html',
reports=reports,
report_action=report_action)
def _get_cached_torrent_file(torrent):
# Note: obviously temporary
cached_torrent = os.path.join(app.config['BASE_DIR'],
@ -858,6 +789,7 @@ def register_blueprints(flask_app):
flask_app.register_blueprint(api_handler.api_blueprint, url_prefix='/api')
# Site routes
flask_app.register_blueprint(views.account_bp)
flask_app.register_blueprint(views.admin_bp)
flask_app.register_blueprint(views.site_bp)

View file

@ -95,8 +95,8 @@
<span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li {% if request.path == url_for('view_reports') %}class="active"{% endif %}><a href="{{ url_for('view_reports') }}">Reports</a></li>
<li {% if request.path == url_for('view_adminlog') %}class="active"{% endif %}><a href="{{ url_for('view_adminlog') }}">Log</a></li>
<li {% if request.path == url_for('admin.reports') %}class="active"{% endif %}><a href="{{ url_for('admin.reports') }}">Reports</a></li>
<li {% if request.path == url_for('admin.log') %}class="active"{% endif %}><a href="{{ url_for('admin.log') }}">Log</a></li>
</ul>
</li>
{% endif %}

View file

@ -1,7 +1,9 @@
from nyaa.views import (
account,
admin,
site,
)
account_bp = account.bp
admin_bp = admin.bp
site_bp = site.bp

74
nyaa/views/admin.py Normal file
View file

@ -0,0 +1,74 @@
import flask
from nyaa import db, forms, models
bp = flask.Blueprint('admin', __name__)
@bp.route('/adminlog', endpoint='log', methods=['GET'])
def view_adminlog():
if not flask.g.user or not flask.g.user.is_moderator:
flask.abort(403)
page = flask.request.args.get('p', flask.request.args.get('offset', 1, int), int)
logs = models.AdminLog.all_logs() \
.order_by(models.AdminLog.created_time.desc()) \
.paginate(page=page, per_page=20)
return flask.render_template('adminlog.html',
adminlog=logs)
@bp.route('/reports', endpoint='reports', methods=['GET', 'POST'])
def view_reports():
if not flask.g.user or not flask.g.user.is_moderator:
flask.abort(403)
page = flask.request.args.get('p', flask.request.args.get('offset', 1, int), int)
reports = models.Report.not_reviewed(page)
report_action = forms.ReportActionForm(flask.request.form)
if flask.request.method == 'POST' and report_action.validate():
action = report_action.action.data
torrent_id = report_action.torrent.data
report_id = report_action.report.data
torrent = models.Torrent.by_id(torrent_id)
report = models.Report.by_id(report_id)
report_user = models.User.by_id(report.user_id)
if not torrent or not report or report.status != 0:
flask.abort(404)
else:
log = "Report #{}: {} [#{}]({}), reported by [{}]({})"
if action == 'delete':
torrent.deleted = True
report.status = 1
log = log.format(report_id, 'Deleted', torrent_id,
flask.url_for('view_torrent', torrent_id=torrent_id),
report_user.username,
flask.url_for('view_user', user_name=report_user.username))
elif action == 'hide':
log = log.format(report_id, 'Hid', torrent_id,
flask.url_for('view_torrent', torrent_id=torrent_id),
report_user.username,
flask.url_for('view_user', user_name=report_user.username))
torrent.hidden = True
report.status = 1
else:
log = log.format(report_id, 'Closed', torrent_id,
flask.url_for('view_torrent', torrent_id=torrent_id),
report_user.username,
flask.url_for('view_user', user_name=report_user.username))
report.status = 2
adminlog = models.AdminLog(log=log, admin_id=flask.g.user.id)
db.session.add(adminlog)
models.Report.remove_reviewed(torrent_id)
db.session.commit()
flask.flash('Closed report #{}'.format(report.id), 'success')
return flask.redirect(flask.url_for('admin.reports'))
return flask.render_template('reports.html',
reports=reports,
report_action=report_action)