# Timmy Home Timmy Foundation's home repository for development operations and configurations. ## Security ### Pre-commit Hook for Secret Detection This repository includes a pre-commit hook that automatically scans for secrets (API keys, tokens, passwords) before allowing commits. #### Setup Install pre-commit hooks: ```bash pip install pre-commit pre-commit install ``` #### What Gets Scanned The hook detects: - **API Keys**: OpenAI (`sk-*`), Anthropic (`sk-ant-*`), AWS, Stripe - **Private Keys**: RSA, DSA, EC, OpenSSH private keys - **Tokens**: GitHub (`ghp_*`), Gitea, Slack, Telegram, JWT, Bearer tokens - **Database URLs**: Connection strings with embedded credentials - **Passwords**: Hardcoded passwords in configuration files #### How It Works Before each commit, the hook: 1. Scans all staged text files 2. Checks against patterns for common secret formats 3. Reports any potential secrets found 4. Blocks the commit if secrets are detected #### Handling False Positives If the hook flags something that is not actually a secret (e.g., test fixtures, placeholder values), you can: **Option 1: Add an exclusion marker to the line** ```python # Add one of these markers to the end of the line: api_key = "sk-test123" # pragma: allowlist secret api_key = "sk-test123" # noqa: secret api_key = "sk-test123" # secret-detection:ignore ``` **Option 2: Use placeholder values (auto-excluded)** These patterns are automatically excluded: - `changeme`, `password`, `123456`, `admin` (common defaults) - Values containing `fake_`, `test_`, `dummy_`, `example_`, `placeholder_` - URLs with `localhost` or `127.0.0.1` **Option 3: Skip the hook (emergency only)** ```bash git commit --no-verify # Bypasses all pre-commit hooks ``` ⚠️ **Warning**: Only use `--no-verify` if you are certain no real secrets are being committed. #### CI/CD Integration The secret detection script can also be run in CI/CD: ```bash # Scan specific files python3 scripts/detect_secrets.py file1.py file2.yaml # Scan with verbose output python3 scripts/detect_secrets.py --verbose src/ # Run tests python3 tests/test_secret_detection.py ``` #### Excluded Files The following are automatically excluded from scanning: - Markdown files (`.md`) - Lock files (`package-lock.json`, `poetry.lock`, `yarn.lock`) - Image and font files - `node_modules/`, `__pycache__/`, `.git/` #### Testing the Detection To verify the detection works: ```bash # Run the test suite python3 tests/test_secret_detection.py # Test with a specific file echo "API_KEY=sk-test123456789" > /tmp/test_secret.py python3 scripts/detect_secrets.py /tmp/test_secret.py # Should report: OpenAI API key detected ``` ## Development ### Running Tests ```bash # Run secret detection tests python3 tests/test_secret_detection.py # Run all tests pytest tests/ ``` ### Project Structure ``` . ├── .pre-commit-hooks.yaml # Pre-commit configuration ├── scripts/ │ └── detect_secrets.py # Secret detection script ├── tests/ │ └── test_secret_detection.py # Test cases └── README.md # This file ``` ## Contributing See [CONTRIBUTING.md](CONTRIBUTING.md) for contribution guidelines. ## License This project is part of the Timmy Foundation.