Skip to content

Commit 654cd97

Browse files
committed
check_task_attempt_access
1 parent 7af3d9c commit 654cd97

File tree

6 files changed

+38
-14
lines changed

6 files changed

+38
-14
lines changed

app/api/task_attempts.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from bson import ObjectId
44
from flask import session, request, Blueprint
55

6-
from app.check_access import check_access
6+
from app.check_access import check_access, check_task_attempt_access
77
from app.lti_session_passback.auth_checkers import check_auth, is_admin
88
from app.mongo_odm import TaskAttemptsDBManager, TasksDBManager
99
from app.utils import check_arguments_are_convertible_to_object_id, check_argument_is_convertible_to_object_id
@@ -91,7 +91,7 @@ def get_task_attempt(task_attempt_id) -> tuple[dict, int]:
9191
a dictionary with an explanation and 404 HTTP return code if a task attempt was not found, or
9292
an empty dictionary with 404 HTTP return code if access was denied.
9393
"""
94-
if not check_access({'_id': ObjectId(task_attempt_id)}):
94+
if not check_task_attempt_access(task_attempt_id):
9595
return {}, 404
9696

9797
task_attempt_db = TaskAttemptsDBManager().get_task_attempt(task_attempt_id)

app/api/trainings.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
from app.audio import Audio
1212
from app.check_access import check_access
13-
from app.lti_session_passback.auth_checkers import is_admin, check_auth, check_admin
13+
from app.lti_session_passback.auth_checkers import is_admin, check_auth, check_admin, is_logged_in
1414
from app.mongo_models import Trainings
1515
from app.mongo_odm import TrainingsDBManager, TaskAttemptsDBManager, TasksDBManager, DBManager
1616
from app.filters import GetAllTrainingsFilterManager
@@ -439,8 +439,7 @@ def get_all_trainings() -> (dict, int):
439439

440440
print(number_page, count_items)
441441

442-
authorized = check_auth() is not None
443-
if not (check_admin() or (authorized and [session.get('session_id')] == username)):
442+
if not (check_admin() or (is_logged_in() and [session.get('session_id')] == username)):
444443
return {}, 404
445444

446445
trainings = GetAllTrainingsFilterManager().query_with_filters(filters, number_page, count_items)

app/check_access.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from flask import session
22

3-
from app.mongo_odm import SessionsDBManager, TrainingsDBManager
3+
from app.mongo_odm import SessionsDBManager, TrainingsDBManager, TaskAttemptsDBManager
44
from app.utils import is_testing_active
55

66

@@ -25,3 +25,25 @@ def _check_access(filters: dict) -> bool:
2525

2626
def _check_access_testing(filters: dict) -> bool:
2727
return True
28+
29+
def _check_task_attempt_access(task_attempt_id: str) -> bool:
30+
username = session.get('session_id', default=None)
31+
consumer_key = session.get('consumer_key', default=None)
32+
user_session = SessionsDBManager().get_session(username, consumer_key)
33+
34+
if not user_session:
35+
return False
36+
if user_session.is_admin:
37+
return True
38+
39+
task_attempt = TaskAttemptsDBManager().get_task_attempt(task_attempt_id)
40+
return task_attempt.username == username
41+
42+
def check_task_attempt_access(task_attempt_id: str) -> bool:
43+
if not is_testing_active():
44+
return _check_task_attempt_access(task_attempt_id)
45+
else:
46+
return _check_task_attempt_access_testing(task_attempt_id)
47+
48+
def _check_task_attempt_access_testing(task_attempt_id: str) -> bool:
49+
return True

app/routes/task_attempts.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,19 @@
55
from app.localisation import *
66

77
from app.api.task_attempts import get_task_attempt
8-
from app.check_access import check_access
8+
from app.check_access import check_access, check_task_attempt_access
99
from app.lti_session_passback.auth_checkers import check_admin, check_auth
1010
from app.utils import check_arguments_are_convertible_to_object_id
1111

1212
routes_task_attempts = Blueprint('routes_task_attempts', __name__)
1313
logger = get_root_logger()
1414

15+
def ch(tr_id):
16+
print(tr_id)
17+
print(check_access({'_id': ObjectId(tr_id)}), sep=" ")
18+
print()
19+
return check_access({'_id': ObjectId(tr_id)})
20+
1521
@check_arguments_are_convertible_to_object_id
1622
@routes_task_attempts.route('/task_attempts/<task_attempt_id>/', methods=['GET'])
1723
def view_task_attempt(task_attempt_id: str):
@@ -22,11 +28,9 @@ def view_task_attempt(task_attempt_id: str):
2228
:return: Page or an empty dictionary with 404 HTTP code if access was denied.
2329
"""
2430

25-
if not check_access({'_id': ObjectId(task_attempt_id)}):
31+
if not check_task_attempt_access(task_attempt_id):
2632
return {}, 404
2733

28-
# Нужна ли проверка авторизации?
29-
3034
task_attempt, task_attempt_status_code = get_task_attempt(task_attempt_id)
3135

3236
if task_attempt.get('message') != 'OK':

app/routes/trainings.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from app.check_access import check_access
1313
from app.criteria_pack import CriteriaPackFactory
1414
from app.feedback_evaluator import FeedbackEvaluatorFactory
15-
from app.lti_session_passback.auth_checkers import check_admin, check_auth
15+
from app.lti_session_passback.auth_checkers import check_admin, check_auth, is_logged_in
1616
from app.mongo_odm import CriterionPackDBManager, TasksDBManager, TaskAttemptsDBManager
1717
from app.status import TrainingStatus, AudioStatus, PresentationStatus
1818
from app.utils import check_arguments_are_convertible_to_object_id
@@ -141,8 +141,7 @@ def view_all_trainings():
141141
except:
142142
pass
143143

144-
authorized = check_auth() is not None
145-
if not (check_admin() or (authorized and session.get('session_id') == username)):
144+
if not (check_admin() or (is_logged_in() and session.get('session_id') == username)):
146145
return {}, 404
147146

148147
raw_filters = request.args.getlist('f')

app/static/js/task_attempts.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ function createTableRowElement(trainingInfo, trainingId) {
4242
tableRowIdElement.innerHTML = `<a href="/trainings/statistics/${trainingId}/">${trainingId}</a>`;
4343

4444
const tableRowScoreElement = document.createElement("td");
45-
tableRowScoreElement.innerHTML = trainingInfo.score.toFixed(2) || "none";
45+
tableRowScoreElement.innerHTML = trainingInfo.score ? trainingInfo.score.toFixed(2) : "none";
4646

4747
const tableRowStatusElement = document.createElement("td");
4848
tableRowStatusElement.innerHTML = trainingInfo.passedBackStatus || "none";

0 commit comments

Comments
 (0)