コード例 #1
0
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)
コード例 #2
0
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)
コード例 #3
0
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)
コード例 #4
0
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)
コード例 #5
0
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)
コード例 #6
0
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)