mirror of
https://github.com/aljazceru/CTFd.git
synced 2026-01-31 20:04:28 +01:00
* Adds plugin functions to register javascript and CSS in the admin panel * Move global plugin script/stylesheet lists into application factory specific lists * Closes #804
160 lines
7.4 KiB
HTML
160 lines
7.4 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
|
|
<head>
|
|
<title>Admin Panel</title>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<link rel="shortcut icon" href="{{ url_for('views.themes', theme='core', path='img/favicon.ico') }}" type="image/x-icon">
|
|
<link rel="icon" href="{{ url_for('views.themes', theme='core', path='img/favicon.ico') }}" type="image/x-icon">
|
|
<link rel="stylesheet" href="{{ url_for('views.themes', theme='admin', path='css/vendor/bootstrap.min.css') }}">
|
|
<link rel="stylesheet" href="{{ url_for('views.themes', theme='admin', path='css/vendor/font-awesome/fontawesome-fonts.css') }}" type='text/css'>
|
|
<link rel="stylesheet" href="{{ url_for('views.themes', theme='admin', path='css/vendor/font-awesome/fontawesome-all.min.css') }}" type='text/css'>
|
|
<link rel="stylesheet" href='{{ url_for('views.themes', theme='admin', path='css/vendor/font.css') }}'>
|
|
<link rel="stylesheet" href="{{ url_for('views.themes', theme='admin', path='css/jumbotron.css') }}">
|
|
<link rel="stylesheet" href="{{ url_for('views.themes', theme='admin', path='css/sticky-footer.css') }}">
|
|
<link rel="stylesheet" href="{{ url_for('views.themes', theme='admin', path='css/base.css') }}">
|
|
<script src="{{ url_for('views.themes', theme='admin', path='js/vendor/promise-polyfill.min.js') }}"></script>
|
|
<script src="{{ url_for('views.themes', theme='admin', path='js/vendor/fetch.min.js') }}"></script>
|
|
<script src="{{ url_for('views.themes', theme='admin', path='js/vendor/moment.min.js') }}"></script>
|
|
<script src="{{ url_for('views.themes', theme='admin', path='js/vendor/moment-timezone-with-data.min.js') }}"></script>
|
|
<script src="{{ url_for('views.themes', theme='admin', path='js/vendor/nunjucks.min.js') }}"></script>
|
|
<script type="text/javascript">
|
|
var script_root = "{{ request.script_root }}";
|
|
var csrf_nonce = "{{ nonce }}";
|
|
var user_mode = "{{ get_config('user_mode') }}";
|
|
</script>
|
|
{% block stylesheets %} {% endblock %}
|
|
{% for stylesheet in get_registered_admin_stylesheets() %}
|
|
{% if stylesheet.startswith('http') %}
|
|
<link rel="stylesheet" type="text/css" href="{{ stylesheet }}">
|
|
{% elif request.script_root %}
|
|
<link rel="stylesheet" type="text/css" href="{{ request.script_root }}/{{ stylesheet }}">
|
|
{% else %}
|
|
<link rel="stylesheet" type="text/css" href="{{ stylesheet }}">
|
|
{% endif %}
|
|
{% endfor %}
|
|
</head>
|
|
|
|
<body>
|
|
<nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top">
|
|
<div class="container">
|
|
<a href="{{ url_for('views.static_html', route='/') }}" class="navbar-brand">CTFd</a>
|
|
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#base-navbars"
|
|
aria-controls="base-navbars" aria-expanded="false" aria-label="Toggle navigation">
|
|
<span class="navbar-toggler-icon"></span>
|
|
</button>
|
|
<div class="collapse navbar-collapse" id="base-navbars">
|
|
<ul class="navbar-nav mr-auto">
|
|
<li class="nav-item"><a class="nav-link" href="{{ url_for('admin.statistics') }}">Statistics</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="{{ url_for('admin.notifications') }}">Notifications</a>
|
|
</li>
|
|
<li class="nav-item dropdown">
|
|
<a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="true">Pages</a>
|
|
<div class="dropdown-menu">
|
|
<a class="dropdown-item" href="{{ url_for('admin.pages_listing') }}">All Pages</a>
|
|
<a class="dropdown-item" href="{{ url_for('admin.pages_new') }}">New Page</a>
|
|
</div>
|
|
</li>
|
|
<li class="nav-item"><a class="nav-link" href="{{ url_for('admin.users_listing') }}">Users</a></li>
|
|
{% if get_config('user_mode') == 'teams' %}
|
|
<li class="nav-item"><a class="nav-link" href="{{ url_for('admin.teams_listing') }}">Teams</a></li>
|
|
{% endif %}
|
|
<li class="nav-item"><a class="nav-link" href="{{ url_for('admin.scoreboard_listing') }}">Scoreboard</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="{{ url_for('admin.challenges_listing') }}">Challenges</a></li>
|
|
<li class="nav-item dropdown">
|
|
<a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" role="button"
|
|
aria-haspopup="true" aria-expanded="true">Submissions</a>
|
|
<div class="dropdown-menu">
|
|
<a class="dropdown-item" href="{{ url_for('admin.submissions_listing') }}">All Submissions</a>
|
|
<a class="dropdown-item" href="{{ url_for('admin.submissions_listing', submission_type='correct') }}">Correct Submissions</a>
|
|
<a class="dropdown-item" href="{{ url_for('admin.submissions_listing', submission_type='incorrect') }}">Wrong Submissions</a>
|
|
</div>
|
|
</li>
|
|
<li class="nav-item"><a class="nav-link" href="{{ url_for('admin.config') }}">Config</a></li>
|
|
|
|
{% set plugin_menu = get_admin_plugin_menu_bar() %}
|
|
{% set plugins = get_configurable_plugins() %}
|
|
{% if plugin_menu or plugins %}
|
|
<li class="nav-item">
|
|
<a class="nav-link d-none d-md-block d-lg-block">|</a>
|
|
</li>
|
|
|
|
{% for menu in plugin_menu %}
|
|
{% if request.script_root %}
|
|
{% set route = '/' + request.script_root + '/' + menu.route %}
|
|
{% else %}
|
|
{% set route = menu.route %}
|
|
{% endif %}
|
|
<li class="nav-item"><a class="nav-link" href="{{ route }}">{{ menu.title }}</a></li>
|
|
{% endfor %}
|
|
|
|
{% if plugins %}
|
|
<li class="nav-item dropdown">
|
|
<a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Plugins <span class="caret"></span></a>
|
|
<ul class="dropdown-menu">
|
|
{% for plugin in plugins %}
|
|
<a class="dropdown-item" href="{{ request.script_root }}{{ plugin.route }}">{{ plugin.name }}</a>
|
|
{% endfor %}
|
|
</ul>
|
|
</li>
|
|
{% endif %}
|
|
{% endif %}
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
{% if get_config('version_latest') %}
|
|
<div class="container-fluid bg-warning text-center py-3">
|
|
<div class="row">
|
|
<div class="col-md-12">
|
|
<a class="btn btn-warning" href="{{ get_config('version_latest') }}">
|
|
A new CTFd version is available!
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
|
|
<main role="main">
|
|
{% block content %}
|
|
{% endblock %}
|
|
</main>
|
|
|
|
<footer class="footer pt-2">
|
|
<div class="container text-center">
|
|
<a href="https://ctfd.io">
|
|
<small class="text-muted">
|
|
Powered by CTFd
|
|
</small>
|
|
</a>
|
|
<span>
|
|
<small class="text-muted"><br> Version {{ get_config('ctf_version') }}</small>
|
|
</span>
|
|
</div>
|
|
</footer>
|
|
|
|
<script src="{{ url_for('views.themes', theme='admin', path='js/vendor/jquery.min.js') }}"></script>
|
|
<script src="{{ url_for('views.themes', theme='admin', path='js/vendor/markdown-it.min.js') }}"></script>
|
|
<script src="{{ url_for('views.themes', theme='admin', path='js/vendor/bootstrap.bundle.min.js') }}"></script>
|
|
<script src="{{ url_for('views.themes', theme='admin', path='js/main.js') }}"></script>
|
|
<script src="{{ url_for('views.themes', theme='admin', path='js/utils.js') }}"></script>
|
|
<script src="{{ url_for('views.themes', theme='admin', path='js/ezq.js') }}"></script>
|
|
<script src="{{ url_for('views.themes', theme='admin', path='js/style.js') }}"></script>
|
|
{% block scripts %} {% endblock %}
|
|
|
|
{% for script in get_registered_admin_scripts() %}
|
|
{% if script.startswith('http') %}
|
|
<script src="{{ script }}"></script>
|
|
{% elif request.script_root %}
|
|
<script src="{{ request.script_root }}/{{ script }}"></script>
|
|
{% else %}
|
|
<script src="{{ script }}"></script>
|
|
{% endif %}
|
|
{% endfor %}
|
|
</body>
|
|
|
|
</html>
|