MCPcopy Index your code
hub / github.com/blacklanternsecurity/bbot / handle_event

Method handle_event

bbot/modules/github_org.py:41–106  ·  view source on GitHub ↗
(self, event)

Source from the content-addressed store, hash-verified

39 return True
40
41 async def handle_event(self, event):
42 # handle github profile
43 if event.type == "SOCIAL":
44 user = event.data.get("profile_name", "")
45 in_scope = False
46 if "github-org-member" in event.tags:
47 is_org = False
48 elif "github-org" in event.tags:
49 is_org = True
50 in_scope = True
51 else:
52 is_org, in_scope = await self.validate_org(user)
53
54 # find repos from user/org (SOCIAL --> CODE_REPOSITORY)
55 repos = []
56 if is_org:
57 if in_scope:
58 self.verbose(f"Searching for repos belonging to organization {user}")
59 repos = await self.query_org_repos(user)
60 else:
61 self.verbose(f"Organization {user} does not appear to be in-scope")
62 elif "github-org-member" in event.tags:
63 self.verbose(f"Searching for repos belonging to user {user}")
64 repos = await self.query_user_repos(user)
65 for repo_url in repos:
66 repo_event = self.make_event({"url": repo_url}, "CODE_REPOSITORY", tags="git", parent=event)
67 if not repo_event:
68 continue
69 await self.emit_event(
70 repo_event,
71 context=f"{{module}} listed repos for GitHub profile and discovered {{event.type}}: {repo_url}",
72 )
73
74 # find members from org (SOCIAL --> SOCIAL)
75 if is_org and self.include_members:
76 self.verbose(f"Searching for any members belonging to {user}")
77 org_members = await self.query_org_members(user)
78 for member in org_members:
79 member_url = f"https://github.com/{member}"
80 event_data = {"platform": "github", "profile_name": member, "url": member_url}
81 member_event = self.make_event(event_data, "SOCIAL", tags="github-org-member", parent=event)
82 if member_event:
83 await self.emit_event(
84 member_event,
85 context=f"{{module}} listed members of GitHub organization and discovered {{event.type}}: {member_url}",
86 )
87
88 # find valid orgs from stub (ORG_STUB --> SOCIAL)
89 elif event.type == "ORG_STUB":
90 user = event.data
91 self.verbose(f"Validating whether the organization {user} is within our scope...")
92 is_org, in_scope = await self.validate_org(user)
93 if "target" in event.tags:
94 in_scope = True
95 if not is_org or not in_scope:
96 self.verbose(f"Unable to validate that {user} is in-scope, skipping...")
97 return
98

Callers

nothing calls this directly

Calls 8

validate_orgMethod · 0.95
query_org_reposMethod · 0.95
query_user_reposMethod · 0.95
query_org_membersMethod · 0.95
emit_eventMethod · 0.80
getMethod · 0.45
verboseMethod · 0.45
make_eventMethod · 0.45

Tested by

no test coverage detected