telegram.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package rules
  2. import (
  3. "regexp"
  4. "github.com/zricethezav/gitleaks/v8/cmd/generate/secrets"
  5. "github.com/zricethezav/gitleaks/v8/config"
  6. )
  7. func TelegramBotToken() *config.Rule {
  8. // define rule
  9. r := config.Rule{
  10. Description: "Telegram Bot API Token",
  11. RuleID: "telegram-bot-api-token",
  12. SecretGroup: 1,
  13. Regex: regexp.MustCompile(`(?i)(?:^|[^0-9])([0-9]{5,16}:A[a-zA-Z0-9_\-]{34})(?:$|[^a-zA-Z0-9_\-])`),
  14. Keywords: []string{
  15. "telegram",
  16. "api",
  17. "bot",
  18. "token",
  19. "url",
  20. },
  21. }
  22. // validate
  23. validToken := secrets.NewSecret(numeric("8") + ":A" + alphaNumericExtendedShort("34"))
  24. minToken := secrets.NewSecret(numeric("5") + ":A" + alphaNumericExtendedShort("34"))
  25. maxToken := secrets.NewSecret(numeric("16") + ":A" + alphaNumericExtendedShort("34"))
  26. tps := []string{
  27. // variable assigment
  28. generateSampleSecret("telegram", validToken),
  29. // URL contaning token
  30. generateSampleSecret("url", "https://api.telegram.org/bot"+validToken+"/sendMessage"),
  31. // object constructor
  32. `const bot = new Telegraf("` + validToken + `")`,
  33. // .env
  34. `API_TOKEN = ` + validToken,
  35. // YAML
  36. `bot: ` + validToken,
  37. // Token with min bot_id
  38. generateSampleSecret("telegram", minToken),
  39. // Token with max bot_id
  40. generateSampleSecret("telegram", maxToken),
  41. }
  42. tooSmallToken := secrets.NewSecret(numeric("4") + ":A" + alphaNumericExtendedShort("34"))
  43. tooBigToken := secrets.NewSecret(numeric("17") + ":A" + alphaNumericExtendedShort("34"))
  44. fps := []string{
  45. // Token with too small bot_id
  46. generateSampleSecret("telegram", tooSmallToken),
  47. // Token with too big bot_id
  48. generateSampleSecret("telegram", tooBigToken),
  49. }
  50. return validate(r, tps, fps)
  51. }