From c76953882c327c79121f7b51386048ae894abf63 Mon Sep 17 00:00:00 2001 From: Hadi <112569860+anotherhadi@users.noreply.github.com> Date: Wed, 17 Sep 2025 20:39:53 +0200 Subject: [PATCH] Nil when no result & better error handling Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com> --- github-recon/email/main.go | 4 ++-- github-recon/email/spoofing.go | 25 ++++++++++++++----------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/github-recon/email/main.go b/github-recon/email/main.go index 9a66bae..e36a028 100644 --- a/github-recon/email/main.go +++ b/github-recon/email/main.go @@ -13,7 +13,7 @@ type EmailResult struct { TargetType github_recon_settings.TargetType Commits CommitsResult - Spoofing SpoofingResult + Spoofing *SpoofingResult } func Email(settings github_recon_settings.Settings) EmailResult { @@ -33,7 +33,7 @@ func Email(settings github_recon_settings.Settings) EmailResult { } else { utils.PrintTitle(settings.Silent, "🎭 Spoofing test") result.Spoofing = Spoofing(settings) - if result.Spoofing.AvatarURL != "" { + if result.Spoofing != nil && result.Spoofing.AvatarURL != "" { utils.PrintAvatar(settings, result.Spoofing.AvatarURL) } utils.PrintStruct(settings, result.Spoofing, 0) diff --git a/github-recon/email/spoofing.go b/github-recon/email/spoofing.go index 7fc9feb..a1a741f 100644 --- a/github-recon/email/spoofing.go +++ b/github-recon/email/spoofing.go @@ -26,7 +26,8 @@ func RandomString(n int) string { return string(b) } -func Spoofing(s github_recon_settings.Settings) (response SpoofingResult) { +func Spoofing(s github_recon_settings.Settings) (response *SpoofingResult) { + response = &SpoofingResult{} name := "gh-recon-spoofing-" + RandomString(8) private := true autoInit := true @@ -41,6 +42,13 @@ func Spoofing(s github_recon_settings.Settings) (response SpoofingResult) { } utils.WaitForRateLimit(s, resp) + defer func() { + _, err = s.Client.Repositories.Delete(s.Ctx, repo.Owner.GetLogin(), name) + if err != nil { + s.Logger.Error("Error while deleting repo", "err", err) + } + }() + branch := repo.GetDefaultBranch() if branch == "" { branch = "main" @@ -57,7 +65,6 @@ func Spoofing(s github_recon_settings.Settings) (response SpoofingResult) { ref, resp, err := s.Client.Git.GetRef(s.Ctx, repo.Owner.GetLogin(), name, refName) if err != nil { s.Logger.Error("Error while getting ref", "err", err) - s.Logger.Warn("The temp repo was left undeleted", "repo", repo.GetHTMLURL()) return } utils.WaitForRateLimit(s, resp) @@ -65,7 +72,6 @@ func Spoofing(s github_recon_settings.Settings) (response SpoofingResult) { parentCommit, resp, err := s.Client.Git.GetCommit(s.Ctx, repo.Owner.GetLogin(), name, ref.GetObject().GetSHA()) if err != nil { s.Logger.Error("Error while getting parent commit", "err", err) - s.Logger.Warn("The temp repo was left undeleted", "repo", repo.GetHTMLURL()) return } utils.WaitForRateLimit(s, resp) @@ -81,7 +87,6 @@ func Spoofing(s github_recon_settings.Settings) (response SpoofingResult) { newCommit, resp, err := s.Client.Git.CreateCommit(s.Ctx, repo.Owner.GetLogin(), name, commit, nil) if err != nil { s.Logger.Error("Error while creating spoofed empty commit", "err", err) - s.Logger.Warn("The temp repo was left undeleted", "repo", repo.GetHTMLURL()) return } utils.WaitForRateLimit(s, resp) @@ -90,7 +95,6 @@ func Spoofing(s github_recon_settings.Settings) (response SpoofingResult) { _, resp, err = s.Client.Git.UpdateRef(s.Ctx, repo.Owner.GetLogin(), name, ref, false) if err != nil { s.Logger.Error("Error while updating ref to spoofed commit", "err", err) - s.Logger.Warn("The temp repo was left undeleted", "repo", repo.GetHTMLURL()) return } utils.WaitForRateLimit(s, resp) @@ -98,23 +102,22 @@ func Spoofing(s github_recon_settings.Settings) (response SpoofingResult) { commits, _, err := s.Client.Repositories.ListCommits(s.Ctx, repo.Owner.GetLogin(), name, nil) if err != nil { s.Logger.Error("Error while listing commits", "err", err) - s.Logger.Warn("The temp repo was left undeleted", "repo", repo.GetHTMLURL()) return } - if len(commits) > 0 { + if len(commits) > 1 { last := commits[0] response.Username = last.GetAuthor().GetLogin() response.Name = last.GetAuthor().GetName() response.Email = last.GetAuthor().GetEmail() response.Url = last.GetAuthor().GetHTMLURL() response.AvatarURL = last.GetAuthor().GetAvatarURL() + } else { + s.Logger.Error("Only one commit found, something went wrong.", "commits", commits) } - _, err = s.Client.Repositories.Delete(s.Ctx, repo.Owner.GetLogin(), name) - if err != nil { - s.Logger.Error("Error while deleting repo", "err", err) + if response.Username == "" && response.Name == "" && response.Email == "" { + return nil } - return }