Skip to content
Snippets Groups Projects
Verified Commit 9589f35c authored by Peter Stanko's avatar Peter Stanko
Browse files

Logging the get operation

parent bb7a8b4f
No related branches found
No related tags found
1 merge request!47Unified logging refactor - loading config from variables
...@@ -21,6 +21,7 @@ class ClientController(CustomResource): ...@@ -21,6 +21,7 @@ class ClientController(CustomResource):
def get(self): def get(self):
client = self.permissions.client_owner client = self.permissions.client_owner
schema = SCHEMAS.user() if client.type == ClientType.USER else SCHEMAS.worker() schema = SCHEMAS.user() if client.type == ClientType.USER else SCHEMAS.worker()
log.debug(f"[REST] Get current client {client.log_name} by {self.client.log_name}")
return schema.dump(client)[0], 200 return schema.dump(client)[0], 200
...@@ -33,7 +34,7 @@ class ClientController(CustomResource): ...@@ -33,7 +34,7 @@ class ClientController(CustomResource):
def get(self, cid: str): def get(self, cid: str):
self.permissions.require.sysadmin_or_self(cid) self.permissions.require.sysadmin_or_self(cid)
client = self.rest.find.client(cid) client = self.rest.find.client(cid)
log.debug(f"[REST] Get client {client.log_name} by {self.client.log_name}")
schema = SCHEMAS.user() if client.type == ClientType.USER else SCHEMAS.worker() schema = SCHEMAS.user() if client.type == ClientType.USER else SCHEMAS.worker()
return schema.dump(client)[0], 200 return schema.dump(client)[0], 200
...@@ -47,6 +48,7 @@ class ClientSecretsController(CustomResource): ...@@ -47,6 +48,7 @@ class ClientSecretsController(CustomResource):
def get(self, cid: str): def get(self, cid: str):
self.permissions.require.sysadmin_or_self(cid) self.permissions.require.sysadmin_or_self(cid)
client = self.rest.find.client(cid) client = self.rest.find.client(cid)
log.debug(f"[REST] Get client secrets {client.log_name} by {self.client.log_name}")
return SCHEMAS.dump('secrets', client.secrets) return SCHEMAS.dump('secrets', client.secrets)
@jwt_required @jwt_required
...@@ -56,6 +58,8 @@ class ClientSecretsController(CustomResource): ...@@ -56,6 +58,8 @@ class ClientSecretsController(CustomResource):
self.permissions.require.sysadmin_or_self(cid) self.permissions.require.sysadmin_or_self(cid)
data = rest_helpers.parse_request_data(action='create', resource='secret') data = rest_helpers.parse_request_data(action='create', resource='secret')
client = self.find.client(cid) client = self.find.client(cid)
log.info(f"[REST] Create new secret by {self.client.log_name} "
f"for {client.log_name}: {data} ")
new_secret, value = self.rest.secrets(client=client).create(**data) new_secret, value = self.rest.secrets(client=client).create(**data)
return {'id': new_secret.id, 'value': value}, 201 return {'id': new_secret.id, 'value': value}, 201
...@@ -70,6 +74,7 @@ class ClientSecretController(CustomResource): ...@@ -70,6 +74,7 @@ class ClientSecretController(CustomResource):
def get(self, cid: str, sid: str): def get(self, cid: str, sid: str):
self.rest.permissions.require.sysadmin_or_self(cid) self.rest.permissions.require.sysadmin_or_self(cid)
client = self.rest.find.client(cid) client = self.rest.find.client(cid)
log.debug(f"[REST] Get secret for {client.log_name} by {self.client.log_name}: {sid}")
secret = self.rest.find.secret(client, sid) secret = self.rest.find.secret(client, sid)
return SCHEMAS.dump('secret', secret) return SCHEMAS.dump('secret', secret)
...@@ -80,6 +85,8 @@ class ClientSecretController(CustomResource): ...@@ -80,6 +85,8 @@ class ClientSecretController(CustomResource):
self.rest.permissions.require.sysadmin_or_self(cid) self.rest.permissions.require.sysadmin_or_self(cid)
client = self.find.client(cid) client = self.find.client(cid)
secret = self.find.secret(client, sid) secret = self.find.secret(client, sid)
log.info(f"[REST] Delete a secret by {self.client.log_name}: {secret.log_name} ")
self.rest.secrets(secret).delete() self.rest.secrets(secret).delete()
return '', 204 return '', 204
...@@ -94,5 +101,6 @@ class ClientSecretController(CustomResource): ...@@ -94,5 +101,6 @@ class ClientSecretController(CustomResource):
client = self.find.client(cid) client = self.find.client(cid)
secret = self.find.secret(client, sid) secret = self.find.secret(client, sid)
log.info(f"[REST] Update a secret {secret.log_name} by {self.client.log_name}: {data} ")
self.rest.secrets(secret).update(**data) self.rest.secrets(secret).update(**data)
return '', 204 return '', 204
...@@ -23,7 +23,7 @@ class CourseList(CustomResource): ...@@ -23,7 +23,7 @@ class CourseList(CustomResource):
def get(self): def get(self):
# authorization # authorization
self.permissions.require.sysadmin() self.permissions.require.sysadmin()
log.debug(f"[REST] Get Courses by {self.client.log_name}")
courses_list = self.rest.courses.find_all() courses_list = self.rest.courses.find_all()
return SCHEMAS.dump('courses', courses_list) return SCHEMAS.dump('courses', courses_list)
...@@ -51,6 +51,7 @@ class CourseResource(CustomResource): ...@@ -51,6 +51,7 @@ class CourseResource(CustomResource):
client = self.rest.auth.client client = self.rest.auth.client
course = self.rest.find.course(cid) course = self.rest.find.course(cid)
# authorization # authorization
log.debug(f"[REST] Get course {course.log_name} by {self.client.log_name}")
perm_service = self.permissions(course=course) perm_service = self.permissions(course=course)
if perm_service.check.permissions(['view_course_full']): if perm_service.check.permissions(['view_course_full']):
return SCHEMAS.dump('course', course) return SCHEMAS.dump('course', course)
...@@ -99,6 +100,7 @@ class CourseNotesToken(CustomResource): ...@@ -99,6 +100,7 @@ class CourseNotesToken(CustomResource):
def get(self, cid): def get(self, cid):
course = self.find.course(cid) course = self.find.course(cid)
# authorization # authorization
log.debug(f"[REST] Get course notes token in {course.log_name} by {self.client.log_name}")
self.permissions(course=course).require.course_access_token() self.permissions(course=course).require.course_access_token()
return course.notes_access_token return course.notes_access_token
...@@ -173,6 +175,9 @@ class CourseClients(CustomResource): ...@@ -173,6 +175,9 @@ class CourseClients(CustomResource):
group_ids = request.args.getlist('group') group_ids = request.args.getlist('group')
role_ids = request.args.getlist('role') role_ids = request.args.getlist('role')
client_type = extract_client_type() client_type = extract_client_type()
log.debug(f"[REST] Get course clients in {course.log_name} "
f"by {self.client.log_name}: roles={role_ids}, groups={group_ids}, "
f"type={client_type}")
clients = self.rest.courses(course).get_clients_filtered(group_ids, role_ids, clients = self.rest.courses(course).get_clients_filtered(group_ids, role_ids,
client_type=client_type) client_type=client_type)
return SCHEMAS.dump('clients', clients) return SCHEMAS.dump('clients', clients)
...@@ -189,8 +194,11 @@ class CourseClients(CustomResource): ...@@ -189,8 +194,11 @@ class CourseClients(CustomResource):
self.permissions(course=course).require.permissions(['view_course_full']) self.permissions(course=course).require.permissions(['view_course_full'])
group_ids = request.args.getlist('group') group_ids = request.args.getlist('group')
role_ids = request.args.getlist('role') role_ids = request.args.getlist('role')
log.debug(f"[REST] Get course users in {course.log_name} "
f"by {self.client.log_name}: roles={role_ids}, groups={group_ids}")
users = self.rest.courses(course).get_clients_filtered(group_ids, role_ids, users = self.rest.courses(course).get_clients_filtered(group_ids, role_ids,
client_type=ClientType.USER) client_type=ClientType.USER)
return SCHEMAS.dump('users', users) return SCHEMAS.dump('users', users)
@courses_namespace.route('/<string:cid>/workers') @courses_namespace.route('/<string:cid>/workers')
...@@ -205,6 +213,8 @@ class CourseClients(CustomResource): ...@@ -205,6 +213,8 @@ class CourseClients(CustomResource):
self.permissions(course=course).require.permissions(['view_course_full']) self.permissions(course=course).require.permissions(['view_course_full'])
group_ids = request.args.getlist('group') group_ids = request.args.getlist('group')
role_ids = request.args.getlist('role') role_ids = request.args.getlist('role')
log.debug(f"[REST] Get course workers in {course.log_name} "
f"by {self.client.log_name}: roles={role_ids}, groups={group_ids}")
workers = self.rest.courses(course).get_clients_filtered(group_ids, role_ids, workers = self.rest.courses(course).get_clients_filtered(group_ids, role_ids,
client_type=ClientType.WORKER) client_type=ClientType.WORKER)
return SCHEMAS.dump('workers', workers) return SCHEMAS.dump('workers', workers)
...@@ -21,6 +21,7 @@ class GroupsList(CustomResource): ...@@ -21,6 +21,7 @@ class GroupsList(CustomResource):
# @groups_namespace.response(200, 'List of all groups', model=groups_schema) # @groups_namespace.response(200, 'List of all groups', model=groups_schema)
def get(self, cid: str): def get(self, cid: str):
course = self.find.course(cid) course = self.find.course(cid)
log.debug(f"[REST] Get groups in {course.log_name} by {self.client.log_name}")
groups = self.rest.groups.find_all(course) groups = self.rest.groups.find_all(course)
return SCHEMAS.dump('groups', groups) return SCHEMAS.dump('groups', groups)
...@@ -51,8 +52,8 @@ class GroupResource(CustomResource): ...@@ -51,8 +52,8 @@ class GroupResource(CustomResource):
def get(self, cid: str, gid: str): def get(self, cid: str, gid: str):
course = self.find.course(cid) course = self.find.course(cid)
# authorization # authorization
log.debug(f"[REST] Get group in {course.log_name} by {self.client.log_name}: {gid}")
self.permissions(course=course).require.view_course() self.permissions(course=course).require.view_course()
group = self.find.group(course, gid) group = self.find.group(course, gid)
return SCHEMAS.dump('group', group) return SCHEMAS.dump('group', group)
...@@ -97,6 +98,7 @@ class GroupUsersList(CustomResource): ...@@ -97,6 +98,7 @@ class GroupUsersList(CustomResource):
group = self.find.group(course, gid) group = self.find.group(course, gid)
# authorization # authorization
log.debug(f"[REST] Get group users in {group.log_name} by {self.client.log_name}")
self.permissions(course=course).require.belongs_to_group(group) self.permissions(course=course).require.belongs_to_group(group)
users = self.rest.groups(group).find_users_by_role(role_id=role_id) users = self.rest.groups(group).find_users_by_role(role_id=role_id)
...@@ -179,7 +181,7 @@ class GroupProjectsList(CustomResource): ...@@ -179,7 +181,7 @@ class GroupProjectsList(CustomResource):
group = self.find.group(course, gid) group = self.find.group(course, gid)
# authorization # authorization
self.permissions(course=course).require.belongs_to_group(group) self.permissions(course=course).require.belongs_to_group(group)
log.debug(f"[REST] Get group projects in {group.log_name} by {self.client.log_name}")
projects = self.rest.groups(group).find_projects() projects = self.rest.groups(group).find_projects()
return SCHEMAS.dump('projects', projects) return SCHEMAS.dump('projects', projects)
......
...@@ -24,6 +24,7 @@ class ProjectsList(CustomResource): ...@@ -24,6 +24,7 @@ class ProjectsList(CustomResource):
# @projects_namespace.response(200, 'Projects list', model=projects_schema) # @projects_namespace.response(200, 'Projects list', model=projects_schema)
def get(self, cid: str): def get(self, cid: str):
course = self.find.course(cid) course = self.find.course(cid)
log.debug(f"[REST] Get projects in {course.log_name} by {self.client.log_name}")
projects = self.rest.projects.find_all(course) projects = self.rest.projects.find_all(course)
return SCHEMAS.dump('projects', projects) return SCHEMAS.dump('projects', projects)
...@@ -56,7 +57,7 @@ class ProjectResource(CustomResource): ...@@ -56,7 +57,7 @@ class ProjectResource(CustomResource):
course = self.find.course(cid) course = self.find.course(cid)
# authorization # authorization
self.permissions(course=course).require.view_course() self.permissions(course=course).require.view_course()
log.debug(f"[REST] Get project in {course.log_name} by {self.client.log_name}: {pid}")
project = self.find.project(course, pid) project = self.find.project(course, pid)
return SCHEMAS.dump('project', project) return SCHEMAS.dump('project', project)
...@@ -102,6 +103,8 @@ class ProjectConfigResource(CustomResource): ...@@ -102,6 +103,8 @@ class ProjectConfigResource(CustomResource):
course = self.find.course(cid) course = self.find.course(cid)
project = self.find.project(course, pid) project = self.find.project(course, pid)
# authorization # authorization
log.debug(f"[REST] Get project config in {project.log_name}"
f" by {self.client.log_name}")
schema = self.get_config_schema_based_on_permissions(course) schema = self.get_config_schema_based_on_permissions(course)
return schema.dump(project.config) return schema.dump(project.config)
...@@ -167,6 +170,8 @@ class ProjectSubmissions(CustomResource): ...@@ -167,6 +170,8 @@ class ProjectSubmissions(CustomResource):
user_id = request.args.get('user') user_id = request.args.get('user')
project = self.find.project(course, pid) project = self.find.project(course, pid)
log.debug(f"[REST] Get project submissions in {project.log_name}"
f" by {self.client.log_name} for user {user_id}")
submissions = self.rest.projects(project).find_project_submissions(user_id) submissions = self.rest.projects(project).find_project_submissions(user_id)
return SCHEMAS.dump('submissions', submissions) return SCHEMAS.dump('submissions', submissions)
...@@ -211,6 +216,8 @@ class ProjectTestFiles(CustomResource): ...@@ -211,6 +216,8 @@ class ProjectTestFiles(CustomResource):
course = self.find.course(cid) course = self.find.course(cid)
self.permissions(course=course).require.view_course_full() self.permissions(course=course).require.view_course_full()
project = self.find.project(course, pid) project = self.find.project(course, pid)
log.debug(f"[REST] Get project test files in {project.log_name}"
f" by {self.client.log_name}")
service = self.rest.storage(project=project) service = self.rest.storage(project=project)
storage_entity = service.get_test_files_entity_from_storage() storage_entity = service.get_test_files_entity_from_storage()
return service.send_file_or_zip(storage_entity) return service.send_file_or_zip(storage_entity)
...@@ -22,6 +22,7 @@ class RoleList(CustomResource): ...@@ -22,6 +22,7 @@ class RoleList(CustomResource):
def get(self, cid): def get(self, cid):
course = self.find.course(cid) course = self.find.course(cid)
roles = self.rest.roles.find_all(course) roles = self.rest.roles.find_all(course)
log.debug(f"[REST] Get roles in {course.log_name} by {self.client.log_name}")
return SCHEMAS.dump('roles', roles) return SCHEMAS.dump('roles', roles)
@jwt_required @jwt_required
...@@ -51,7 +52,7 @@ class RoleResource(CustomResource): ...@@ -51,7 +52,7 @@ class RoleResource(CustomResource):
course = self.find.course(cid) course = self.find.course(cid)
# authorization # authorization
self.permissions(course=course).require.view_course() self.permissions(course=course).require.view_course()
log.debug(f"[REST] Get role in {course.log_name} by {self.client.log_name}: {rid}")
role = self.find.role(course, rid) role = self.find.role(course, rid)
return SCHEMAS.dump('role', role) return SCHEMAS.dump('role', role)
...@@ -95,7 +96,7 @@ class RolePermissions(CustomResource): ...@@ -95,7 +96,7 @@ class RolePermissions(CustomResource):
def get(self, cid: str, rid: str): def get(self, cid: str, rid: str):
course = self.find.course(cid) course = self.find.course(cid)
role = self.find.role(course, rid) role = self.find.role(course, rid)
log.debug(f"[REST] Get role permissions in {role.log_name} by {self.client.log_name}")
# authorization # authorization
self.permissions(course=course).require.belongs_to_role(role) self.permissions(course=course).require.belongs_to_role(role)
...@@ -130,7 +131,7 @@ class RoleUsersList(CustomResource): ...@@ -130,7 +131,7 @@ class RoleUsersList(CustomResource):
role = self.find.role(course, rid) role = self.find.role(course, rid)
type = request.args.get('type') type = request.args.get('type')
# authorization # authorization
log.debug(f"[REST] Get role clients in {role.log_name} by {self.client.log_name}")
self.permissions(course=course).require.belongs_to_role(role) self.permissions(course=course).require.belongs_to_role(role)
users = [client for client in role.clients if client.type == ClientType[type.upper()]] users = [client for client in role.clients if client.type == ClientType[type.upper()]]
......
...@@ -17,6 +17,7 @@ class SubmissionsResource(CustomResource): ...@@ -17,6 +17,7 @@ class SubmissionsResource(CustomResource):
@jwt_required @jwt_required
def get(self): def get(self):
submissions = self.rest.submissions.find_all() submissions = self.rest.submissions.find_all()
log.debug(f"[REST] Get submissions by {self.client.log_name}")
return SCHEMAS.dump('submissions', submissions) return SCHEMAS.dump('submissions', submissions)
...@@ -30,6 +31,7 @@ class SubmissionResource(CustomResource): ...@@ -30,6 +31,7 @@ class SubmissionResource(CustomResource):
submission = self.find.submission(sid) submission = self.find.submission(sid)
course = submission.project.course course = submission.project.course
# Authorization # Authorization
log.debug(f"[REST] Get submission by {self.client.log_name}: {submission.log_name}")
self.permissions(course=course).require.read_submission(submission) self.permissions(course=course).require.read_submission(submission)
return SCHEMAS.dump('submission', submission) return SCHEMAS.dump('submission', submission)
...@@ -53,6 +55,7 @@ class SubmissionState(CustomResource): ...@@ -53,6 +55,7 @@ class SubmissionState(CustomResource):
def get(self, sid: str): def get(self, sid: str):
submission = self.find.submission(sid) submission = self.find.submission(sid)
course = submission.project.course course = submission.project.course
log.debug(f"[REST] Get submission state by {self.client.log_name}: {submission.log_name}")
self.permissions(course=course).require.read_submission(submission) self.permissions(course=course).require.read_submission(submission)
return SCHEMAS.dump('submission', submission) return SCHEMAS.dump('submission', submission)
...@@ -80,6 +83,8 @@ class SubmissionStatistics(CustomResource): ...@@ -80,6 +83,8 @@ class SubmissionStatistics(CustomResource):
def get(self, sid: str): def get(self, sid: str):
submission = self.find.submission(sid) submission = self.find.submission(sid)
course = submission.project.course course = submission.project.course
log.debug(f"[REST] Get submission statistics "
f"by {self.client.log_name}: {submission.log_name}")
self.permissions(course=course).require.read_submission(submission) self.permissions(course=course).require.read_submission(submission)
return self.rest.submissions(submission).get_stats() return self.rest.submissions(submission).get_stats()
...@@ -101,6 +106,8 @@ class SubmissionSourcesTree(CustomResource): ...@@ -101,6 +106,8 @@ class SubmissionSourcesTree(CustomResource):
def get(self, sid: str): def get(self, sid: str):
submission = self.find.submission(sid) submission = self.find.submission(sid)
course = submission.project.course course = submission.project.course
log.debug(f"[REST] Get submission sources tree"
f" by {self.client.log_name}: {submission.log_name}")
self.permissions(course=course).require.read_submission(submission) self.permissions(course=course).require.read_submission(submission)
service = self.rest.storage(submission) service = self.rest.storage(submission)
return service.send_files_tree() return service.send_files_tree()
...@@ -114,6 +121,8 @@ class SubmissionSourceFiles(CustomResource): ...@@ -114,6 +121,8 @@ class SubmissionSourceFiles(CustomResource):
def get(self, sid: str): def get(self, sid: str):
submission = self.find.submission(sid) submission = self.find.submission(sid)
course = submission.project.course course = submission.project.course
log.debug(f"[REST] Get submission source files "
f"by {self.client.log_name}: {submission.log_name}")
self.permissions(course=course).require.read_submission(submission) self.permissions(course=course).require.read_submission(submission)
service = self.rest.storage(submission) service = self.rest.storage(submission)
return service.send_file_or_zip() return service.send_file_or_zip()
...@@ -127,6 +136,8 @@ class SubmissionTestFilesTree(CustomResource): ...@@ -127,6 +136,8 @@ class SubmissionTestFilesTree(CustomResource):
def get(self, sid: str): def get(self, sid: str):
submission = self.find.submission(sid) submission = self.find.submission(sid)
course = submission.project.course course = submission.project.course
log.debug(f"[REST] Get submission test files tree by "
f"{self.client.log_name}: {submission.log_name}")
self.permissions(course=course).require.read_submission_group(submission) self.permissions(course=course).require.read_submission_group(submission)
service = self.rest.storage(project=submission.project) service = self.rest.storage(project=submission.project)
storage_entity = service.get_test_files_entity_from_storage() storage_entity = service.get_test_files_entity_from_storage()
...@@ -141,6 +152,8 @@ class SubmissionTestFiles(CustomResource): ...@@ -141,6 +152,8 @@ class SubmissionTestFiles(CustomResource):
def get(self, sid: str): def get(self, sid: str):
submission = self.find.submission(sid) submission = self.find.submission(sid)
course = submission.project.course course = submission.project.course
log.debug(f"[REST] Get submission test files"
f" by {self.client.log_name}: {submission.log_name}")
self.permissions(course=course).require.read_submission_group(submission) self.permissions(course=course).require.read_submission_group(submission)
service = self.rest.storage(submission=submission) service = self.rest.storage(submission=submission)
storage_entity = service.get_test_files_entity_from_storage() storage_entity = service.get_test_files_entity_from_storage()
...@@ -155,6 +168,8 @@ class SubmissionResultFilesTree(CustomResource): ...@@ -155,6 +168,8 @@ class SubmissionResultFilesTree(CustomResource):
def get(self, sid: str): def get(self, sid: str):
submission = self.find.submission(sid) submission = self.find.submission(sid)
course = submission.project.course course = submission.project.course
log.debug(f"[REST] Get submission result tree"
f" by {self.client.log_name}: {submission.log_name}")
self.permissions(course=course).require.read_submission_group(submission) self.permissions(course=course).require.read_submission_group(submission)
storage_entity = storage.results.get(submission.id) storage_entity = storage.results.get(submission.id)
service = self.rest.storage(submission) service = self.rest.storage(submission)
...@@ -169,6 +184,8 @@ class SubmissionResultFiles(CustomResource): ...@@ -169,6 +184,8 @@ class SubmissionResultFiles(CustomResource):
def get(self, sid: str): def get(self, sid: str):
submission = self.find.submission(sid) submission = self.find.submission(sid)
course = submission.project.course course = submission.project.course
log.debug(f"[REST] Get submission result files"
f" by {self.client.log_name}: {submission.log_name}")
self.permissions(course=course).require.read_submission_group(submission) self.permissions(course=course).require.read_submission_group(submission)
storage_entity = storage.results.get(submission.id) storage_entity = storage.results.get(submission.id)
service = self.rest.storage(submission=submission) service = self.rest.storage(submission=submission)
...@@ -245,6 +262,8 @@ class SubmissionReview(CustomResource): ...@@ -245,6 +262,8 @@ class SubmissionReview(CustomResource):
def get(self, sid: str): def get(self, sid: str):
submission = self.find.submission(sid) submission = self.find.submission(sid)
course = submission.project.course course = submission.project.course
log.debug(f"[REST] Get submission review"
f" by {self.client.log_name}: {submission.log_name}")
self.permissions(course=course).require.read_submission(submission) self.permissions(course=course).require.read_submission(submission)
return SCHEMAS.dump('review', submission.review) return SCHEMAS.dump('review', submission.review)
......
...@@ -33,6 +33,7 @@ class UserList(CustomResource): ...@@ -33,6 +33,7 @@ class UserList(CustomResource):
"Invalid filter combination at /get/users: " "Invalid filter combination at /get/users: "
"missing course id.") "missing course id.")
log.debug(f"[REST] Get users by {self.client.log_name}")
filtered_users = self.rest.users.find_users_filtered( filtered_users = self.rest.users.find_users_filtered(
course_id=course_id, group_id=group_id) course_id=course_id, group_id=group_id)
return SCHEMAS.dump('users', filtered_users), 200 return SCHEMAS.dump('users', filtered_users), 200
...@@ -58,6 +59,7 @@ class UserResource(CustomResource): ...@@ -58,6 +59,7 @@ class UserResource(CustomResource):
def get(self, uid: str): def get(self, uid: str):
user = self.find.user(uid) user = self.find.user(uid)
# authorization # authorization
log.debug(f"[REST] Get user {user.log_name} by {self.client.log_name}")
schema = self.get_user_schema_based_on_permissions(user) schema = self.get_user_schema_based_on_permissions(user)
return schema.dump(user)[0], 200 return schema.dump(user)[0], 200
...@@ -71,8 +73,7 @@ class UserResource(CustomResource): ...@@ -71,8 +73,7 @@ class UserResource(CustomResource):
@users_namespace.response(204, 'User updated') @users_namespace.response(204, 'User updated')
def put(self, uid: str): def put(self, uid: str):
user = self.find.user(uid) user = self.find.user(uid)
permissions_service = self.permissions() self.permissions().require.sysadmin_or_self(uid)
permissions_service.require.sysadmin_or_self(uid)
data = rest_helpers.parse_request_data(action='update', resource='user', partial=True) data = rest_helpers.parse_request_data(action='update', resource='user', partial=True)
log.info(f"[REST] Update user {user.log_name} by {self.client.log_name}: {data}") log.info(f"[REST] Update user {user.log_name} by {self.client.log_name}: {data}")
...@@ -118,6 +119,9 @@ class UserSubmissionList(CustomResource): ...@@ -118,6 +119,9 @@ class UserSubmissionList(CustomResource):
course_id = request.args.get('course') course_id = request.args.get('course')
project_ids = request.args.getlist('project') project_ids = request.args.getlist('project')
log.debug(f"[REST] Get submissions list for {user.log_name} by {self.client.log_name}"
f"in course={course_id} projects={project_ids}")
if project_ids and not course_id: if project_ids and not course_id:
raise errors.PortalAPIError(400, raise errors.PortalAPIError(400,
f"Invalid filter combination at " f"Invalid filter combination at "
...@@ -144,6 +148,7 @@ class UserRoleList(CustomResource): ...@@ -144,6 +148,7 @@ class UserRoleList(CustomResource):
user = self.find.user(uid) user = self.find.user(uid)
self.permissions().require.sysadmin_or_self(uid) self.permissions().require.sysadmin_or_self(uid)
course_id = request.args.get('course') course_id = request.args.get('course')
log.debug(f"[REST] Get user roles for {user.log_name} by {self.client.log_name}")
roles = self.rest.users(user).find_roles_filtered(course_id=course_id) roles = self.rest.users(user).find_roles_filtered(course_id=course_id)
return SCHEMAS.dump('roles', roles) return SCHEMAS.dump('roles', roles)
...@@ -156,6 +161,7 @@ class UserCourseList(CustomResource): ...@@ -156,6 +161,7 @@ class UserCourseList(CustomResource):
# @users_namespace.response(200, 'Courses roles list', model=courses_schema) # @users_namespace.response(200, 'Courses roles list', model=courses_schema)
def get(self, uid: str): def get(self, uid: str):
user = self.find.user(uid) user = self.find.user(uid)
log.debug(f"[REST] Get user roles for {user.log_name} by {self.client.log_name}")
self.permissions().require.sysadmin_or_self(uid) self.permissions().require.sysadmin_or_self(uid)
return SCHEMAS.dump('courses', user.courses) return SCHEMAS.dump('courses', user.courses)
...@@ -169,6 +175,7 @@ class UserProjectsList(CustomResource): ...@@ -169,6 +175,7 @@ class UserProjectsList(CustomResource):
def get(self, uid: str): def get(self, uid: str):
user = self.find.user(uid) user = self.find.user(uid)
# authorization # authorization
log.debug(f"[REST] Get user projects for {user.log_name} by {self.client.log_name}")
self.permissions().require.sysadmin_or_self(uid) self.permissions().require.sysadmin_or_self(uid)
projects_dump = self.rest.users(user).dump_projects_with_wait() projects_dump = self.rest.users(user).dump_projects_with_wait()
return projects_dump return projects_dump
...@@ -183,6 +190,7 @@ class UserGroupList(CustomResource): ...@@ -183,6 +190,7 @@ class UserGroupList(CustomResource):
def get(self, uid: str): def get(self, uid: str):
user = self.find.user(uid) user = self.find.user(uid)
# authorization # authorization
log.debug(f"[REST] Get user groups for {user.log_name} by {self.client.log_name}")
self.permissions().require.sysadmin_or_self(uid) self.permissions().require.sysadmin_or_self(uid)
course_id = request.args.get('course') course_id = request.args.get('course')
groups = self.rest.users(user).find_groups_filtered(course_id=course_id) groups = self.rest.users(user).find_groups_filtered(course_id=course_id)
...@@ -198,8 +206,8 @@ class UserReviewList(CustomResource): ...@@ -198,8 +206,8 @@ class UserReviewList(CustomResource):
def get(self, uid: str): def get(self, uid: str):
user = self.find.user(uid) user = self.find.user(uid)
# authorization # authorization
log.debug(f"[REST] Get user reviews for {user.log_name} by {self.client.log_name}")
self.permissions().require.sysadmin_or_self(uid) self.permissions().require.sysadmin_or_self(uid)
reviews = self.rest.users(user).find_reviews() reviews = self.rest.users(user).find_reviews()
return SCHEMAS.dump('reviews', reviews) return SCHEMAS.dump('reviews', reviews)
...@@ -212,9 +220,12 @@ class UserEffectivePermissions(CustomResource): ...@@ -212,9 +220,12 @@ class UserEffectivePermissions(CustomResource):
@users_namespace.response(200, 'Effective permissions') @users_namespace.response(200, 'Effective permissions')
def get(self, uid: str): def get(self, uid: str):
user = self.find.user(uid) user = self.find.user(uid)
course_id = request.args.get('course')
# authorization # authorization
log.debug(f"[REST] Get user effective permissions"
f" for {user.log_name} by {self.client.log_name} in course={course_id}")
self.permissions().require.sysadmin_or_self(uid) self.permissions().require.sysadmin_or_self(uid)
course_id = request.args.get('course')
perm = self.permissions(client=user).get_effective_permissions(course_id) perm = self.permissions(client=user).get_effective_permissions(course_id)
return perm return perm
......
...@@ -17,6 +17,7 @@ class WorkerList(CustomResource): ...@@ -17,6 +17,7 @@ class WorkerList(CustomResource):
# @workers_namespace.response(200, 'List of workers', model=workers_schema) # @workers_namespace.response(200, 'List of workers', model=workers_schema)
@workers_namespace.response(403, 'Not allowed to list workers') @workers_namespace.response(403, 'Not allowed to list workers')
def get(self): def get(self):
log.debug(f"[REST] Get workers by {self.client.log_name}")
self.permissions().require.sysadmin() self.permissions().require.sysadmin()
workers_list = self.rest.workers.find_all() workers_list = self.rest.workers.find_all()
return SCHEMAS.dump('workers', workers_list) return SCHEMAS.dump('workers', workers_list)
...@@ -42,6 +43,7 @@ class WorkerResource(CustomResource): ...@@ -42,6 +43,7 @@ class WorkerResource(CustomResource):
# @workers_namespace.response(200, 'Worker', model=worker_schema) # @workers_namespace.response(200, 'Worker', model=worker_schema)
@workers_namespace.response(403, 'Not allowed to access worker') @workers_namespace.response(403, 'Not allowed to access worker')
def get(self, wid: str): def get(self, wid: str):
log.debug(f"[REST] Get worker by {self.client.log_name}: {wid}")
self.permissions().require.sysadmin_or_self(wid) self.permissions().require.sysadmin_or_self(wid)
worker = self.find.worker(wid) worker = self.find.worker(wid)
return SCHEMAS.dump('worker', worker) return SCHEMAS.dump('worker', worker)
...@@ -79,6 +81,7 @@ class WorkerStatusResource(CustomResource): ...@@ -79,6 +81,7 @@ class WorkerStatusResource(CustomResource):
# @workers_namespace.response(200, 'Worker', model=worker_schema) # @workers_namespace.response(200, 'Worker', model=worker_schema)
@workers_namespace.response(403, 'Not allowed to access worker') @workers_namespace.response(403, 'Not allowed to access worker')
def get(self, wid: str): def get(self, wid: str):
log.debug(f"[REST] Get worker stats by {self.client.log_name}: {wid}")
self.permissions().require.sysadmin(wid) self.permissions().require.sysadmin(wid)
worker = self.find.worker(wid) worker = self.find.worker(wid)
return self.rest.workers(worker).worker_client.status() return self.rest.workers(worker).worker_client.status()
...@@ -92,6 +95,7 @@ class WorkerImagesResource(CustomResource): ...@@ -92,6 +95,7 @@ class WorkerImagesResource(CustomResource):
# @workers_namespace.response(200, 'Worker', model=worker_schema) # @workers_namespace.response(200, 'Worker', model=worker_schema)
@workers_namespace.response(403, 'Not allowed to access worker') @workers_namespace.response(403, 'Not allowed to access worker')
def get(self, wid: str): def get(self, wid: str):
log.debug(f"[REST] Get worker images by {self.client.log_name}: {wid}")
self.permissions().require.sysadmin(wid) self.permissions().require.sysadmin(wid)
worker = self.find.worker(wid) worker = self.find.worker(wid)
return self.rest.workers(worker).worker_client.list_images() return self.rest.workers(worker).worker_client.list_images()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment