Esempio n. 1
0
        public async Task ExecuteCallbackQueryAsync(long chatId, int messageId, string callbackQueryId, string payload)
        {
            _storageService.AddOrUpdate(StorageKeys.BotCurrentState, BotStateType.FirewallCreateWaitingEnterName);

            await _telegramBotClient.DeleteMessageAsync(
                chatId : chatId,
                messageId : messageId);

            await _telegramBotClient.SendTextMessageAsync(
                chatId : chatId,
                text : FirewallMessage.GetEnterNameMessage());
        }
Esempio n. 2
0
        public async Task ExecuteCommandAsync(Message message)
        {
            var firewallId = _storageService.Get <string>(StorageKeys.FirewallId);

            if (!string.IsNullOrEmpty(firewallId))
            {
                _storageService.AddOrUpdate(StorageKeys.BotCurrentState, BotStateType.FirewallUpdateWaitingEnterInboundRule);

                await _telegramBotClient.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : FirewallMessage.GetEnterBoundRuleMessage(),
                    parseMode : ParseMode.Html);
            }
        }
        private async Task EnterName(Message message)
        {
            var newFirewall = new FirewallRequest
            {
                Name = message.Text
            };

            _storageService.AddOrUpdate(StorageKeys.NewFirewall, newFirewall);
            _storageService.AddOrUpdate(StorageKeys.BotCurrentState, BotStateType.FirewallCreateWaitingEnterInboundRule);

            await _telegramBotClient.SendTextMessageAsync(
                chatId : message.Chat.Id,
                text : FirewallMessage.GetEnterBoundRuleMessage("inbound"),
                parseMode : ParseMode.Html);
        }
Esempio n. 4
0
        public async Task ExecuteHandlerAsync(Message message)
        {
            var firewallId = _storageService.Get <string>(StorageKeys.FirewallId);

            if (string.IsNullOrEmpty(firewallId))
            {
                return;
            }

            var outboundRules = new List <OutboundRule>();
            var invalidRules  = new List <string>();
            var rules         = message.Text.Split(";");
            var regExp        = new Regex(RegExpPatterns.NetworkAddress);

            foreach (var rule in rules)
            {
                var resultMatch = regExp.Match(rule);

                if (resultMatch.Success)
                {
                    var inboundRule = new OutboundRule
                    {
                        Protocol     = resultMatch.Groups[1].Value,
                        Ports        = resultMatch.Groups[2].Value,
                        Destinations = new SourceLocation
                        {
                            Addresses = new List <string>
                            {
                                $"{resultMatch.Groups[3].Value}/{resultMatch.Groups[4].Value}"
                            }
                        }
                    };

                    outboundRules.Add(inboundRule);
                }
                else
                {
                    invalidRules.Add(rule);
                }
            }

            if (outboundRules.Count > 0)
            {
                await _digitalOceanClient.Firewalls.AddRules(firewallId, new FirewallRules
                {
                    OutboundRules = outboundRules
                });

                await _telegramBotClient.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : FirewallMessage.GetCreatedBoundRulesMessage(outboundRules.Count),
                    parseMode : ParseMode.Markdown);
            }

            if (invalidRules.Count > 0)
            {
                await _telegramBotClient.SendTextMessageAsync(
                    chatId : message.Chat.Id,
                    text : FirewallMessage.GetInvalidBoundRulesMessage(invalidRules),
                    parseMode : ParseMode.Html);
            }

            _storageService.AddOrUpdate(StorageKeys.BotCurrentState, BotStateType.None);
        }