def get_service_view(request): """ Get service details. """ svc_name = ar.get_path_param(request, "service_name", http_error=HTTPBadRequest, msg_on_fail=s.Services_GET_BadRequestResponseSchema.description) services = list(filter(lambda svc: svc.name == svc_name, get_services(request))) ax.verify_param(len(services), is_equal=True, param_compare=1, param_name="service_name", http_error=HTTPNotFound, msg_on_fail=s.Service_GET_NotFoundResponseSchema.description) data = {"service": services[0].json()} return ax.valid_http(HTTPOk, content=data, detail=s.Services_GET_OkResponseSchema.description)
def get_homepage(request): # noqa: W0212 """ Cowbird API homepage. """ body = deepcopy(s.InfoAPI) body.update({ "title": s.TitleAPI, "name": __meta__.__package__, "documentation": get_constant("COWBIRD_URL", request) + s.SwaggerAPI.path }) return ax.valid_http(http_success=HTTPOk, content=body, content_type=CONTENT_TYPE_JSON, detail=s.Homepage_GET_OkResponseSchema.description)
def post_permission_webhook_view(request): """ Permission webhook used for created or removed permission events. """ event = ar.get_multiformat_body(request, "event") ax.verify_param(event, param_name="event", param_compare=ValidOperations.values(), is_in=True, http_error=HTTPBadRequest, msg_on_fail=s.PermissionWebhook_POST_BadRequestResponseSchema.description) service_name = ar.get_multiformat_body(request, "service_name") resource_id = ar.get_multiformat_body(request, "resource_id") param_regex_with_slashes = r"^/?[A-Za-z0-9]+(?:[\s_\-\./][A-Za-z0-9]+)*$" resource_full_name = ar.get_multiformat_body(request, "resource_full_name", pattern=param_regex_with_slashes) name = ar.get_multiformat_body(request, "name") access = ar.get_multiformat_body(request, "access") scope = ar.get_multiformat_body(request, "scope") user = ar.get_multiformat_body(request, "user") group = None if user: ar.check_value(user, "user") else: group = ar.get_multiformat_body(request, "group") permission = Permission( service_name=service_name, resource_id=resource_id, resource_full_name=resource_full_name, name=name, access=access, scope=scope, user=user, group=group ) if event == ValidOperations.CreateOperation.value: dispatch(lambda svc: svc.permission_created(permission=permission)) else: dispatch(lambda svc: svc.permission_deleted(permission=permission)) return ax.valid_http(HTTPOk, detail=s.PermissionWebhook_POST_OkResponseSchema.description)
def get_version(request): # noqa: W0212 """ Version of the API. """ task = get_worker_version.delay() try: worker_version = task.get(timeout=2) worker_detail = worker_version except celery.exceptions.TimeoutError: worker_version = None worker_detail = "worker unreachable" except NotImplementedError: worker_version = None worker_detail = "unknown" api_version = __meta__.__version__ detail = "Web service version : [{0}], worker version : [{1}]. Any mismatch can cause misbehavior.".format( api_version, worker_detail) version = { "version": api_version, "worker_version": worker_version, "version_detail": detail } return ax.valid_http(http_success=HTTPOk, content=version, content_type=CONTENT_TYPE_JSON, detail=s.Version_GET_OkResponseSchema.description)
def post_user_webhook_view(request): """ User webhook used for created or removed user events. """ event = ar.get_multiformat_body(request, "event") ax.verify_param(event, param_name="event", param_compare=ValidOperations.values(), is_in=True, http_error=HTTPBadRequest, msg_on_fail=s.UserWebhook_POST_BadRequestResponseSchema.description) user_name = ar.get_multiformat_body(request, "user_name") if event == ValidOperations.CreateOperation.value: # FIXME: Tried with ax.URL_REGEX, but cannot match what seems valid urls... callback_url = ar.get_multiformat_body(request, "callback_url", pattern=None) def svc_fct(svc): svc.user_created(user_name=user_name) else: callback_url = None def svc_fct(svc): svc.user_deleted(user_name=user_name) try: dispatch(svc_fct) except Exception: # noqa if callback_url: # If something bad happens, set the status as erroneous in Magpie LOGGER.warning("Exception occurs while dispatching event, calling Magpie callback url : [%s]", callback_url) try: requests.get(callback_url, verify=get_ssl_verify(request)) except requests.exceptions.RequestException as exc: LOGGER.warning("Cannot complete the Magpie callback url request to [%s] : [%s]", callback_url, exc) else: LOGGER.warning("Exception occurs while dispatching event") # TODO: return something else than 200 return ax.valid_http(HTTPOk, detail=s.UserWebhook_POST_OkResponseSchema.description)
def get_services_view(request): """ List all registered services. """ data = {"services": [svc.name for svc in get_services(request)]} return ax.valid_http(HTTPOk, content=data, detail=s.Services_GET_OkResponseSchema.description)