def METHOD_NAME(self, request: HttpRequest, plugin_id, project_id, signature) -> HttpResponse:
    try:
        project = Project.objects.get_from_cache(id=project_id)
    except Project.DoesNotExist:
        logger.warning(
            "release-webhook.invalid-project",
            extra={"project_id": project_id, "plugin_id": plugin_id},
        )
        return HttpResponse(status=404)
    logger.info(
        "release-webhook.incoming", extra={"project_id": project_id, "plugin_id": plugin_id}
    )
    token = ProjectOption.objects.get_value(project, "sentry:release-token")
    if token is None:
        logger.warning(
            "release-webhook.missing-token",
            extra={"project_id": project_id, "plugin_id": plugin_id},
        )
        return HttpResponse(status=403)
    if not self.verify(plugin_id, project_id, token, signature):
        logger.warning(
            "release-webhook.invalid-signature",
            extra={"project_id": project_id, "plugin_id": plugin_id},
        )
        return HttpResponse(status=403)
    if plugin_id == "builtin":
        return self._handle_builtin(request, project)
    plugin = plugins.get(plugin_id)
    if not plugin.is_enabled(project):
        logger.warning(
            "release-webhook.plugin-disabled",
            extra={"project_id": project_id, "plugin_id": plugin_id},
        )
        return HttpResponse(status=403)
    cls = plugin.get_release_hook()
    hook = cls(project)
    try:
        hook.handle(request)
    except HookValidationError as exc:
        return HttpResponse(
            status=400,
            content=json.dumps({"error": str(exc)}),
            content_type="application/json",
        )
    return HttpResponse(status=204)