Skip to content

Commit

Permalink
Allow admin tools page to be used by editors
Browse files Browse the repository at this point in the history
This makes it easier to find certain tools
  • Loading branch information
rubenwardy committed Jan 28, 2024
1 parent 4c5b506 commit 50b8602
Show file tree
Hide file tree
Showing 3 changed files with 99 additions and 46 deletions.
7 changes: 3 additions & 4 deletions app/blueprints/admin/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@


@bp.route("/admin/", methods=["GET", "POST"])
@rank_required(UserRank.ADMIN)
@rank_required(UserRank.EDITOR)
def admin_page():
if request.method == "POST":
if request.method == "POST" and current_user.rank.at_least(UserRank.ADMIN):
action = request.form["action"]
if action in actions:
ret = actions[action]["func"]()
Expand All @@ -40,8 +40,7 @@ def admin_page():
else:
flash("Unknown action: " + action, "danger")

deleted_packages = Package.query.filter(Package.state == PackageState.DELETED).all()
return render_template("admin/list.html", deleted_packages=deleted_packages, actions=actions)
return render_template("admin/list.html", actions=actions)


class SwitchUserForm(FlaskForm):
Expand Down
124 changes: 95 additions & 29 deletions app/templates/admin/list.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,41 +5,107 @@
{% endblock %}

{% block content %}
<h1>{{ self.title() }}</h1>

<div class="row">
<div class="col-md-6">
<h3 class="mt-0">Users</h3>
<div class="list-group">
<a class="list-group-item list-group-item-action" href="{{ url_for('users.list_all') }}">User list</a>
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.restore') }}">Restore package</a>
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.transfer') }}">Transfer package(s)</a>
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.tag_list') }}">Tag Editor</a>
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.license_list') }}">License Editor</a>
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.version_list') }}">Version Editor</a>
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.warning_list') }}">Warning Editor</a>
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.send_bulk_email') }}">Send bulk email</a>
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.send_bulk_notification') }}">Send bulk notification</a>
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.storage') }}">Storage usage</a>
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.switch_user') }}">Sign in as another user</a>
<a class="list-group-item list-group-item-action" href="{{ url_for('users.list_all') }}">
<i class="fas fa-users me-2"></i>
User list
</a>
{% if current_user.rank.at_least(current_user.rank.MODERATOR) %}
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.audit') }}">
<i class="fas fa-user-clock me-2"></i>
{{ _("Audit Log") }}
</a>
{% endif %}
</div>
</div>

<div class="col-md-6">
<div class="card mb-4">
<h2 class="card-header">Do action</h2>

<form method="post" action="" class="card-body">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<div class="row px-3">
<select name="action" class="form-select col">
{% for id, action in actions.items() %}
<option value="{{ id }}" {% if loop.first %}selected{% endif %}>
{{ action["title"] }}
</option>
{% endfor %}
</select>
<input type="submit" value="Perform" class="col-sm-auto btn btn-primary ms-2" />
</div>
</form>
<h3>Packages</h3>
<div class="list-group">
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.restore') }}">
<i class="fas fa-trash-restore me-2"></i>
Restore package
</a>
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.transfer') }}">
<i class="fas fa-arrow-right me-2"></i>
Transfer package(s)
</a>
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.storage') }}">
<i class="fas fa-save me-2"></i>
Storage usage
</a>
<a class="list-group-item list-group-item-action" href="{{ url_for('zipgrep.zipgrep_search') }}">
<i class="fas fa-search me-2"></i>
Zip grep
</a>
</div>

<h3>Types</h3>
<div class="list-group">
{% if check_global_perm(current_user, "EDIT_TAGS") %}
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.tag_list') }}">
<i class="fas fa-tags me-2"></i>
Tag Editor
</a>
{% endif %}

{% if current_user.rank.at_least(current_user.rank.MODERATOR) %}
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.license_list') }}">
<i class="fas fa-balance-scale me-2"></i>
License Editor
</a>
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.version_list') }}">
<i class="fas fa-code me-2"></i>
Version Editor
</a>
{% endif %}

{% if current_user.rank.at_least(current_user.rank.ADMIN) %}
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.warning_list') }}">
<i class="fas fa-exclamation-triangle me-2"></i>
Warning Editor
</a>
{% endif %}
</div>
</div>
{% if current_user.rank.name == "ADMIN" %}
<div class="col-md-6">
<h3 class="mt-0">Admin</h3>
<div class="list-group">
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.send_bulk_email') }}">
<i class="fas fa-envelope me-2"></i>
Send bulk email
</a>
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.send_bulk_notification') }}">
<i class="fas fa-circle me-2"></i>
Send bulk notification
</a>
<a class="list-group-item list-group-item-action" href="{{ url_for('admin.switch_user') }}">
<i class="fas fa-user me-2"></i>
Sign in as another user
</a>
</div>
<div class="card my-4">
<h2 class="card-header">Do action</h2>

<form method="post" action="" class="card-body">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<div class="row px-3">
<select name="action" class="form-select col">
{% for id, action in actions.items() %}
<option value="{{ id }}" {% if loop.first %}selected{% endif %}>
{{ action["title"] }}
</option>
{% endfor %}
</select>
<input type="submit" value="Perform" class="col-sm-auto btn btn-primary ms-2" />
</div>
</form>
</div>
</div>
{% endif %}
</div>
{% endblock %}
14 changes: 1 addition & 13 deletions app/templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -159,21 +159,9 @@
{{ _("Audit Log") }}
</a>
</li>
{% if current_user.rank == current_user.rank.ADMIN %}
<li class="nav-item"><a class="nav-link" href="{{ url_for('admin.admin_page') }}">{{ _("Admin") }}</a></li>
{% else %}
{% if current_user.rank == current_user.rank.MODERATOR %}
<li class="nav-item"><a class="nav-link" href="{{ url_for('admin.license_list') }}">{{ _("License Editor") }}</a></li>
{% endif %}
{% endif %}
{% endif %}
{% if current_user.rank.at_least(current_user.rank.EDITOR) %}
<li class="nav-item"><a class="nav-link" href="{{ url_for('admin.restore') }}">{{ _("Restore Package") }}</a></li>
{% endif %}
{% if check_global_perm(current_user, "EDIT_TAGS") %}
<li class="nav-item"><a class="nav-link" href="{{ url_for('admin.tag_list') }}">{{ _("Tag Editor") }}</a></li>
{% elif check_global_perm(current_user, "CREATE_TAG") %}
<li class="nav-item"><a class="nav-link" href="{{ url_for('admin.create_edit_tag') }}">{{ _("Create Tag") }}</a></li>
<li class="nav-item"><a class="nav-link" href="{{ url_for('admin.admin_page') }}">{{ _("Admin") }}</a></li>
{% endif %}
<li class="dropdown-divider"></li>
<li class="nav-item">
Expand Down

0 comments on commit 50b8602

Please sign in to comment.