A Python library for securely retrieving GitHub tokens from system keychains across different operating systems.
- Cross-platform support:
- macOS: Uses Keychain Access
- Windows: Uses Credential Manager
- Linux: Uses libsecret
- Secure token retrieval with validation
- Comprehensive exception hierarchy for precise error handling
- Structured logging support
- Token format validation (supports personal, organization, and fine-grained tokens)
- Robust credential parsing and sanitization
- Python 3.9 or higher
- Git (with credentials configured)
# Ubuntu/Debian
sudo apt-get install libsecret-tools
# Fedora
sudo dnf install libsecretpip install githubauthlib# Clone the repository
git clone https://github.com/GIALaboratory/cloud-platform-engineering.git
# Navigate to the library directory
cd cloud-platform-engineering/githubauthlib
# Install the package
pip install .from githubauthlib import (
get_github_token,
GitHubAuthError,
TokenNotFoundError,
InvalidTokenError,
PlatformNotSupportedError,
CredentialHelperError
)
try:
token = get_github_token()
print("Token retrieved successfully!")
print(f"Token: {token[:10]}...") # Show first 10 chars only
except TokenNotFoundError:
print("No GitHub token found in system keychain")
except InvalidTokenError:
print("Invalid token format detected")
except PlatformNotSupportedError:
print("Current platform is not supported")
except CredentialHelperError:
print("Failed to access system credential store")
except GitHubAuthError as e:
print(f"GitHub authentication error: {e}")# Check installed version
pip list | grep githubauthlib
# View package details
pip show githubauthlibFor development, you may want to add the package directory to your PYTHONPATH. See AUXILIARY.md for detailed instructions.
get_github_token()now raises specific exceptions instead of returningNone- All error handling now uses structured logging instead of print statements
- Token validation is now strict and validates format
- Python 3.6, 3.7, and 3.8 support has been removed (EOL)
Before (v1.x.x):
token = get_github_token()
if token:
print("Success!")
else:
print("Failed!")After (v2.0.0):
try:
token = get_github_token()
print("Success!")
except TokenNotFoundError:
print("No token found!")
except GitHubAuthError as e:
print(f"Error: {e}")-
Token Not Found
- Verify Git credentials are properly configured
- Check system keychain for GitHub credentials
- Handle
TokenNotFoundErrorexception
-
Permission Issues
- Ensure proper system keychain access
- Verify Python has required permissions
- Handle
CredentialHelperErrorexception
-
Linux Issues
- Confirm libsecret-tools is installed
- Check D-Bus session is running
- Handle
PlatformNotSupportedErrorexception
-
Invalid Token Format
- Verify token starts with
ghp_(personal),gho_(organization), orgithub_pat_(fine-grained) - Handle
InvalidTokenErrorexception
- Verify token starts with
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.