Пример #1
0
        public async Task <IActionResult> RequestPermission(
            [FromBody] PermissionRequest permissionRequest,
            CancellationToken cancellationToken)
        {
            if (permissionRequest == null)
            {
                return(BuildError(
                           ErrorCodes.InvalidRequest,
                           Strings.NoParameterInBodyRequest,
                           HttpStatusCode.BadRequest));
            }

            if (string.IsNullOrWhiteSpace(permissionRequest.ResourceSetId))
            {
                return(BuildError(
                           ErrorCodes.InvalidRequest,
                           Strings.ResourceSetIdParameterNeedsToBeSpecified,
                           HttpStatusCode.BadRequest));
            }

            if (permissionRequest.Scopes == null)
            {
                return(BuildError(
                           ErrorCodes.InvalidRequest,
                           string.Format(Strings.MissingParameter, "scopes"),
                           HttpStatusCode.BadRequest));
            }

            var resourceSetOwner = await _resourceSetRepository
                                   .GetOwner(cancellationToken, permissionRequest.ResourceSetId)
                                   .ConfigureAwait(false);

            if (resourceSetOwner == null)
            {
                return(BuildError(
                           ErrorCodes.InvalidResourceSetId,
                           string.Format(Strings.TheResourceSetDoesntExist, permissionRequest.ResourceSetId),
                           HttpStatusCode.BadRequest));
            }

            var option = await _requestPermission.Execute(resourceSetOwner, cancellationToken, permissionRequest)
                         .ConfigureAwait(false);

            return(await CreateResultFromOption(option, resourceSetOwner, cancellationToken, permissionRequest).ConfigureAwait(false));
        }