public IActionResult Index([FromBody] KenticoCloudWebhookModel model)
        {
            switch (model.Message.Type)
            {
            case KenticoCloudCacheHelper.CONTENT_ITEM_SINGLE_IDENTIFIER:
            case KenticoCloudCacheHelper.CONTENT_ITEM_VARIANT_SINGLE_IDENTIFIER:
            case KenticoCloudCacheHelper.CONTENT_TYPE_SINGLE_IDENTIFIER:
                return(RaiseNotificationForSupportedOperations(model.Message.Operation, model.Message.Type, model.Data.Items));

            case KenticoCloudCacheHelper.TAXONOMY_GROUP_SINGLE_IDENTIFIER:
                return(RaiseNotificationForSupportedOperations(model.Message.Operation, model.Message.Type, model.Data.Taxonomies));

            default:
                // For all other types of artifacts, return OK to avoid webhook re-submissions.
                return(Ok());
            }
        }
Пример #2
0
        // POST api/publish
        public async Task <HttpStatusCode> Post([FromBody] KenticoCloudWebhookModel item)
        {
            System.Diagnostics.Trace.TraceInformation("POST METHOD");
            if (item.Message.Operation.Equals("publish"))
            {
                string publishUri  = "https://api.sphere.io/" + System.Configuration.ConfigurationManager.AppSettings["CommerceToolsProjectId"] + "/products/";
                var    kcProjectId = System.Configuration.ConfigurationManager.AppSettings["KenticoProjectId"];

                for (int i = 0; i < item.Data.Items.Length; i++)
                {
                    var codeName = item.Data.Items[i].Codename;
                    var language = item.Data.Items[i].Language;
                    System.Diagnostics.Trace.TraceInformation("Item codename: " + item.Data.Items[i].Codename + ",lang:" + language);

                    client.DefaultRequestHeaders.Accept.
                    Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    // get published item from Kentico Cloud
                    try
                    {
                        string productId = await GetPublishedItemFromKenticoCloud(kcProjectId, codeName, language);

                        //authentication to CommerceTools
                        string token = await GetCommerceToolsAuthToken();

                        string version = await GetVersionOfCommerceToolsProduct(token, productId, publishUri);

                        //publish product in CommerceTools
                        return(await PublishInCommerceTools(version, productId, token));
                    }
                    catch (HttpRequestException ex)
                    {
                        System.Diagnostics.Trace.TraceInformation(ex.Message);
                        return(HttpStatusCode.BadRequest);
                    }
                }
            }
            System.Diagnostics.Trace.TraceInformation("Not publish operation.");
            return(HttpStatusCode.OK);
        }
        public void ReturnsOkWheneverPossible(PayloadType payloadType, string artefactType, string dataType, string operation)
        {
            Item[]     items      = null;
            Taxonomy[] taxonomies = null;

            switch (payloadType)
            {
            case PayloadType.Items:
                items = new[] { new Item {
                                    Codename = "Test", Type = dataType
                                } };
                break;

            case PayloadType.Taxonomies:
                taxonomies = new[] { new Taxonomy {
                                         Codename = "Test"
                                     } };
                break;

            default:
                break;
            }

            var model = new KenticoCloudWebhookModel
            {
                Data = new Data {
                    Items = items, Taxonomies = taxonomies
                },
                Message = new Message {
                    Type = artefactType, Operation = operation
                }
            };

            var controller = new KenticoCloudController(new WebhookListener());
            var result     = (StatusCodeResult)Task.Run(() => controller.Index(model)).Result;

            Assert.InRange(result.StatusCode, 200, 299);
        }