Skip to content
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

add service type to permission webhooks #582

Merged
merged 3 commits into from
Jun 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ Changes
`Unreleased <https:/Ouranosinc/Magpie/tree/master>`_ (latest)
------------------------------------------------------------------------------------

* Nothing new for the moment.
Features / Changes
~~~~~~~~~~~~~~~~~~~~~
* Add the ``service.type`` data in the `Webhooks` for a `Permission` change, even if the resource is not a service,
since the root service type is necessary to `Cowbird`.

.. _changes_3.33.0:

Expand Down
4 changes: 2 additions & 2 deletions magpie/api/management/group/group_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ def create_group_resource_permission_response(group, resource, permission, db_se
ax.evaluate_call(lambda: db_session.add(new_perm), fallback=lambda: db_session.rollback(),
http_error=HTTPForbidden, content=perm_content,
msg_on_fail=s.GroupResourcePermissions_POST_ForbiddenAddResponseSchema.description)
webhook_params = get_permission_update_params(group, resource, permission)
webhook_params = get_permission_update_params(group, resource, permission, db_session)
process_webhook_requests(WebhookAction.CREATE_GROUP_PERMISSION, webhook_params)
return ax.valid_http(http_success=http_success, content=perm_content, detail=http_detail)

Expand Down Expand Up @@ -277,7 +277,7 @@ def delete_group_resource_permission_response(group, resource, permission, db_se
ax.evaluate_call(lambda: db_session.delete(del_perm), fallback=lambda: db_session.rollback(),
http_error=HTTPForbidden, content=perm_content,
msg_on_fail=s.GroupServicePermission_DELETE_ForbiddenResponseSchema.description)
webhook_params = get_permission_update_params(group, resource, permission)
webhook_params = get_permission_update_params(group, resource, permission, db_session)
process_webhook_requests(WebhookAction.DELETE_GROUP_PERMISSION, webhook_params)
return ax.valid_http(http_success=HTTPOk, detail=s.GroupServicePermission_DELETE_OkResponseSchema.description)

Expand Down
4 changes: 2 additions & 2 deletions magpie/api/management/user/user_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ def create_user_resource_permission_response(user, resource, permission, db_sess
ax.evaluate_call(lambda: db_session.add(new_perm), fallback=lambda: db_session.rollback(),
http_error=HTTPForbidden, content=err_content,
msg_on_fail=s.UserResourcePermissions_POST_ForbiddenResponseSchema.description)
webhook_params = get_permission_update_params(user, resource, permission)
webhook_params = get_permission_update_params(user, resource, permission, db_session)
process_webhook_requests(WebhookAction.CREATE_USER_PERMISSION, webhook_params)
return ax.valid_http(http_success=http_success, content=err_content, detail=http_detail)

Expand Down Expand Up @@ -470,7 +470,7 @@ def delete_user_resource_permission_response(user, resource, permission, db_sess
ax.evaluate_call(lambda: db_session.delete(del_perm), fallback=lambda: db_session.rollback(),
http_error=HTTPNotFound, content=err_content,
msg_on_fail=s.UserResourcePermissionName_DELETE_NotFoundResponseSchema.description)
webhook_params = get_permission_update_params(user, resource, permission)
webhook_params = get_permission_update_params(user, resource, permission, db_session)
process_webhook_requests(WebhookAction.DELETE_USER_PERMISSION, webhook_params)
return ax.valid_http(http_success=HTTPOk, detail=s.UserResourcePermissionName_DELETE_OkResponseSchema.description)

Expand Down
7 changes: 6 additions & 1 deletion magpie/api/webhooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from magpie.api import exception as ax
from magpie.api import schemas as s
from magpie.api.management.group.group_formats import format_group
from magpie.api.management.resource import resource_utils as ru
from magpie.api.management.resource.resource_formats import format_resource
from magpie.api.management.service.service_formats import format_service
from magpie.api.management.user.user_formats import format_user
Expand Down Expand Up @@ -155,6 +156,7 @@ class WebhookAction(ExtendedEnum):
def get_permission_update_params(target, # type: Union[models.User, models.Group]
resource, # type: ServiceOrResourceType
permission, # type: PermissionSet
db_session, # type: Session
): # type: (...) -> WebhookTemplateParameters
"""
Generates the :term:`Webhook` parameters based on provided references.
Expand All @@ -166,7 +168,10 @@ def get_permission_update_params(target, # type: Union[models.User, mode
if resource.resource_type == "service":
res_params = format_service(resource, basic_info=True, dotted=True)
else:
res_params = {"service.{}".format(param): None for param in ["name", "type", "sync_type", "public_url"]}
res_params = {"service.{}".format(param): None for param in ["name", "sync_type", "public_url"]}
# Add the root service type even for non-service resources, since it is needed by Cowbird.
res_params["service.type"] = ru.get_resource_root_service_by_id(
resource.resource_id, db_session=db_session).type
res_params.update(format_resource(resource, basic_info=True, dotted=True))
params = permission.webhook_params()
params.update(target_params)
Expand Down
2 changes: 1 addition & 1 deletion tests/test_webhooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -554,7 +554,7 @@ def _test(t_name, r_id, perm, action):
expected["data"]["resource_type"] = self.test_resource_type
expected["data"]["resource_id"] = res_id
expected["data"]["service_name"] = None
expected["data"]["service_type"] = None
expected["data"]["service_type"] = self.test_service_type
expected["data"]["service_public_url"] = None
else:
expected["data"]["resource_name"] = self.test_service_name
Expand Down