Example #1
0
    public async Task <IActionResult> SubscribeWebhook(WebhookSubscriptionRequest request)
    {
        if (!ModelState.IsValid)
        {
            return(ValidationProblem(ModelState));
        }

        var userId = _identityService.GetUserIdentity();


        var grantOk = await _grantUrlTester.TestGrantUrl(request.Url, request.GrantUrl, request.Token ?? string.Empty);

        if (grantOk)
        {
            var subscription = new WebhookSubscription()
            {
                Date    = DateTime.UtcNow,
                DestUrl = request.Url,
                Token   = request.Token,
                Type    = Enum.Parse <WebhookType>(request.Event, ignoreCase: true),
                UserId  = _identityService.GetUserIdentity()
            };

            _dbContext.Add(subscription);
            await _dbContext.SaveChangesAsync();

            return(CreatedAtAction("GetByUserAndId", new { id = subscription.Id }, subscription));
        }
        else
        {
            return(StatusCode(418, "Grant url can't be validated"));
        }
    }
        public async Task <IActionResult> OnPost()
        {
            ResponseCode = (int)HttpStatusCode.OK;
            var protocol = Request.IsHttps ? "https" : "http";
            var selfurl  = !string.IsNullOrEmpty(_settings.SelfUrl) ? _settings.SelfUrl : $"{protocol}://{Request.Host}/{Request.PathBase}";

            if (!selfurl.EndsWith("/"))
            {
                selfurl = selfurl + "/";
            }
            var granturl = $"{selfurl}check";
            var url      = $"{selfurl}webhook-received";
            var client   = _httpClientFactory.CreateClient("GrantClient");

            var payload = new WebhookSubscriptionRequest()
            {
                Event    = "ApplicationPaid",
                GrantUrl = granturl,
                Url      = url,
                Token    = Token
            };
            var response = await client.PostAsync <WebhookSubscriptionRequest>(_settings.WebhooksUrl + "/api/v1/webhooks", payload, new JsonMediaTypeFormatter());

            if (response.IsSuccessStatusCode)
            {
                return(RedirectToPage("WebhooksList"));
            }
            else
            {
                RequestBodyJson = JsonConvert.SerializeObject(payload);
                ResponseCode    = (int)response.StatusCode;
                ResponseMessage = response.ReasonPhrase;
                GrantUrl        = granturl;
                RequestUrl      = $"{response.RequestMessage.Method} {response.RequestMessage.RequestUri}";
            }

            return(Page());
        }