Exemple #1
0
        public async Task Download()
        {
            if (IsDownloaded)
            {
                return;
            }

            if (IsEncrypt)
            {
                throw new ArgumentException("An encrypted message cannot download");
            }

            ITelegramBotClient telegramBotClient = ModulesManager.GetModulesManager().GetTelegramBotClient();

            using (MemoryStream stream = new MemoryStream())
            {
                await telegramBotClient.GetInfoAndDownloadFileAsync(photoId, stream);

                byte[] imageBytes = stream.ToArray();
                content = Convert.ToBase64String(imageBytes);
            }

            photoId      = null;
            IsDownloaded = true;
        }
Exemple #2
0
        private bool CheckPassword(long chatId, string password)
        {
            IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager();

            if (string.IsNullOrEmpty(password))
            {
                messageManager.SendTextMessage(chatId, TextResponse.Get(ResponseType.PasswordEmpty));
                return(false);
            }

            if (password.Length < 12)
            {
                messageManager.SendTextMessage(chatId, TextResponse.Get(ResponseType.PasswordMinLength));
                return(false);
            }

            if (password.Length > 25)
            {
                messageManager.SendTextMessage(chatId, TextResponse.Get(ResponseType.PasswordMaxLength));
                return(false);
            }

            if (!Regex.IsMatch(password, @"^[a-zA-Z0-9!""#$%&'()*+,-./:;<=>?@[\]^_`{|}~]+$"))
            {
                messageManager.SendTextMessage(chatId, TextResponse.Get(ResponseType.PasswordCharacters));
                return(false);
            }

            return(true);
        }
Exemple #3
0
        internal void Start()
        {
            ITelegramBotClient telegramBotClient = ModulesManager.GetModulesManager().GetTelegramBotClient();

            telegramBotClient.OnMessage += OnMessage;
            telegramBotClient.StartReceiving();
        }
Exemple #4
0
        public void HandleUserMessage(ITelegramUserMessage message)
        {
            if (message.IsEmpty())
            {
                return;
            }

            ISessionManager sessionManager = ModulesManager.GetModulesManager().GetSessionManager();

            IChatSession chatSession = sessionManager.GetChatSession(message.ChatId);

            if (chatSession == null)
            {
                sessionManager.CreateChatSession(message.ChatId);
                chatSession = sessionManager.GetChatSession(message.ChatId);
            }

            sessionManager.UserSentMessage(message.ChatId, message.MessageId);
            if (string.Equals(message.Message, "/e") || string.Equals(message.Message, "/exit"))
            {
                sessionManager.KillChatSession(message.ChatId);
            }
            else
            {
                chatStateHandlerFactory.GetChatStateHandler(chatSession.State).HandleUserMessage(message, this);
            }
        }
Exemple #5
0
        public void CreateUser(long chatId, string password)
        {
            ISecureManager secureManager = ModulesManager.GetModulesManager().GetSecureManager();

            if (IsUserExist(chatId))
            {
                LogoutUser(chatId);

                using (UsersContext db = new UsersContext())
                {
                    UserModel userModel = db.Users
                                          .Where(user => user.ChatId == chatId)
                                          .First();

                    userModel.HashPassword = secureManager.CalculateHash(password);
                    db.SaveChanges();
                }
            }
            else
            {
                using (UsersContext db = new UsersContext())
                {
                    UserModel userModel = new UserModel
                    {
                        ChatId       = chatId,
                        HashPassword = secureManager.CalculateHash(password)
                    };

                    db.Users.Add(userModel);
                    db.SaveChanges();
                }
            }
        }
Exemple #6
0
        public void Send()
        {
            if (IsEncrypt)
            {
                throw new ArgumentException("An encrypted message cannot send");
            }

            if (!IsDownloaded)
            {
                throw new ArgumentException("An undownloaded message cannot send");
            }

            IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager();

            switch (type)
            {
            case StashMessageType.Text:
                _ = messageManager.SendTextMessage(ChatId, content);
                break;

            case StashMessageType.Photo:
                byte[] imageBytes = Convert.FromBase64String(content);
                _ = messageManager.SendPhotoMessage(ChatId, imageBytes);
                break;

            case StashMessageType.Empty:
                break;
            }
        }
Exemple #7
0
        public void Encrypt(IUser user)
        {
            if (IsEncrypt)
            {
                return;
            }

            if (!IsDownloaded)
            {
                throw new ArgumentException("An undownloaded message cannot encrypt");
            }

            if (!user.IsAuthorized)
            {
                throw new ArgumentException("User is unauthorized, message cannot encrypt");
            }

            ISecureManager secureManager = ModulesManager.GetModulesManager().GetSecureManager();

            string password = secureManager.DecryptWithAes(user.EncryptedPassword);

            if (type != StashMessageType.Empty)
            {
                content = secureManager.EncryptWithAesHmac(content, password);
            }

            IsEncrypt = true;
        }
Exemple #8
0
        private void Logout(long chatId, IChatStateHandlerContext context)
        {
            IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager();
            IUserManager    userManager    = ModulesManager.GetModulesManager().GetUserManager();

            userManager.LogoutUser(chatId);
            messageManager.SendTextMessage(chatId, TextResponse.Get(ResponseType.Logout));
            context.ChangeChatState(chatId, Session.ChatSessionState.Start);
        }
Exemple #9
0
        private void WriteBotStatus()
        {
            ITelegramBotClient telegramBotClient = ModulesManager.GetModulesManager().GetTelegramBotClient();

            Telegram.Bot.Types.User me = telegramBotClient.GetMeAsync().Result;
            Console.WriteLine(DateTime.Now + " - Bot set up!");
            Console.WriteLine($"Id: {me.Id}");
            Console.WriteLine($"Login: {me.Username}");
            Console.WriteLine($"Name: {me.FirstName}");
        }
Exemple #10
0
        public void Kill()
        {
            IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager();
            IUserManager    userManager    = ModulesManager.GetModulesManager().GetUserManager();

            messageManager.DeleteListMessages(ChatId, botMessagesId);
            botMessagesId.Clear();
            messageManager.DeleteListMessages(ChatId, userMessagesId);
            userMessagesId.Clear();
            userManager.LogoutUser(ChatId);
        }
Exemple #11
0
        public void CreateNewUser(long chatId, string password)
        {
            IDatabaseManager databaseManager = ModulesManager.GetModulesManager().GetDatabaseManager();

            if (databaseManager.IsStashExist(chatId))
            {
                databaseManager.ClearStash(chatId);
            }

            databaseManager.CreateUser(chatId, password);
        }
Exemple #12
0
        public void Login(string password)
        {
            if (string.IsNullOrEmpty(password))
            {
                throw new ArgumentException("Password cannot be null");
            }

            ISecureManager secureManager = ModulesManager.GetModulesManager().GetSecureManager();

            EncryptedPassword = secureManager.EncryptWithAes(password);
            IsAuthorized      = true;
        }
Exemple #13
0
        public void ChangeChatState(long chatId, ChatSessionState newState)
        {
            ISessionManager sessionManager = ModulesManager.GetModulesManager().GetSessionManager();

            IChatSession chatSession = sessionManager.GetChatSession(chatId);

            if (chatSession != null)
            {
                chatSession.State = newState;
                chatStateHandlerFactory.GetChatStateHandler(chatSession.State).StartStateMessage(chatId);
            }
        }
Exemple #14
0
        private void RegistrationUser(ITelegramUserMessage message, IChatStateHandlerContext context)
        {
            IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager();
            IUserManager    userManager    = ModulesManager.GetModulesManager().GetUserManager();

            if (CheckPassword(message.ChatId, message.Message))
            {
                userManager.CreateNewUser(message.ChatId, message.Message);
                messageManager.SendTextMessage(message.ChatId, TextResponse.Get(ResponseType.SuccessRegistration));
                context.ChangeChatState(message.ChatId, Session.ChatSessionState.Start);
            }
        }
Exemple #15
0
        public void HandleUserMessage(ITelegramUserMessage message, IChatStateHandlerContext context)
        {
            if (message == null || context == null)
            {
                return;
            }

            IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager();

            messageManager.SendTextMessage(message.ChatId, TextResponse.Get(ResponseType.WelcomeMessage));
            context.ChangeChatState(message.ChatId, ChatSessionState.Start);
        }
Exemple #16
0
        internal UserLocal(long chatId, string password)
        {
            if (string.IsNullOrEmpty(password))
            {
                throw new ArgumentException("Password cannot be null");
            }

            ISecureManager secureManager = ModulesManager.GetModulesManager().GetSecureManager();

            ChatId            = chatId;
            IsAuthorized      = false;
            hashPassword      = secureManager.CalculateHash(password);
            EncryptedPassword = null;
        }
Exemple #17
0
        private async Task SaveMessageToStash(ITelegramUserMessage message)
        {
            IDatabaseManager databaseManager = ModulesManager.GetModulesManager().GetDatabaseManager();

            IUser user = databaseManager.GetUser(message.ChatId);

            if (user != null && user.IsAuthorized)
            {
                IStashMessage stashMessage = databaseManager.CreateStashMessage(message);
                await stashMessage.Download();

                stashMessage.Encrypt(user);
                databaseManager.SaveMessageToStash(stashMessage);
            }
        }
Exemple #18
0
        private void GetStash(long chatId, IChatStateHandlerContext context)
        {
            IDatabaseManager databaseManager = ModulesManager.GetModulesManager().GetDatabaseManager();

            IUser user = databaseManager.GetUser(chatId);

            if (user != null && user.IsAuthorized)
            {
                List <IStashMessage> messagesFromStash = databaseManager.GetMessagesFromStash(chatId);
                foreach (IStashMessage stashMessage in messagesFromStash)
                {
                    stashMessage.Decrypt(user);
                    stashMessage.Send();
                }
            }
        }
Exemple #19
0
        public async Task SendTextMessage(long chatId, string messageText)
        {
            if (string.IsNullOrEmpty(messageText))
            {
                return;
            }

            ITelegramBotClient telegramBotClient = ModulesManager.GetModulesManager().GetTelegramBotClient();
            ISessionManager    sessionManager    = ModulesManager.GetModulesManager().GetSessionManager();

            Telegram.Bot.Types.Message message = await telegramBotClient.SendTextMessageAsync(
                chatId : chatId,
                text : messageText
                );

            sessionManager.BotSentMessage(chatId, message.MessageId);
        }
Exemple #20
0
        private void LoginUser(ITelegramUserMessage message,
                               IChatStateHandlerContext context)
        {
            IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager();
            IUserManager    userManager    = ModulesManager.GetModulesManager().GetUserManager();

            bool success = userManager.LoginUser(message.ChatId, message.Message);

            if (success)
            {
                messageManager.SendTextMessage(message.ChatId, TextResponse.Get(ResponseType.SuccessAuthorisation));
                context.ChangeChatState(message.ChatId, Session.ChatSessionState.Authorized);
            }
            else
            {
                messageManager.SendTextMessage(message.ChatId, TextResponse.Get(ResponseType.FailAuthorisation));
            }
        }
Exemple #21
0
        public async Task SendPhotoMessage(long chatId, byte[] imageBytes)
        {
            if (imageBytes == null || imageBytes.Length == 0)
            {
                return;
            }

            ITelegramBotClient telegramBotClient = ModulesManager.GetModulesManager().GetTelegramBotClient();
            ISessionManager    sessionManager    = ModulesManager.GetModulesManager().GetSessionManager();

            using (Stream stream = new MemoryStream(imageBytes))
            {
                Telegram.Bot.Types.Message message = await telegramBotClient.SendPhotoAsync(
                    chatId,
                    new InputOnlineFile(stream)
                    );

                sessionManager.BotSentMessage(chatId, message.MessageId);
            }
        }
Exemple #22
0
        public void HandleUserMessage(ITelegramUserMessage message, IChatStateHandlerContext context)
        {
            if (message == null || context == null)
            {
                return;
            }

            IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager();
            IUserManager    userManager    = ModulesManager.GetModulesManager().GetUserManager();

            if (IsCommand(message.Message))
            {
                commands[message.Message](message.ChatId, context);
            }
            else
            {
                if (!string.IsNullOrEmpty(message.Message))
                {
                    LoginUser(message, context);
                }
            }
        }
Exemple #23
0
        public bool ValidatePassword(string password)
        {
            ISecureManager secureManager = ModulesManager.GetModulesManager().GetSecureManager();

            return(secureManager.CompareWithHash(password, hashPassword));
        }
Exemple #24
0
        private void OnMessage(object sender, MessageEventArgs e)
        {
            IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager();

            messageManager.HandleUserMessage(telegramUserMessageFactory.Create(e.Message));
        }
Exemple #25
0
        public void DeleteMessage(long chatId, int messageId)
        {
            ITelegramBotClient telegramBotClient = ModulesManager.GetModulesManager().GetTelegramBotClient();

            telegramBotClient.DeleteMessageAsync(chatId, messageId);
        }
Exemple #26
0
        public bool LoginUser(long chatId, string password)
        {
            IDatabaseManager databaseManager = ModulesManager.GetModulesManager().GetDatabaseManager();

            return(databaseManager.LoginUser(chatId, password));
        }
Exemple #27
0
        public void StartStateMessage(long chatId)
        {
            IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager();

            messageManager.SendTextMessage(chatId, TextResponse.Get(ResponseType.RegistrationReady));
        }
Exemple #28
0
        public void StartStateMessage(long chatId)
        {
            IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager();

            messageManager.SendTextMessage(chatId, TextResponse.Get(ResponseType.MainCommands));
        }
Exemple #29
0
        private void Information(long chatId, IChatStateHandlerContext context)
        {
            IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager();

            messageManager.SendTextMessage(chatId, TextResponse.Get(ResponseType.Information));
        }
Exemple #30
0
        public void LogoutUser(long chatId)
        {
            IDatabaseManager databaseManager = ModulesManager.GetModulesManager().GetDatabaseManager();

            databaseManager.LogoutUser(chatId);
        }