host.go 906 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package hosts
  2. import (
  3. "strings"
  4. "github.com/zricethezav/gitleaks/v5/manager"
  5. )
  6. const (
  7. _github int = iota + 1
  8. _gitlab
  9. )
  10. // Host is an interface used for defining external git hosting providers like github and gitlab.
  11. // TODO add bitbucket
  12. type Host interface {
  13. Scan()
  14. ScanPR()
  15. }
  16. // Run kicks off a host scan. This function accepts a manager and determines what host it should scan
  17. func Run(m *manager.Manager) error {
  18. var host Host
  19. var err error
  20. switch getHost(m.Opts.Host) {
  21. case _github:
  22. host, err = NewGithubClient(m)
  23. case _gitlab:
  24. host, err = NewGitlabClient(m)
  25. default:
  26. return nil
  27. }
  28. if err != nil {
  29. return err
  30. }
  31. if m.Opts.PullRequest != "" {
  32. host.ScanPR()
  33. } else {
  34. host.Scan()
  35. }
  36. return err
  37. }
  38. func getHost(host string) int {
  39. if strings.ToLower(host) == "github" {
  40. return _github
  41. } else if strings.ToLower(host) == "gitlab" {
  42. return _gitlab
  43. }
  44. return -1
  45. }