CreateToken.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using System.Linq;
  2. using System.Threading.Tasks;
  3. using CardCollector.Controllers;
  4. using CardCollector.DataBase.Entity;
  5. using CardCollector.DataBase.EntityDao;
  6. using CardCollector.Resources;
  7. using Telegram.Bot.Types;
  8. using Telegram.Bot.Types.Enums;
  9. namespace CardCollector.Commands.Message.TextMessage
  10. {
  11. public class CreateToken : MessageCommand
  12. {
  13. protected override string CommandText => "create_token";
  14. private const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890-_";
  15. private const string site = "http://127.0.0.1:8080/";
  16. public override async Task Execute()
  17. {
  18. var token = GenerateNewToken();
  19. await SessionTokenDao.AddNew(User.Id, token);
  20. var loginLink = $"{site}login?token={token}";
  21. var message = await MessageController.SendTextWithHtml(User,
  22. $"<a href=\"{loginLink}\">{Messages.your_login_link}</a>", Keyboard.LoginKeyboard(loginLink));
  23. User.Session.Messages.Add(message.MessageId);
  24. }
  25. private string GenerateNewToken()
  26. {
  27. return new string(Enumerable.Repeat(chars, 64).Select(s => s[Utilities.rnd.Next(s.Length)]).ToArray());
  28. }
  29. protected internal override bool IsMatches(UserEntity user, Update update)
  30. {
  31. if (update.Message!.Type != MessageType.Text) return false;
  32. var data = update.Message.Text!.Split(' ');
  33. return data.Length > 1 && data[1] == CommandText;
  34. }
  35. public CreateToken() { }
  36. public CreateToken(UserEntity user, Update update) : base(user, update) { }
  37. }
  38. }