Example #1
0
        private async Task <IResourcePermissionResponse> GetResourcePermissionResponse(PermissionModeKind permissionMode, CancellationToken ct)
        {
            await ValidateLoginState();

            var resourcePermissionResponse = await AcquireResourceToken(_authService.CurrentUserContext, ct);

            var resourceToken = resourcePermissionResponse?.ResourcePermissions?
                                .FirstOrDefault(p => p?.PermissionMode == permissionMode)?.ResourceToken;

            if (string.IsNullOrEmpty(resourceToken))
            {
                throw new CosmosClientException($"No Resource Token acquired for permission: {permissionMode.ToString()}");
            }

            var endpointUrl = resourcePermissionResponse?.EndpointUrl;

            if (string.IsNullOrEmpty(endpointUrl) || !Uri.TryCreate(endpointUrl, UriKind.Absolute, out _))
            {
                throw new CosmosClientException($"No or invalid endpoint received from broker: {endpointUrl}");
            }

            var databaseId = resourcePermissionResponse?.DatabaseId;

            if (string.IsNullOrEmpty(databaseId))
            {
                throw new CosmosClientException($"No or invalid database Id received from broker: {databaseId}");
            }

            var collectionId = resourcePermissionResponse?.CollectionId;

            if (string.IsNullOrEmpty(collectionId))
            {
                throw new CosmosClientException($"No or invalid database Id received from broker: {collectionId}");
            }

            return(resourcePermissionResponse);
        }