public async Task <IActionResult> DiscordWebhooks() { AddDiscordWebhookViewModel model = new AddDiscordWebhookViewModel { Stats = await GetStats() }; return(View(model)); }
public async Task <IActionResult> DiscordWebhooks(AddDiscordWebhookViewModel model) { try { string failedTestMessage = "<div class=\"alert alert-danger\">Failed to register Discord Webhook. Please make sure you have created the Discord Webhook on your Discord server and that the provided URL is valid.</div>"; string successMessage = "<div class=\"alert alert-success\">Your Discord Webhook has been successfully registered.</div>"; model.Message = string.Empty; bool recaptchaResult = await VerifyGoogleRecaptcha(model.RecaptchaResponse); if (!recaptchaResult) { model.Message = "<div class=\"alert alert-danger\">Recaptcha validation failed.</div>"; return(View(model)); } if (ModelState.IsValid) { // Find existing discord webhook. DiscordWebhook dbDiscordWebhook = await ( from s in _context.DiscordWebhooks where string.Compare(s.Url, model.Url, true) == 0 select s ).FirstOrDefaultAsync(); // Was existing found? if (dbDiscordWebhook != null) { // Existing found, is it registered? if (dbDiscordWebhook.DeletedAt != null) { // Test discord webhook bool isDiscordWebhookValid = await ValidateDiscordWebhook(model.Url); if (isDiscordWebhookValid) { // Update deregistered. dbDiscordWebhook.DeletedAt = null; // Save changes. await _context.SaveChangesAsync(); if (_cache.TryGetValue(__tadwsKey, out int value)) { _cache.Remove(__tadwsKey); } await SendGoogleAnalyticsConversion ( "discord-webhook", "reregister", "na", model.Url.ToLowerInvariant().GetHashCode().ToString() ); model.Message = successMessage; } else { model.Message = failedTestMessage; } } else { // Else nothing, already registered. model.Message = successMessage; } } else { // Test discord webhook bool isDiscordWebhookValid = await ValidateDiscordWebhook(model.Url); if (isDiscordWebhookValid) { // Add new discord webhook await _context.DiscordWebhooks.AddAsync ( new DiscordWebhook() { CreatedAt = DateTimeOffset.Now, DeletedAt = null, Url = model.Url.Left(250), DiscordWebhookId = 0, UpdatedAt = DateTimeOffset.Now } ); await _context.SaveChangesAsync(); if (_cache.TryGetValue(__tadwsKey, out int value)) { _cache.Remove(__tadwsKey); } await SendGoogleAnalyticsConversion ( "discord-webhook", "register", "na", model.Url.ToLowerInvariant().GetHashCode().ToString() ); model.Message = successMessage; } else { model.Message = failedTestMessage; } } } } catch (Exception ex) { // TODO log model.Message = "<div class=\"alert alert-danger\">An error has occured. Please try again later.</div>"; Trace.WriteLine(ex); } model.Stats = await GetStats(); return(View(model)); }