Beispiel #1
0
 public static FulfillmentRequestErrorViewModel From(FulfillmentRequestResult result)
 {
     return(new FulfillmentRequestErrorViewModel
     {
         RawResponse = result.RawResponse, StatusCode = result.StatusCode
     });
 }
        public async Task <FulfillmentRequestResult> ActivateSubscriptionAsync(Guid subscriptionId,
                                                                               ActivatedSubscription subscriptionDetails, Guid requestId, Guid correlationId,
                                                                               CancellationToken cancellationToken)
        {
            var requestUrl = FluentUriBuilder
                             .Start(this.baseUri)
                             .AddPath("subscriptions")
                             .AddPath(subscriptionId.ToString())
                             .AddPath("activate")
                             .AddQuery(DefaultApiVersionParameterName, this.apiVersion)
                             .Uri;

            requestId     = requestId == default ? Guid.NewGuid() : requestId;
            correlationId = correlationId == default ? Guid.NewGuid() : correlationId;

            var response = await this.SendRequestAndReturnResult(
                HttpMethod.Post,
                requestUrl,
                requestId,
                correlationId,
                null,
                JsonConvert.SerializeObject(subscriptionDetails),
                cancellationToken);

            return(await FulfillmentRequestResult.ParseAsync <FulfillmentRequestResult>(response));
        }
        public async Task <UpdateOrDeleteSubscriptionRequestResult> DeleteSubscriptionAsync(Guid subscriptionId,
                                                                                            Guid requestId, Guid correlationId, CancellationToken cancellationToken)
        {
            var requestUrl = FluentUriBuilder
                             .Start(this.baseUri)
                             .AddPath("subscriptions")
                             .AddPath(subscriptionId.ToString())
                             .AddQuery(DefaultApiVersionParameterName, this.apiVersion)
                             .Uri;

            requestId     = requestId == default ? Guid.NewGuid() : requestId;
            correlationId = correlationId == default ? Guid.NewGuid() : correlationId;

            var response = await this.SendRequestAndReturnResult(
                HttpMethod.Delete,
                requestUrl,
                requestId,
                correlationId,
                null,
                "",
                cancellationToken);

            var result = await FulfillmentRequestResult.ParseAsync <UpdateOrDeleteSubscriptionRequestResult>(response);

            if (this.operationsStore != default)
            {
                await this.operationsStore.RecordAsync(subscriptionId, result, cancellationToken);
            }

            return(result);
        }
        public async Task <FulfillmentRequestResult> UpdateSubscriptionOperationAsync(
            Guid subscriptionId,
            Guid operationId,
            OperationUpdate update,
            Guid requestId,
            Guid correlationId,
            CancellationToken cancellationToken)
        {
            var requestUrl = FluentUriBuilder
                             .Start(this.baseUri)
                             .AddPath("subscriptions")
                             .AddPath(subscriptionId.ToString())
                             .AddPath("operations")
                             .AddPath(operationId.ToString())
                             .AddQuery(DefaultApiVersionParameterName, this.apiVersion)
                             .Uri;

            requestId     = requestId == default ? Guid.NewGuid() : requestId;
            correlationId = correlationId == default ? Guid.NewGuid() : correlationId;

            var response = await this.SendRequestAndReturnResult(
                new HttpMethod("PATCH"),
                requestUrl,
                requestId,
                correlationId,
                null,
                JsonConvert.SerializeObject(update),
                cancellationToken);

            return(await FulfillmentRequestResult.ParseAsync <ResolvedSubscription>(response));
        }
        public async Task <UpdateOrDeleteSubscriptionRequestResult> UpdateSubscriptionQuantityAsync(
            Guid subscriptionId,
            int quantity,
            Guid requestId,
            Guid correlationId,
            CancellationToken cancellationToken)
        {
            var requestUrl = FluentUriBuilder
                             .Start(this.baseUri)
                             .AddPath("subscriptions")
                             .AddPath(subscriptionId.ToString())
                             .AddQuery(DefaultApiVersionParameterName, this.apiVersion)
                             .Uri;

            requestId     = requestId == default ? Guid.NewGuid() : requestId;
            correlationId = correlationId == default ? Guid.NewGuid() : correlationId;
            var updateContent = JsonConvert.SerializeObject(new { quantity = quantity });

            var response = await this.SendRequestAndReturnResult(
                new HttpMethod("PATCH"),
                requestUrl,
                requestId,
                correlationId,
                null,
                updateContent,
                cancellationToken);

            return(await FulfillmentRequestResult.ParseAsync <UpdateOrDeleteSubscriptionRequestResult>(response));
        }
        public async Task <IEnumerable <Subscription> > GetSubscriptionsAsync(
            Guid requestId,
            Guid correlationId,
            CancellationToken cancellationToken)
        {
            var requestUrl = FluentUriBuilder
                             .Start(this.baseUri)
                             .AddPath("subscriptions")
                             .AddQuery(DefaultApiVersionParameterName, this.apiVersion)
                             .Uri;

            requestId     = requestId == default ? Guid.NewGuid() : requestId;
            correlationId = correlationId == default ? Guid.NewGuid() : correlationId;

            var response = await this.SendRequestAndReturnResult(HttpMethod.Get,
                                                                 requestUrl,
                                                                 requestId,
                                                                 correlationId,
                                                                 null,
                                                                 "",
                                                                 cancellationToken);

            if (this.apiVersion == mockApiVersion)
            {
                return(await FulfillmentRequestResult.ParseMultipleAsync <Subscription>(response));
            }

            return((await FulfillmentRequestResult.ParseAsync <SubscriptionResult>(response)).Subscriptions);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="marketplaceToken">
        /// Token query parameter in the URL when the user is redirected to the SaaS ISV’s website from Azure.
        /// Note: The URL decodes the token value from the browser before using it.
        /// This token is valid only for 1 hour
        /// </param>
        /// <param name="requestId"></param>
        /// <param name="correlationId"></param>
        /// <param name="bearerToken"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <ResolvedSubscription> ResolveSubscriptionAsync(string marketplaceToken, Guid requestId,
                                                                          Guid correlationId, CancellationToken cancellationToken)
        {
            var requestUrl = FluentUriBuilder
                             .Start(this.baseUri)
                             .AddPath("subscriptions")
                             .AddPath("resolve")
                             .AddQuery(DefaultApiVersionParameterName, this.apiVersion)
                             .Uri;

            requestId     = requestId == default ? Guid.NewGuid() : requestId;
            correlationId = correlationId == default ? Guid.NewGuid() : correlationId;

            var response = await this.SendRequestAndReturnResult(HttpMethod.Post,
                                                                 requestUrl,
                                                                 requestId,
                                                                 correlationId,
                                                                 r =>
            {
                r.Headers.Add("x-ms-marketplace-token", marketplaceToken);
            },
                                                                 "",
                                                                 cancellationToken);

            return(await FulfillmentRequestResult.ParseAsync <ResolvedSubscription>(response));
        }
        public async Task <UpdateOrDeleteSubscriptionRequestResult> UpdateSubscriptionAsync(Guid subscriptionId,
                                                                                            ActivatedSubscription update, Guid requestId, Guid correlationId, CancellationToken cancellationToken)
        {
            var requestUrl = FluentUriBuilder
                             .Start(this.baseUri)
                             .AddPath("subscriptions")
                             .AddPath(subscriptionId.ToString())
                             .AddQuery(DefaultApiVersionParameterName, this.apiVersion)
                             .Uri;

            requestId     = requestId == default ? Guid.NewGuid() : requestId;
            correlationId = correlationId == default ? Guid.NewGuid() : correlationId;
            var updateContent = JsonConvert.SerializeObject(update);

            if (!string.IsNullOrEmpty(update.PlanId) && !string.IsNullOrEmpty(update.Quantity))
            {
                throw new ApplicationException("Plan Id and quantity cannot be patched at the same time.");
            }

            var response = await this.SendRequestAndReturnResult(
                new HttpMethod("PATCH"),
                requestUrl,
                requestId,
                correlationId,
                null,
                updateContent,
                cancellationToken);

            return(await FulfillmentRequestResult.ParseAsync <UpdateOrDeleteSubscriptionRequestResult>(response));
        }
        public async Task <SubscriptionOperation> GetSubscriptionOperationAsync(Guid subscriptionId, Guid operationId,
                                                                                Guid requestId, Guid correlationId, CancellationToken cancellationToken)
        {
            var requestUrl = FluentUriBuilder
                             .Start(this.baseUri)
                             .AddPath("subscriptions")
                             .AddPath(subscriptionId.ToString())
                             .AddPath("operations")
                             .AddPath(operationId.ToString())
                             .AddQuery(DefaultApiVersionParameterName, this.apiVersion)
                             .Uri;

            requestId     = requestId == default ? Guid.NewGuid() : requestId;
            correlationId = correlationId == default ? Guid.NewGuid() : correlationId;

            var response = await this.SendRequestAndReturnResult(
                HttpMethod.Get,
                requestUrl,
                requestId,
                correlationId,
                null,
                "",
                cancellationToken);

            return(await FulfillmentRequestResult.ParseAsync <SubscriptionOperation>(response));
        }
Beispiel #10
0
        public async Task <UpdateOrDeleteSubscriptionRequestResult> UpdateSubscriptionAsync(
            Guid subscriptionId,
            ActivatedSubscriptionResult update,
            Guid requestId,
            Guid correlationId,
            CancellationToken cancellationToken = default)
        {
            try
            {
                var requestUrl = FluentUriBuilder
                                 .Start(_baseUri)
                                 .AddPath("subscriptions")
                                 .AddPath(subscriptionId.ToString())
                                 .AddQuery(DefaultApiVersionParameterName, _apiVersion)
                                 .Uri;

                requestId     = requestId == default ? Guid.NewGuid() : requestId;
                correlationId = correlationId == default ? Guid.NewGuid() : correlationId;
                var updateContent = JsonConvert.SerializeObject(update);

                if (!string.IsNullOrEmpty(update.PlanId) && !string.IsNullOrEmpty(update.Quantity))
                {
                    string fulfillmentRestrictionMessage = "Only a plan or quantity can be patched at one time, not both";
                    throw new LunaConflictUserException(fulfillmentRestrictionMessage);
                }
                var bearerToken = await _keyVaultHelper.GetBearerToken(
                    _options.AzureActiveDirectory,
                    _options.ClientService.AuthenticationResourceId);

                var response = await SendRequestAndReturnResult(
                    new HttpMethod("PATCH"),
                    requestUrl,
                    requestId,
                    correlationId,
                    bearerToken,
                    null,
                    updateContent,
                    cancellationToken);

                return(await FulfillmentRequestResult.ParseAsync <UpdateOrDeleteSubscriptionRequestResult>(response));
            }
            catch (LunaServerException e)
            {
                throw new LunaFulfillmentException($"Cannot update subscription {subscriptionId}.", e);
            }
        }
        public async Task <IEnumerable <Subscription> > GetSubscriptionsAsync(
            Guid requestId,
            Guid correlationId,
            CancellationToken cancellationToken)
        {
            var requestUrl = FluentUriBuilder
                             .Start(this.baseUri)
                             .AddPath("subscriptions")
                             .AddQuery(DefaultApiVersionParameterName, this.apiVersion)
                             .Uri;

            requestId     = requestId == default ? Guid.NewGuid() : requestId;
            correlationId = correlationId == default ? Guid.NewGuid() : correlationId;

            var response = await this.SendRequestAndReturnResult(HttpMethod.Get,
                                                                 requestUrl,
                                                                 requestId,
                                                                 correlationId,
                                                                 null,
                                                                 "",
                                                                 cancellationToken);

            var result = await FulfillmentRequestResult.ParseAsync <SubscriptionResult>(response);

            var subscriptions = new List <Subscription>(result.Subscriptions);

            while (!string.IsNullOrEmpty(result.NextLink))
            {
                requestId = Guid.NewGuid();
                response  = await this.SendRequestAndReturnResult(HttpMethod.Get,
                                                                  new Uri(result.NextLink),
                                                                  requestId,
                                                                  correlationId,
                                                                  null,
                                                                  "",
                                                                  cancellationToken);

                result = await FulfillmentRequestResult.ParseAsync <SubscriptionResult>(response);

                subscriptions.AddRange(result.Subscriptions);
            }

            return(subscriptions);
        }
Beispiel #12
0
        public async Task <IEnumerable <SubscriptionOperation> > GetSubscriptionOperationsAsync(
            Guid subscriptionId,
            Guid requestId,
            Guid correlationId,
            CancellationToken cancellationToken = default)
        {
            try
            {
                var requestUrl = FluentUriBuilder
                                 .Start(_baseUri)
                                 .AddPath("subscriptions")
                                 .AddPath(subscriptionId.ToString())
                                 .AddPath("operations")
                                 .AddQuery(DefaultApiVersionParameterName, _apiVersion)
                                 .Uri;

                requestId     = requestId == default ? Guid.NewGuid() : requestId;
                correlationId = correlationId == default ? Guid.NewGuid() : correlationId;
                var bearerToken = await _keyVaultHelper.GetBearerToken(
                    _options.AzureActiveDirectory,
                    _options.ClientService.AuthenticationResourceId);

                var response = await SendRequestAndReturnResult(
                    HttpMethod.Get,
                    requestUrl,
                    requestId,
                    correlationId,
                    bearerToken,
                    null,
                    "",
                    cancellationToken);

                if (_apiVersion == mockApiVersion)
                {
                    return(await FulfillmentRequestResult.ParseMultipleAsync <SubscriptionOperation>(response));
                }

                return((await FulfillmentRequestResult.ParseAsync <SubscriptionOperationResult>(response)).Operations);
            }
            catch (LunaServerException e)
            {
                throw new LunaFulfillmentException($"Cannot get operations for subscription {subscriptionId}.", e);
            }
        }
Beispiel #13
0
        public async Task <FulfillmentRequestResult> UpdateSubscriptionOperationAsync(
            Guid subscriptionId,
            Guid operationId,
            OperationUpdate update,
            Guid requestId,
            Guid correlationId,
            CancellationToken cancellationToken = default)
        {
            try
            {
                var requestUrl = FluentUriBuilder
                                 .Start(_baseUri)
                                 .AddPath("subscriptions")
                                 .AddPath(subscriptionId.ToString())
                                 .AddPath("operations")
                                 .AddPath(operationId.ToString())
                                 .AddQuery(DefaultApiVersionParameterName, _apiVersion)
                                 .Uri;

                requestId     = requestId == default ? Guid.NewGuid() : requestId;
                correlationId = correlationId == default ? Guid.NewGuid() : correlationId;
                var bearerToken = await _keyVaultHelper.GetBearerToken(
                    _options.AzureActiveDirectory,
                    _options.ClientService.AuthenticationResourceId);

                var response = await SendRequestAndReturnResult(
                    new HttpMethod("PATCH"),
                    requestUrl,
                    requestId,
                    correlationId,
                    bearerToken,
                    null,
                    JsonConvert.SerializeObject(update),
                    cancellationToken);

                return(await FulfillmentRequestResult.ParseAsync <ResolvedSubscriptionResult>(response));
            }
            catch (LunaServerException e)
            {
                throw new LunaFulfillmentException($"Cannot update operation {operationId} for subscription {subscriptionId}.", e);
            }
        }
Beispiel #14
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="marketplaceToken">
        /// Token query parameter in the URL when the user is redirected to the SaaS ISV’s website from Azure.
        /// Note: The URL decodes the token value from the browser before using it.
        /// This token is valid only for 1 hour
        /// </param>
        /// <param name="requestId"></param>
        /// <param name="correlationId"></param>
        /// <param name="bearerToken"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <ResolvedSubscriptionResult> ResolveSubscriptionAsync(
            string marketplaceToken,
            Guid requestId,
            Guid correlationId,
            CancellationToken cancellationToken = default)
        {
            try
            {
                var requestUrl = FluentUriBuilder
                                 .Start(_baseUri)
                                 .AddPath("subscriptions")
                                 .AddPath("resolve")
                                 .AddQuery(DefaultApiVersionParameterName, _apiVersion)
                                 .Uri;

                requestId     = requestId == default ? Guid.NewGuid() : requestId;
                correlationId = correlationId == default ? Guid.NewGuid() : correlationId;
                var bearerToken = await _keyVaultHelper.GetBearerToken(
                    _options.AzureActiveDirectory,
                    _options.ClientService.AuthenticationResourceId);

                var response = await SendRequestAndReturnResult(
                    HttpMethod.Post,
                    requestUrl,
                    requestId,
                    correlationId,
                    bearerToken,
                    r =>
                {
                    r.Headers.Add("x-ms-marketplace-token", marketplaceToken);
                },
                    "",
                    cancellationToken);

                return(await FulfillmentRequestResult.ParseAsync <ResolvedSubscriptionResult>(response));
            }
            catch (LunaServerException e)
            {
                throw new LunaFulfillmentException("Cannot resolve subscription.", e);
            }
        }