/// <summary>
        /// Builds an authenticated request.
        /// </summary>
        /// <param name="endpoint">The API endpoint.</param>
        /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
        public PreparedRequest PrepareRequest(Url endpoint, CancellationToken cancellationToken)
        {
            PreparedRequest request = endpoint.Authenticate(_authenticationProvider);

            SetMicroversion(request);

            return(request);
        }
        /// <summary>
        /// Builds the <see cref="ListFloatingIPsAsync{T}"/> request.
        /// </summary>
        /// <param name="queryString">Options for filtering.</param>
        /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
        public virtual async Task <PreparedRequest> BuildListFloatingIPsRequest(IQueryStringBuilder queryString, CancellationToken cancellationToken = default(CancellationToken))
        {
            PreparedRequest request = await Endpoint.PrepareGetResourceRequest("floatingips", cancellationToken).ConfigureAwait(false);

            request.Url.SetQueryParams(queryString?.Build());

            return(request);
        }
        /// <summary>
        /// Builds a request to delete a resource.
        /// </summary>
        /// <param name="resourcePath">The resource path.</param>
        /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
        /// <exception cref="ArgumentNullException">serverId</exception>
        public virtual async Task <PreparedRequest> PrepareDeleteResourceRequest(string resourcePath, CancellationToken cancellationToken)
        {
            PreparedRequest request = await PrepareRequest(resourcePath, cancellationToken);

            return(request
                   .PrepareDelete(cancellationToken)
                   .AllowHttpStatus(HttpStatusCode.NotFound));
        }
Beispiel #4
0
        /// <summary />
        public virtual async Task <PreparedRequest> BuildGetConsoleRequest(string serverId, object protocol, object type, CancellationToken cancellationToken = default(CancellationToken))
        {
            var body = new { remote_console = new { protocol, type } };

            PreparedRequest request = await Endpoint.PrepareRequest($"servers/{serverId}/remote-consoles", cancellationToken);

            return(request.PreparePostJson(body, cancellationToken));
        }
        /// <summary>
        /// Sets the microversion header, if present
        /// </summary>
        /// <param name="request">The api request.</param>
        public void SetMicroversion(PreparedRequest request)
        {
            if (_microversion == null)
            {
                return;
            }

            request.WithHeader(_microversionHeader, _microversion);
        }
Beispiel #6
0
        /// <summary>
        /// Applies OpenStack authentication to a request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <param name="authenticationProvider">The authentication provider.</param>
        /// <returns>
        /// An authenticated request.
        /// </returns>
        public static PreparedRequest Authenticate(this PreparedRequest request, IAuthenticationProvider authenticationProvider)
        {
            var authenticatedMessageHandler = request.HttpMessageHandler as AuthenticatedMessageHandler;

            if (authenticatedMessageHandler != null)
            {
                authenticatedMessageHandler.AuthenticationProvider = authenticationProvider;
            }
            return(request);
        }
        /// <summary>
        /// Builds a request to create a resource
        /// </summary>
        /// <param name="resourcePath">The resource path, e.g. "servers".</param>
        /// <param name="resource">The resource.</param>
        /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
        /// <exception cref="ArgumentNullException">resource</exception>
        public virtual async Task <PreparedRequest> PrepareCreateResourceRequest(string resourcePath, object resource, CancellationToken cancellationToken)
        {
            if (resource == null)
            {
                throw new ArgumentNullException("resource");
            }

            PreparedRequest request = await PrepareRequest(resourcePath, cancellationToken);

            return(request.PreparePostJson(resource, cancellationToken));
        }
        /// <inheritdoc cref="NetworkingApiBuilder.ListNetworksAsync" />
        public async Task <IPage <Network> > ListNetworksAsync(Identifier startNetworkId = null, int?pageSize = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            PreparedRequest request = await _networkingApiBuilder.ListNetworksAsync(cancellationToken);

            request.Url.SetQueryParams(new
            {
                marker = startNetworkId,
                limit  = pageSize
            });

            return(await request.SendAsync()
                   .ReceiveJson <NetworkCollection>());
        }
        /// <summary>
        /// Gets a page of resources.
        /// </summary>
        /// <typeparam name="TPage">The resource type.</typeparam>
        /// <param name="pageUrl">The page URL.</param>
        /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
        public virtual async Task <TPage> GetResourcePageAsync <TPage>(Url pageUrl, CancellationToken cancellationToken)
            where TPage : IPageBuilder <TPage>
        {
            PreparedRequest request = PrepareRequest(pageUrl, cancellationToken);

            var results = await request
                          .PrepareGet(cancellationToken)
                          .SendAsync()
                          .ReceiveJson <TPage>();

            results.SetNextPageHandler(GetResourcePageAsync <TPage>);

            return(results);
        }
Beispiel #10
0
        /// <summary>
        /// Sends the <see cref="PreparedRequest"/>.
        /// </summary>
        /// <param name="requestTask">A task which returns the request.</param>
        /// <returns>The HTTP response message.</returns>
        public static async Task <HttpResponseMessage> SendAsync(this Task <PreparedRequest> requestTask)
        {
            PreparedRequest request = await requestTask.ConfigureAwait(false);

            return(await request.SendAsync().ConfigureAwait(false));
        }
Beispiel #11
0
 /// <inheritdoc cref="ClientConfigExtensions.WithHeader(FlurlClient,string,object)" />
 public static PreparedRequest WithHeader(this PreparedRequest request, string key, object value)
 {
     ((FlurlClient)request).WithHeader(key, value);
     return(request);
 }
        /// <summary>
        /// Builds a request to update a resource.
        /// </summary>
        /// <param name="resourcePath">The resource path, e.g. "servers".</param>
        /// <param name="resource">The resource.</param>
        /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">resourceId or resource</exception>
        public virtual async Task <PreparedRequest> PrepareUpdateResourceRequest(string resourcePath, object resource, CancellationToken cancellationToken)
        {
            PreparedRequest request = await PrepareRequest(resourcePath, cancellationToken);

            return(request.PreparePutJson(resource, cancellationToken));
        }
        /// <summary>
        /// Builds a request to retrieve a list of resources.
        /// </summary>
        /// <param name="resourcePath">The resource path, e.g. "servers".</param>
        /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
        /// <exception cref="ArgumentNullException">resourceId</exception>
        public async Task <PreparedRequest> PrepareListResourcesRequest(string resourcePath, CancellationToken cancellationToken)
        {
            PreparedRequest request = await PrepareRequest(resourcePath, cancellationToken);

            return(request.PrepareGet(cancellationToken));
        }
Beispiel #14
0
        /// <summary>
        /// Applies OpenStack authentication to a request.
        /// </summary>
        /// <param name="url">The URL.</param>
        /// <param name="authenticationProvider">The authentication provider.</param>
        /// <returns>
        /// An authenticated request.
        /// </returns>
        public static PreparedRequest Authenticate(this Url url, IAuthenticationProvider authenticationProvider)
        {
            var client = new PreparedRequest(url, autoDispose: true);

            return(client.Authenticate(authenticationProvider));
        }