mirror of
https://github.com/bellingcat/octosuite.git
synced 2026-06-12 21:38:34 +03:00
109 lines
4.8 KiB
Markdown
109 lines
4.8 KiB
Markdown

|
|
|
|
A framework for gathering open-source intelligence on GitHub users, repositories and organizations
|
|
|
|
[](https://github.com/bellingcat/octosuite/actions/workflows/python-publish.yml)
|
|
[](https://github.com/bellingcat/octosuite/actions/workflows/codeql.yml)
|
|

|
|

|
|

|
|

|
|

|
|
|
|
> About
|
|

|
|
|
|
> User profile
|
|

|
|
|
|
> Organisation profile
|
|

|
|
|
|
|
|
# Wiki
|
|
[Refer to the Wiki](https://github.com/bellingcat/octosuite/wiki) for installation instructions, in addition to all other documentation.
|
|
|
|
# Features
|
|
- [x] Fetches an organization's profile information
|
|
- [x] Fetches an oganization's events
|
|
- [x] Returns an organization's repositories
|
|
- [x] Returns an organization's public members
|
|
- [x] Fetches a repository's information
|
|
- [x] Returns a repository's contributors
|
|
- [x] Returns a repository's languages
|
|
- [x] Fetches a repository's stargazers
|
|
- [x] Fetches a repository's forks
|
|
- [x] Fetches a repository's releases
|
|
- [x] Returns a list of files in a specified path of a repository
|
|
- [x] Fetches a user's profile information
|
|
- [x] Returns a user's gists
|
|
- [x] Returns organizations that a user owns/belongs to
|
|
- [x] Fetches a user's events
|
|
- [x] Fetches a list of users followed by the target
|
|
- [x] Fetches a user's followers
|
|
- [x] Checks if user A follows user B
|
|
- [x] Checks if user is a public member of an organizations
|
|
- [x] Returns a user's subscriptions
|
|
- [x] Gets a user's subscriptions
|
|
- [x] Gets a user's events
|
|
- [x] Searches users
|
|
- [x] Searches repositories
|
|
- [x] Searches topics
|
|
- [x] Searches issues
|
|
- [x] Searches commits
|
|
- [x] Automatically logs network activity (.logs folder)
|
|
- [x] User can view, read and delete logs
|
|
- [x] All the above can be used with command-line arguments (PyPI Package only)
|
|
- [x] ...And more
|
|
|
|
**Used the following implementation from [Somdev Sangwan](https://github.com/s0md3v)'s [Zen](https://github.com/s0md3v/zen) to get an email from a username**
|
|
```python
|
|
def findReposFromUsername(username):
|
|
response = get('https://api.github.com/users/%s/repos?per_page=100&sort=pushed' % username, auth=HTTPBasicAuth(uname, '')).text
|
|
repos = re.findall(r'"full_name":"%s/(.*?)",.*?"fork":(.*?),' % username, response)
|
|
nonForkedRepos = []
|
|
for repo in repos:
|
|
if repo[1] == 'false':
|
|
nonForkedRepos.append(repo[0])
|
|
return nonForkedRepos
|
|
|
|
def findEmailFromContributor(username, repo, contributor):
|
|
response = get('https://github.com/%s/%s/commits?author=%s' % (username, repo, contributor), auth=HTTPBasicAuth(uname, '')).text
|
|
latestCommit = re.search(r'href="/%s/%s/commit/(.*?)"' % (username, repo), response)
|
|
if latestCommit:
|
|
latestCommit = latestCommit.group(1)
|
|
else:
|
|
latestCommit = 'dummy'
|
|
commitDetails = get('https://github.com/%s/%s/commit/%s.patch' % (username, repo, latestCommit), auth=HTTPBasicAuth(uname, '')).text
|
|
email = re.search(r'<(.*)>', commitDetails)
|
|
if email:
|
|
email = email.group(1)
|
|
if breach:
|
|
jsonOutput[contributor] = {}
|
|
jsonOutput[contributor]['email'] = email
|
|
else:
|
|
jsonOutput[contributor] = email
|
|
return email
|
|
|
|
def findEmailFromUsername(username):
|
|
repos = findReposFromUsername(username)
|
|
for repo in repos:
|
|
email = findEmailFromContributor(username, repo, username)
|
|
if email:
|
|
print (username + ' : ' + email)
|
|
break
|
|
```
|
|
## Note
|
|
> Octosuite automatically logs network and user activity of each session, the logs are saved by date and time in the .logs folder
|
|
|
|
|
|
# License
|
|

|
|
|
|
# Donations
|
|
If you like OctoSuite and would like to show support, you can Buy A Coffee for the developer using the button below
|
|
|
|
<a href="https://www.buymeacoffee.com/189381184" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-orange.png" alt="Buy Me A Coffee" height="41" width="174"></a>
|
|
|
|
Your support will be much appreciated😊
|