Verified Commit 9589f35c authored by Peter Stanko's avatar Peter Stanko
Browse files

Logging the get operation

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