1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
<!DOCTYPE html>
<html lang="en">
<head>
{% block head %}
<title>{% block title %}{% endblock %} - OpenGnsys</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Font Awesome Icons -->
<link rel="stylesheet" href="{{ url_for('static', filename='AdminLTE/plugins/fontawesome-free/css/all.min.css') }}">
<!-- Theme style -->
<link rel="stylesheet" href="{{ url_for('static', filename='AdminLTE/dist/css/adminlte.min.css') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='css/soleta.css') }}?v=3" />
{% endblock %}
</head>
<body>
<div class="main d-flex flex-column align-items-stretch h-100">
<nav class="ogcp-nav navbar navbar-expand-lg navbar-dark bg-dark">
<a class="navbar-brand" href="{{ url_for('index') }}">OpenGnsys</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
{% if current_user.is_authenticated %}
<li class="nav-item {% block nav_dashboard%}{% endblock %}">
<a class="nav-link" href="{{ url_for('index') }}">{{ _('Dashboard') }}<span class="sr-only">(current)</span></a>
</li>
<li class="nav-item {% block nav_commands%}{% endblock %}">
<a class="nav-link" href="{{ url_for('commands') }}">{{ _('Commands') }}</a>
</li>
<li class="nav-item {% block nav_images%}{% endblock %}">
<a class="nav-link" href="{{ url_for('images') }}">{{ _('Images') }}</a>
</li>
<li class="nav-item {% block nav_scopes%}{% endblock %}">
<a class="nav-link" href="{{ url_for('scopes') }}">{{ _('Scopes management') }}</a>
</li>
<li class="nav-item {% block nav_repos %}{% endblock %}">
<a class="nav-link" href="{{ url_for('manage_repos') }}">{{ _('Repos') }}</a>
</li>
{% if current_user.admin %}
<li class="nav-item {% block nav_users %}{% endblock %}">
<a class="nav-link" href="{{ url_for('users') }}">{{ _('Users') }}</a>
</li>
{% endif %}
{% endif %}
</ul>
<ul class="nav navbar-nav navbar-right">
{% if current_user.is_authenticated %}
<li class="nav-item">
<span class="navbar-text">
{{ current_user.id }}
</span>
</li>
<li class="nav-item">
<a class="btn btn-danger" href="{{ url_for('logout') }}">{{ _('Logout') }}</a>
</li>
{% else %}
<li class="nav-item">
<a class="btn btn-primary" href="{{ url_for('login') }}">{{ _('Login') }}</a>
</li>
{% endif %}
</ul>
</div>
</nav>
<div class="container-fluid flex-grow-1">
{% block container %}
<div class="row h-100">
{# The sidebar is not visible on index and login #}
{% if request.endpoint not in ["index", "login"] %}
<div id="sidebar" class="bg-light col-md-3 col-lg-3">
{% block sidebar %}{% endblock %}
</div>
{% else %}
{% endif %}
<div id="content" class="col">
<div id="commands" class="py-2">{% block commands %}{% endblock %}</div>
<div class="container">
{% block content %}{% endblock %}
</div>
</div>
</div>
{% endblock %}
</div>
{% block footer %}
<footer class="footer navbar-inverse bg-dark flex-shrink-0" role="contentinfo">
<div class="text-center text-secondary mt-1 p-3">
Powered by
<a class="text-light" href="https://opengnsys.soleta.eu/">Soleta Networks</a>
</div>
</footer>
{% endblock %}
</div>
<!-- jQuery -->
<script src="{{ url_for('static', filename='AdminLTE/plugins/jquery/jquery.min.js') }}"></script>
<!-- Bootstrap 4 -->
<script src="{{ url_for('static', filename='AdminLTE/plugins/bootstrap/js/bootstrap.bundle.min.js') }}"></script>
<!-- AdminLTE App -->
<script src="{{ url_for('static', filename='AdminLTE/dist/js/adminlte.min.js') }}"></script>
<!-- ChartJS -->
<script src="{{ url_for('static', filename='AdminLTE/plugins/chart.js/Chart.min.js') }}"></script>
<script src="{{ url_for('static', filename='js/ogcp.js') }}?v=9"></script>
<script>
// error messages
$(document).ready(function() {
{% for category, message in get_flashed_messages(with_categories=True) %}
var bgclass = 'bg-success';
{% if category == 'info' %}
bgclass = 'bg-info';
{% elif category == 'error' %}
bgclass = 'bg-danger';
{% else %}
bgclass = 'bg-warning';
{% endif %}
$(document).Toasts('create', {
class: bgclass,
position: 'bottomRight',
autohide: true,
delay: 30000,
title: {{ message|tojson|safe }},
})
{% endfor %}
});
</script>
{% block extrabody %}{% endblock %}
</body>
</html>
|