main.go 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. package main
  2. import (
  3. "os"
  4. "text/template"
  5. "github.com/rs/zerolog/log"
  6. "github.com/zricethezav/gitleaks/v8/cmd/generate/config/rules"
  7. "github.com/zricethezav/gitleaks/v8/config"
  8. )
  9. const (
  10. templatePath = "rules/config.tmpl"
  11. )
  12. func main() {
  13. var configRules []*config.Rule
  14. configRules = append(configRules, rules.AdafruitAPIKey())
  15. configRules = append(configRules, rules.AdobeClientID())
  16. configRules = append(configRules, rules.AdobeClientSecret())
  17. configRules = append(configRules, rules.AgeSecretKey())
  18. configRules = append(configRules, rules.Airtable())
  19. configRules = append(configRules, rules.AlgoliaApiKey())
  20. configRules = append(configRules, rules.AlibabaAccessKey())
  21. configRules = append(configRules, rules.AlibabaSecretKey())
  22. configRules = append(configRules, rules.AsanaClientID())
  23. configRules = append(configRules, rules.AsanaClientSecret())
  24. configRules = append(configRules, rules.Atlassian())
  25. configRules = append(configRules, rules.AWS())
  26. configRules = append(configRules, rules.BitBucketClientID())
  27. configRules = append(configRules, rules.BitBucketClientSecret())
  28. configRules = append(configRules, rules.BittrexAccessKey())
  29. configRules = append(configRules, rules.BittrexSecretKey())
  30. configRules = append(configRules, rules.Beamer())
  31. configRules = append(configRules, rules.CodecovAccessToken())
  32. configRules = append(configRules, rules.CoinbaseAccessToken())
  33. configRules = append(configRules, rules.Clojars())
  34. configRules = append(configRules, rules.ConfluentAccessToken())
  35. configRules = append(configRules, rules.ConfluentSecretKey())
  36. configRules = append(configRules, rules.Contentful())
  37. configRules = append(configRules, rules.Databricks())
  38. configRules = append(configRules, rules.DatadogtokenAccessToken())
  39. configRules = append(configRules, rules.DigitalOceanPAT())
  40. configRules = append(configRules, rules.DigitalOceanOAuthToken())
  41. configRules = append(configRules, rules.DigitalOceanRefreshToken())
  42. configRules = append(configRules, rules.DiscordAPIToken())
  43. configRules = append(configRules, rules.DiscordClientID())
  44. configRules = append(configRules, rules.DiscordClientSecret())
  45. configRules = append(configRules, rules.Doppler())
  46. configRules = append(configRules, rules.DropBoxAPISecret())
  47. configRules = append(configRules, rules.DropBoxLongLivedAPIToken())
  48. configRules = append(configRules, rules.DropBoxShortLivedAPIToken())
  49. configRules = append(configRules, rules.DroneciAccessToken())
  50. configRules = append(configRules, rules.Duffel())
  51. configRules = append(configRules, rules.Dynatrace())
  52. configRules = append(configRules, rules.EasyPost())
  53. configRules = append(configRules, rules.EasyPostTestAPI())
  54. configRules = append(configRules, rules.EtsyAccessToken())
  55. configRules = append(configRules, rules.Facebook())
  56. configRules = append(configRules, rules.FastlyAPIToken())
  57. configRules = append(configRules, rules.FinicityClientSecret())
  58. configRules = append(configRules, rules.FinicityAPIToken())
  59. configRules = append(configRules, rules.FlickrAccessToken())
  60. configRules = append(configRules, rules.FinnhubAccessToken())
  61. configRules = append(configRules, rules.FlutterwavePublicKey())
  62. configRules = append(configRules, rules.FlutterwaveSecretKey())
  63. configRules = append(configRules, rules.FlutterwaveEncKey())
  64. configRules = append(configRules, rules.FrameIO())
  65. configRules = append(configRules, rules.FreshbooksAccessToken())
  66. configRules = append(configRules, rules.GoCardless())
  67. // TODO figure out what makes sense for GCP
  68. // configRules = append(configRules, rules.GCPServiceAccount())
  69. configRules = append(configRules, rules.GCPAPIKey())
  70. configRules = append(configRules, rules.GitHubPat())
  71. configRules = append(configRules, rules.GitHubFineGrainedPat())
  72. configRules = append(configRules, rules.GitHubOauth())
  73. configRules = append(configRules, rules.GitHubApp())
  74. configRules = append(configRules, rules.GitHubRefresh())
  75. configRules = append(configRules, rules.Gitlab())
  76. configRules = append(configRules, rules.GitterAccessToken())
  77. configRules = append(configRules, rules.GrafanaApiKey())
  78. configRules = append(configRules, rules.GrafanaCloudApiToken())
  79. configRules = append(configRules, rules.GrafanaServiceAccountToken())
  80. configRules = append(configRules, rules.Hashicorp())
  81. configRules = append(configRules, rules.Heroku())
  82. configRules = append(configRules, rules.HubSpot())
  83. configRules = append(configRules, rules.Intercom())
  84. configRules = append(configRules, rules.JWT())
  85. configRules = append(configRules, rules.KrakenAccessToken())
  86. configRules = append(configRules, rules.KucoinAccessToken())
  87. configRules = append(configRules, rules.KucoinSecretKey())
  88. configRules = append(configRules, rules.LaunchDarklyAccessToken())
  89. configRules = append(configRules, rules.LinearAPIToken())
  90. configRules = append(configRules, rules.LinearClientSecret())
  91. configRules = append(configRules, rules.LinkedinClientID())
  92. configRules = append(configRules, rules.LinkedinClientSecret())
  93. configRules = append(configRules, rules.LobAPIToken())
  94. configRules = append(configRules, rules.LobPubAPIToken())
  95. configRules = append(configRules, rules.MailChimp())
  96. configRules = append(configRules, rules.MailGunPubAPIToken())
  97. configRules = append(configRules, rules.MailGunPrivateAPIToken())
  98. configRules = append(configRules, rules.MailGunSigningKey())
  99. configRules = append(configRules, rules.MapBox())
  100. configRules = append(configRules, rules.MattermostAccessToken())
  101. configRules = append(configRules, rules.MessageBirdAPIToken())
  102. configRules = append(configRules, rules.MessageBirdClientID())
  103. configRules = append(configRules, rules.NetlifyAccessToken())
  104. configRules = append(configRules, rules.NewRelicUserID())
  105. configRules = append(configRules, rules.NewRelicUserKey())
  106. configRules = append(configRules, rules.NewRelicBrowserAPIKey())
  107. configRules = append(configRules, rules.NPM())
  108. configRules = append(configRules, rules.NytimesAccessToken())
  109. configRules = append(configRules, rules.OktaAccessToken())
  110. configRules = append(configRules, rules.PlaidAccessID())
  111. configRules = append(configRules, rules.PlaidSecretKey())
  112. configRules = append(configRules, rules.PlaidAccessToken())
  113. configRules = append(configRules, rules.PlanetScalePassword())
  114. configRules = append(configRules, rules.PlanetScaleAPIToken())
  115. configRules = append(configRules, rules.PlanetScaleOAuthToken())
  116. configRules = append(configRules, rules.PostManAPI())
  117. configRules = append(configRules, rules.Prefect())
  118. configRules = append(configRules, rules.PrivateKey())
  119. configRules = append(configRules, rules.PulumiAPIToken())
  120. configRules = append(configRules, rules.PyPiUploadToken())
  121. configRules = append(configRules, rules.RapidAPIAccessToken())
  122. configRules = append(configRules, rules.ReadMe())
  123. configRules = append(configRules, rules.RubyGemsAPIToken())
  124. configRules = append(configRules, rules.SendbirdAccessID())
  125. configRules = append(configRules, rules.SendbirdAccessToken())
  126. configRules = append(configRules, rules.SendGridAPIToken())
  127. configRules = append(configRules, rules.SendInBlueAPIToken())
  128. configRules = append(configRules, rules.SentryAccessToken())
  129. configRules = append(configRules, rules.ShippoAPIToken())
  130. configRules = append(configRules, rules.ShopifyAccessToken())
  131. configRules = append(configRules, rules.ShopifyCustomAccessToken())
  132. configRules = append(configRules, rules.ShopifyPrivateAppAccessToken())
  133. configRules = append(configRules, rules.ShopifySharedSecret())
  134. configRules = append(configRules, rules.SidekiqSecret())
  135. configRules = append(configRules, rules.SidekiqSensitiveUrl())
  136. configRules = append(configRules, rules.SlackAccessToken())
  137. configRules = append(configRules, rules.SlackWebHook())
  138. configRules = append(configRules, rules.StripeAccessToken())
  139. configRules = append(configRules, rules.SquareAccessToken())
  140. configRules = append(configRules, rules.SquareSpaceAccessToken())
  141. configRules = append(configRules, rules.SumoLogicAccessID())
  142. configRules = append(configRules, rules.SumoLogicAccessToken())
  143. configRules = append(configRules, rules.TeamsWebhook())
  144. configRules = append(configRules, rules.TelegramBotToken())
  145. configRules = append(configRules, rules.TravisCIAccessToken())
  146. configRules = append(configRules, rules.Twilio())
  147. configRules = append(configRules, rules.TwitchAPIToken())
  148. configRules = append(configRules, rules.TwitterAPIKey())
  149. configRules = append(configRules, rules.TwitterAPISecret())
  150. configRules = append(configRules, rules.TwitterAccessToken())
  151. configRules = append(configRules, rules.TwitterAccessSecret())
  152. configRules = append(configRules, rules.TwitterBearerToken())
  153. configRules = append(configRules, rules.Typeform())
  154. configRules = append(configRules, rules.VaultBatchToken())
  155. configRules = append(configRules, rules.VaultServiceToken())
  156. configRules = append(configRules, rules.YandexAPIKey())
  157. configRules = append(configRules, rules.YandexAWSAccessToken())
  158. configRules = append(configRules, rules.YandexAccessToken())
  159. configRules = append(configRules, rules.ZendeskSecretKey())
  160. configRules = append(configRules, rules.GenericCredential())
  161. // ensure rules have unique ids
  162. ruleLookUp := make(map[string]config.Rule)
  163. for _, rule := range configRules {
  164. // check if rule is in ruleLookUp
  165. if _, ok := ruleLookUp[rule.RuleID]; ok {
  166. log.Fatal().Msgf("rule id %s is not unique", rule.RuleID)
  167. }
  168. // TODO: eventually change all the signatures to get ride of this
  169. // nasty dereferencing.
  170. ruleLookUp[rule.RuleID] = *rule
  171. }
  172. tmpl, err := template.ParseFiles(templatePath)
  173. if err != nil {
  174. log.Fatal().Err(err).Msg("Failed to parse template")
  175. }
  176. f, err := os.Create("../../../config/gitleaks.toml")
  177. if err != nil {
  178. log.Fatal().Err(err).Msg("Failed to create rules.toml")
  179. }
  180. if err = tmpl.Execute(f, config.Config{Rules: ruleLookUp}); err != nil {
  181. log.Fatal().Err(err).Msg("could not execute template")
  182. }
  183. }