Skip to content

Update /grading endpoint #727

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Feb 23, 2021
Merged

Update /grading endpoint #727

merged 4 commits into from
Feb 23, 2021

Conversation

qreoct
Copy link
Contributor

@qreoct qreoct commented Feb 21, 2021

Move the Grading Controller to behind /admin endpoint for v2 API consistency.

Some (not all) of role validation was moved out of the Assessments Model to the router. The methods that are required by the new AdminGrading Controller have all been fixed, but there are some test cases relating to Assessments Controller which are not rectified in this PR. @bnjmnt4n, let me know if the changes I've made aligns with your Assessments changes.

The specific 3 tests that don't pass are involved with Students making API calls in AssessmentController, where the Students are directly authorized (with 200 response) when they shouldn't be. The tests fail since I did not move the /assessments endpoints to be role-validated in the router in this PR.

user = conn.assigns[:current_user]

case Assessments.get_group_grading_summary(user) do
case Assessments.get_group_grading_summary() do
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Example where user role validation is moved out of the Model to the router.

We lose a descriptive error message, and get a 403 Forbidden when unauthorized users access these endpoints.

@@ -249,6 +235,20 @@ defmodule CadetWeb.GradingController do
response(401, "Unauthorised")
end

swagger_path :grading_summary do
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added Swagger documentation for the /grading/summary endpoint, which was previously undocumented.

end

@tag authenticate: :student
test "missing parameter", %{conn: conn} do
conn = post(conn, build_url(1, 3), %{})
assert response(conn, 400) =~ "Missing parameter"
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now we give a 403 Forbidden since a student would never be authorized to make this API call anyway.

@qreoct qreoct requested a review from bnjmnt4n February 21, 2021 07:52
@qreoct qreoct changed the title Update /grading endpoint Update /grading endpoint Feb 21, 2021
Copy link
Contributor

@bnjmnt4n bnjmnt4n left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 Will merge into v2 and fix the errors by updating Assessments.

@bnjmnt4n bnjmnt4n changed the title Update /grading endpoint Update /grading endpoint Feb 23, 2021
@bnjmnt4n bnjmnt4n merged commit 70eb4a0 into v2 Feb 23, 2021
angelsl pushed a commit that referenced this pull request Apr 17, 2021
* Update `/assets` endpoint (#713)

* Assets: remove role validation in model

* AssetsController: update API endpoint and validation

The endpoint is updated to `/v2/admin/assets`, and validation is
performed within the router instead.

* Shift to `AdminAssetsController`

* Rename `AdminAssetsController` to `.exs`

* Assets: switch to `case` instead of `with`

* (1) Clearer Swagger documentation in Grading (2) Code documentation cleaup in auth_controller

* Notifications changed to plural throughout

* Settings swagger docs cleanup

* User docs typo fix

* CI fix formatting

* Update `/settings` endpoint (#722)

* `/auth`: shift `/auth` to `/auth/login`

* `/devices`: fix typo and shift to v2

* Update `/grading` endpoint (#727)

* shift role validation for Settings

* shift Grading controller to AdminGrading

* fix formatting and add details to docs

Co-authored-by: Benjamin Tan <benjamin@dev.ofcr.se>

* Rename `assets_controller_test` to `admin_assets_controller_test`

* update swagger docs for /grading

* Update `/assessments` endpoint (#729)

* `/assessments`: split out separate `/admin` endpoint

* Consistently use `/assessments/:assessmentid`

* Merge `/admin/assessments/:assessmentid/{update,publish}` endpoints

* Quick swagger docs fix for `AdminAssessmentsController`

* Format code via `mix format`

* Formatting fix

* `/assessments/{assessmentid}/submit`: shift role validation to controller

* Add more guards

* `/assessments/question/{questionid}/submit`: shift role validation to AnswerController

* clean up some docs

* Modify `AnswerController#submit` path

* Assessments: remove unused definitions

* Remove leftover unused route

* Split `AssesmentsController#unlock` out of `AssessmentsController#show`

`AssesmentsController#unlock` unlocks password-protected assessments and
creates a Submission for them, following which the assessments do not
require requests with the password.

* Fix formatting issues

* `/assessments`: split out separate `/admin` endpoint

* Consistently use `/assessments/:assessmentid`

* Merge `/admin/assessments/:assessmentid/{update,publish}` endpoints

* Quick swagger docs fix for `AdminAssessmentsController`

* Format code via `mix format`

* `/assessments/{assessmentid}/submit`: shift role validation to controller

* Add more guards

* `/assessments/question/{questionid}/submit`: shift role validation to AnswerController

* clean up some docs

* Modify `AnswerController#submit` path

* Assessments: remove unused definitions

* Remove leftover unused route

* Split `AssesmentsController#unlock` out of `AssessmentsController#show`

`AssesmentsController#unlock` unlocks password-protected assessments and
creates a Submission for them, following which the assessments do not
require requests with the password.

* Fix formatting issues

* formatting

* Update per PR feedback

* Remove unused variable

Co-authored-by: qreoct <9080974+qreoct@users.noreply.github.com>

* Change to v2 API throughout

* Fix Swagger references

* AdminGradingControllerTest: Add swagger path definition

* Remove duplicated route

* Rename file as per convention

* Swagger documentation: Switch to enums for string values

* /auth/login: shift parameters to query string in docs

* UserController: add an empty UserGameStates map to the schema

* Add comments to clarify invalid OpenAPI 2.0 types

* Swagger: shift request parameters to separate schemas

Request parameters were previously declared as separate body parameters
in the Swagger schema, which was technically invalid. For endpoints
which require more than 1 parameter, which is sent as JSON, I've created
separated schemas which represent the parameters, to make the generated
`swagger.json` more compliant.

* Story: Fix inaccurate Swagger documentation

* Shift all Swagger enums into their own schemas

This allows `swagger-typescript-api` in `cadet-frontend` to generate
TypeScript `enum`s for the corresponding type.

* Fix inaccurate types

* Update based on code review feedback

* clean up docs

* clean up docs

* Endpoints: update to mark as required

* More changes to the Swagger types

* Even more type updates

* more swagger docs consistency

* /admin/assessments: update swagger to FormData parameters

Co-authored-by: qreoct <9080974+qreoct@users.noreply.github.com>
@jiayushe jiayushe deleted the jeff/v2-grading branch June 8, 2021 10:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants