コード例 #1
0
        public async Task <IActionResult> DiscordWebhooks()
        {
            AddDiscordWebhookViewModel model = new AddDiscordWebhookViewModel
            {
                Stats = await GetStats()
            };

            return(View(model));
        }
コード例 #2
0
        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));
        }