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()); }