|
2 | 2 | from bson import ObjectId |
3 | 3 | from time import time |
4 | 4 |
|
5 | | -from flask import Blueprint, Response, render_template |
| 5 | +from flask import abort, Blueprint, Response, render_template |
| 6 | +from flask_login import current_user, login_required |
6 | 7 | from wsgiref.handlers import format_date_time as format_date |
7 | 8 |
|
8 | 9 | from app.db import db_methods |
|
16 | 17 |
|
17 | 18 |
|
18 | 19 | @results_bp.route("/<string:_id>", methods=["GET"]) |
| 20 | +@login_required |
19 | 21 | def results_main(_id): |
20 | 22 | try: |
21 | 23 | oid = ObjectId(_id) |
22 | 24 | except bson.errors.InvalidId: |
23 | 25 | logger.error('_id exception:', exc_info=True) |
24 | | - return render_template("./404.html") |
| 26 | + return abort(404) |
25 | 27 | check = db_methods.get_check(oid) |
26 | 28 | if check is not None: |
27 | | - # show processing time for user |
28 | | - avg_process_time = None if check.is_ended else db_methods.get_average_processing_time() |
29 | | - return render_template("./results.html", navi_upload=True, results=check, |
30 | | - columns=TABLE_COLUMNS, avg_process_time=avg_process_time, |
31 | | - stats=format_check(check.pack())) |
| 29 | + # show check only for author or admin |
| 30 | + if current_user.is_admin or current_user.username == check.user: |
| 31 | + # show processing time for user |
| 32 | + avg_process_time = None if check.is_ended else db_methods.get_average_processing_time() |
| 33 | + return render_template("./results.html", navi_upload=True, results=check, |
| 34 | + columns=TABLE_COLUMNS, avg_process_time=avg_process_time, |
| 35 | + stats=format_check(check.pack())) |
| 36 | + else: |
| 37 | + return abort(403) |
32 | 38 | else: |
33 | 39 | logger.info("Запрошенная проверка не найдена: " + _id) |
34 | | - return render_template("./404.html") |
35 | | - |
| 40 | + return abort(404) |
| 41 | + |
| 42 | + |
36 | 43 | @results_bp.route("/svg/<string:_id>", methods=["GET"]) |
37 | 44 | def results_svg(_id): |
38 | 45 | try: |
|
0 commit comments