How github_bot.py Authenticates to the GitHub API Using Basic Authentication

The github_bot.py script in the HelloGitHub repository authenticates to the GitHub API using HTTP Basic Authentication via the requests library's auth parameter, passing a username and password tuple to generate an Authorization: Basic header.

The HelloGitHub project automates the collection of trending GitHub repositories through a Python bot that queries the GitHub Events API. Understanding the github_bot.py authentication method is essential for developers maintaining or extending this automation, as it determines how the script securely accesses GitHub data.

Basic Authentication Implementation in github_bot.py

The core authentication logic resides in the get_data function within script/github_bot/github_bot.py. When fetching GitHub events, the script constructs an HTTP GET request that includes credentials through the auth parameter:

response = requests.get(
    API['events'] + args,
    auth=(ACCOUNT['username'], ACCOUNT['password'])
)

This auth tuple triggers the requests library to automatically encode the credentials using Base64 and append an Authorization: Basic <credentials> header to the HTTP request. The GitHub API receives this header and validates the credentials against its user database before returning the requested event data.

Source Code Structure and Credential Management

According to the HelloGitHub source code, the authentication components are organized in specific sections of script/github_bot/github_bot.py:

  • Lines 25–29: Define the ACCOUNT dictionary containing the 'username' and 'password' keys
  • Line 32: Specifies the API['events'] endpoint target for the authenticated requests

The credentials remain separate from the request logic, allowing administrators to configure access without modifying the core get_data implementation. This separation also enables the bot to support modern GitHub authentication patterns, such as personal access tokens, by substituting the traditional password field.

Practical Usage Examples

Fetching Events with Username and Password

To retrieve GitHub events using the built-in authentication mechanism, populate the ACCOUNT dictionary and call get_data:

from script.github_bot.github_bot import get_data

# Configure credentials (typically set in the module's ACCOUNT dict)

ACCOUNT = {
    'username': 'my_github_user',
    'password': 'my_github_password'
}

# Retrieve the first page of received events

events = get_data(page=1)

print(events)  # Returns a list of event dictionaries

Migrating to Personal Access Tokens

While the script uses Basic Authentication, GitHub now recommends token-based access for enhanced security. You can adapt github_bot.py to use a personal access token without modifying the HTTP logic by placing the token in the password field:

ACCOUNT = {
    'username': '',
    'password': 'ghp_YourPersonalAccessToken'
}

Alternatively, some token implementations require the token as the username with an empty password:

ACCOUNT = {
    'username': 'ghp_YourPersonalAccessToken',
    'password': ''
}

Both approaches generate a valid Basic Auth header that GitHub's API accepts, treating the token as the authentication secret.

Integration with the HelloGitHub Workflow

The script/make_content/make_content.py file imports functions from github_bot.py to process the authenticated event data into email content. When get_data successfully authenticates and retrieves events, the make_content module filters and formats these entries for the HelloGitHub newsletter distribution. This pipeline depends on the Basic Authentication mechanism to ensure uninterrupted access to the GitHub Events API endpoint defined at API['events'].

Summary

  • The github_bot.py script uses HTTP Basic Authentication via the requests library to access the GitHub API
  • Credentials are passed as a tuple (username, password) to the auth parameter in requests.get() within the get_data function
  • The ACCOUNT dictionary (lines 25–29) and API['events'] endpoint (line 32) in script/github_bot/github_bot.py configure the authentication target
  • Personal access tokens are supported by substituting the token for the password while maintaining the same Basic Auth structure
  • The authentication mechanism enables the make_content.py module to generate newsletter content from live GitHub event data

Frequently Asked Questions

What authentication method does github_bot.py use for GitHub API requests?

The script implements HTTP Basic Authentication using the Python requests library. In the get_data function located in script/github_bot/github_bot.py, the code passes an auth tuple containing the username and password to requests.get(), which automatically generates the Authorization: Basic header required by the GitHub API.

Can I use a personal access token instead of a password with github_bot.py?

Yes. Although the script was originally designed for username-password authentication, you can use a GitHub personal access token by placing it in the password field of the ACCOUNT dictionary while leaving the username field empty (or vice versa, depending on your token configuration). The requests library will still encode this as a Basic Auth header, which GitHub accepts for token-based access.

Where are the GitHub API credentials stored in the HelloGitHub repository?

The credentials are stored in the ACCOUNT dictionary defined in script/github_bot/github_bot.py (lines 25–29). This dictionary contains 'username' and 'password' keys that the get_data function references when constructing authenticated requests to the API['events'] endpoint.

Is Basic Authentication secure for GitHub API automation?

Basic Authentication transmits credentials in every request (encoded but not encrypted), making it less secure than modern alternatives like OAuth or GitHub Apps. However, when used with personal access tokens rather than actual passwords, and combined with HTTPS (which GitHub requires), the risk is mitigated. For production environments, consider migrating to token-based authentication or GitHub Apps, though the current github_bot.py implementation supports tokens through the existing Basic Auth mechanism.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →