Skip to content

Commit 22d1fe4

Browse files
28.01.2025_Réécriture de la logique back-end du système de modification de parcours et securisation des mot de passe avec bcrypt
1 parent 2eb00c7 commit 22d1fe4

27 files changed

Lines changed: 2144 additions & 869 deletions

File tree

flask_app/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from flask_babel import Babel, lazy_gettext, gettext, _
99
from flask_socketio import SocketIO
1010
from sqlalchemy import URL
11+
from flask_bcrypt import Bcrypt
1112
import os
1213
from dotenv import load_dotenv
1314
install()
@@ -45,6 +46,8 @@
4546

4647
socketio = SocketIO(app)
4748

49+
bcrypt = Bcrypt(app)
50+
4851
login_manager = LoginManager()
4952
login_manager.init_app(app)
5053
login_manager.login_view = 'users.login'

flask_app/admin/coureurs/templates/coureurs.html

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,30 @@
22
{% block content %}
33
<h3>{{ _('admin.view.coureurs') }}</h3>
44
<div class="d-flex justify-content-center flex-wrap">
5-
{% for inscrit in event_data.get_unique_inscrits() %}
6-
<div class="d-inline-flex card m-1">
7-
<div class="w-100 card-header d-flex justify-content-between align-items-center">
8-
<h5 class="px-2">{{inscrit.inscrit.name}} {{inscrit.inscrit.lastname}}</h5>
9-
<div class="vr"></div>
10-
<a href="#" class="px-2"><i class="fa-solid fa-ellipsis-vertical"></i></a>
11-
</div>
12-
<div class="card-body">
13-
<a href="{{ url_for('admin.coureurs.view_coureur_page', event_name=event_data.name, coureur=inscrit.inscrit.id) }}" class="text-decoration-none link-dark">
14-
{{inscrit.inscrit.username}}
15-
</a>
16-
</div>
17-
</div>
18-
{% endfor %}
5+
6+
<table class="table table-striped table-hover clickable-table">
7+
<thead>
8+
<tr>
9+
<th scope="col">{{_('admin.coureurs.username')}}</th>
10+
<th scope="col">{{_('admin.coureurs.lastname')}}</th>
11+
<th scope="col">{{_('admin.coureurs.name')}}</th>
12+
</tr>
13+
</thead>
14+
<tbody>
15+
{% for inscrit in event_data.get_unique_inscrits() %}
16+
<tr data-href="{{ url_for('admin.coureurs.view_coureur_page', event_name=event_data.name, coureur=inscrit.inscrit.id) }}">
17+
<th scope="row">{{ inscrit.inscrit.username }}</th>
18+
<td>{{ inscrit.inscrit.lastname }}</td>
19+
<td>{{ inscrit.inscrit.name }}</td>
20+
</tr>
21+
{% endfor %}
22+
</tbody>
23+
</table>
24+
25+
<script>
26+
$('table tbody tr').on('click', function() {
27+
window.location.href = $(this).data('href');
28+
});
29+
</script>
1930
</div>
2031
{% endblock content %}

flask_app/admin/coureurs/templates/view_coureur.html

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,18 @@ <h3>{{ _('admin.view.info') }}</h3>
99
</div>
1010
<div class="col-sm-9">
1111
<p class="text-muted mb-0">
12-
{{coureur_data.name}} {{coureur_data.last_name}}
12+
{{coureur_data.name}}
13+
</p>
14+
</div>
15+
</div>
16+
<hr />
17+
<div class="row">
18+
<div class="col-sm-3">
19+
<p class="mb-0">{{ _('admin.view.lastname') }}</p>
20+
</div>
21+
<div class="col-sm-9">
22+
<p class="text-muted mb-0">
23+
{{coureur_data.lastname}}
1324
</p>
1425
</div>
1526
</div>
Lines changed: 29 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,31 @@
11
<div class="d-flex flex-column flex-md-row">
2-
<nav class="navbar navbar-expand-md d-flex flex-md-column p-0 w-100">
3-
<button
4-
class="navbar-toggler"
5-
type="button"
6-
data-bs-toggle="collapse"
7-
data-bs-target="#sidebarSupportedContent"
8-
aria-controls="sidebarSupportedContent"
9-
aria-expanded="false"
10-
aria-label="Toggle Navigation"
11-
>
12-
<span class="navbar-toggler-icon"></span>
13-
</button>
14-
15-
<div class="collapse navbar-collapse w-100" id="sidebarSupportedContent">
16-
<ul
17-
class="navbar-nav w-100 d-flex flex-md-column text-center text-md-end"
18-
>
19-
<li class="nav-item bg-danger btn mb-2">
20-
<a
21-
class="nav-link"
22-
href="{{ url_for('admin.editions.modify_edition_page', event_name=event_data.name, edition_name=edition_data.name) }}"
23-
>{{ edition_data.name }}</a
24-
>
25-
</li>
26-
<li class="nav-item bg-success btn mb-2">
27-
<a
28-
class="nav-link "
29-
href="{{ url_for('admin.editions.passages.dashboard', event_name=event_data.name, edition_name=edition_data.name) }}"
30-
>{{ _('admin.editions.gererpassage') }}</a
31-
>
32-
</li>
33-
<li class="nav-item bg-info btn mb-2">
34-
<a
35-
class="nav-link "
36-
href="{{ url_for('admin.editions.dossard.generate_dossard', event_name=event_data.name, edition_name=edition_data.name) }}"
37-
>{{ _('admin.editions.gererdossard') }}</a
38-
>
39-
</li>
40-
{% if now>edition_data.edition_date %}
41-
<li class="nav-item bg-info btn mb-2">
42-
<a
43-
class="nav-link "
44-
href="{{ url_for('admin.editions.parcours.view', event_name=event_data.name, edition_name=edition_data.name) }}"
45-
>{{ _('admin.editions.gererparcours') }}</a
46-
>
47-
</li>
48-
{% endif %}
49-
<li class="nav-item bg-info btn mb-2">
50-
<a
51-
class="nav-link "
52-
href="{{ url_for('admin.editions.result.result_page', event_name=event_data.name, edition_name=edition_data.name) }}"
53-
>{{ _('admin.editions.result') }}</a
54-
>
55-
</li>
56-
</ul>
57-
</div>
58-
</nav>
2+
<ul class="navbar-nav w-100 d-flex flex-md-column ">
3+
<li class="nav-item btn">
4+
<a class="nav-link"
5+
href="{{ url_for('admin.editions.modify_edition_page', event_name=event_data.name, edition_name=edition_data.name) }}">{{
6+
edition_data.name }}</a>
7+
</li>
8+
<li class="nav-item btn">
9+
<a class="nav-link "
10+
href="{{ url_for('admin.editions.passages.dashboard', event_name=event_data.name, edition_name=edition_data.name) }}">{{
11+
_('admin.editions.gererpassage') }}</a>
12+
</li>
13+
<li class="nav-item btn">
14+
<a class="nav-link "
15+
href="{{ url_for('admin.editions.dossard.generate_dossard', event_name=event_data.name, edition_name=edition_data.name) }}">{{
16+
_('admin.editions.gererdossard') }}</a>
17+
</li>
18+
{% if now>edition_data.edition_date %}
19+
<li class="nav-item btn">
20+
<a class="nav-link "
21+
href="{{ url_for('admin.editions.parcours.view', event_name=event_data.name, edition_name=edition_data.name) }}">{{
22+
_('admin.editions.gererparcours') }}</a>
23+
</li>
24+
{% endif %}
25+
<li class="nav-item btn">
26+
<a class="nav-link "
27+
href="{{ url_for('admin.editions.result.result_page', event_name=event_data.name, edition_name=edition_data.name) }}">{{
28+
_('admin.editions.result') }}</a>
29+
</li>
30+
</ul>
5931
</div>

flask_app/admin/editions/templates/editions.html

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,40 @@
11
{% extends 'layout.html' %} {% from 'macro.html' import map_field, form_field %} {% block content %}
22
<h3>{{ _('admin.editions.editions') }}</h3>
33
<div class="d-flex justify-content-center flex-wrap">
4-
{% for edition in event_data.editions %}
5-
<div class="d-inline-flex card m-1">
6-
<div class="w-100 card-header d-flex justify-content-between align-items-center">
7-
<h5 class="px-2">{{edition.name}}</h5>
8-
<div class="vr"></div>
9-
<a href="#" class="px-2"><i class="fa-solid fa-ellipsis-vertical"></i></a>
10-
</div>
11-
<div class="card-body">
12-
<a href="{{ url_for('admin.editions.modify_edition_page', event_name=event_data.name, edition_name=edition.name) }}"
13-
class="text-decoration-none link-dark">
14-
{{edition.edition_date.strftime('%d.%m.%Y')}}
15-
</a>
16-
</div>
17-
</div>
18-
{% endfor %}
19-
<div class="d-inline-flex card m-1">
20-
<div class="card-body d-flex align-items-center justify-content-center">
21-
{% if form.parcours.choices|length > 0 %}
22-
<a type="button" onclick="modal.show()" class="text-decoration-none link-dark">
23-
<i class="fa-solid fa-circle-plus"></i>
24-
</a>
25-
{% else %}
26-
<a class="text-decoration-none link-dark"
27-
href="{{ url_for('admin.parcours.parcours_page', event=event_data.name) }}">
28-
<p>{{ _('admin.editions.startcreateparcours') }}</p>
29-
</a>
30-
{% endif %}
31-
</div>
4+
<table class="table table-striped table-hover clickable-table">
5+
<thead>
6+
<tr>
7+
<th scope="col">{{_('admin.editions.name')}}</th>
8+
<th scope="col">{{_('admin.editions.date')}}</th>
9+
</tr>
10+
</thead>
11+
<tbody>
12+
{% for edition in event_data.editions %}
13+
<tr data-href="{{ url_for('admin.editions.modify_edition_page', event_name=event_data.name, edition_name=edition.name) }}">
14+
<th scope="row">{{ edition.name }}</th>
15+
<td>{{ edition.edition_date.strftime('%d.%m.%Y') }}</td>
16+
</tr>
17+
{% endfor %}
18+
</tbody>
19+
</table>
20+
{% if form.parcours.choices|length > 0 %}
21+
<div class="d-inline-flex card m-1">
22+
<a type="button" onclick="modal.show()" class="text-decoration-none link-dark card-body d-flex align-items-center justify-content-center">
23+
<i class="fa-solid fa-circle-plus"></i>
24+
</a>
3225
</div>
26+
{% else %}
27+
<a class="text-decoration-none link-dark"
28+
href="{{ url_for('admin.parcours.parcours_page', event_name=event_data.name) }}">
29+
<p>{{ _('admin.editions.startcreateparcours') }}</p>
30+
</a>
31+
{% endif %}
32+
33+
<script>
34+
$('table tbody tr').on('click', function() {
35+
window.location.href = $(this).data('href');
36+
});
37+
</script>
3338

3439
<!-- Modal -->
3540
<div class="modal fade show" id="new_edition_modal" tabindex="-1" aria-labelledby="new_edition_label"

0 commit comments

Comments
 (0)