Files
claudetools/CREDENTIAL_SCANNER_QUICK_REF.md
Mike Swanson 390b10b32c Complete Phase 6: MSP Work Tracking with Context Recall System
Implements production-ready MSP platform with cross-machine persistent memory for Claude.

API Implementation:
- 130 REST API endpoints across 21 entities
- JWT authentication on all endpoints
- AES-256-GCM encryption for credentials
- Automatic audit logging
- Complete OpenAPI documentation

Database:
- 43 tables in MariaDB (172.16.3.20:3306)
- 42 SQLAlchemy models with modern 2.0 syntax
- Full Alembic migration system
- 99.1% CRUD test pass rate

Context Recall System (Phase 6):
- Cross-machine persistent memory via database
- Automatic context injection via Claude Code hooks
- Automatic context saving after task completion
- 90-95% token reduction with compression utilities
- Relevance scoring with time decay
- Tag-based semantic search
- One-command setup script

Security Features:
- JWT tokens with Argon2 password hashing
- AES-256-GCM encryption for all sensitive data
- Comprehensive audit trail for credentials
- HMAC tamper detection
- Secure configuration management

Test Results:
- Phase 3: 38/38 CRUD tests passing (100%)
- Phase 4: 34/35 core API tests passing (97.1%)
- Phase 5: 62/62 extended API tests passing (100%)
- Phase 6: 10/10 compression tests passing (100%)
- Overall: 144/145 tests passing (99.3%)

Documentation:
- Comprehensive architecture guides
- Setup automation scripts
- API documentation at /api/docs
- Complete test reports
- Troubleshooting guides

Project Status: 95% Complete (Production-Ready)
Phase 7 (optional work context APIs) remains for future enhancement.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 06:00:26 -07:00

4.2 KiB

Credential Scanner Quick Reference

Module: api/utils/credential_scanner Purpose: Import credentials from files to database with auto-encryption


Quick Start

from api.database import SessionLocal
from api.utils.credential_scanner import scan_and_import_credentials

db = SessionLocal()
try:
    results = scan_and_import_credentials(
        base_path="C:/Projects/MyClient",
        db=db,
        client_id="uuid-here"  # Optional
    )
    print(f"Imported: {results['credentials_imported']}")
finally:
    db.close()

Functions

1. scan_for_credential_files(base_path)

Find all credential files in directory tree.

Returns: List[str] - File paths

Finds:

  • credentials.md, credentials.txt
  • passwords.md, passwords.txt
  • .env, .env.local, .env.production
  • secrets.md, auth.md

2. parse_credential_file(file_path)

Parse credentials from a file.

Returns: List[Dict] - Credential dictionaries

Example output:

[
    {
        "service_name": "Gitea Admin",
        "credential_type": "password",
        "username": "admin",
        "password": "SecurePass123!"
    },
    ...
]

3. import_credentials_to_db(db, credentials, client_id=None, user_id="system_import")

Import credentials with auto-encryption.

Returns: int - Count of imported credentials

Features:

  • Auto-encrypts sensitive fields (AES-256-GCM)
  • Creates audit log entries
  • Never logs plaintext values
  • Continues on errors

4. scan_and_import_credentials(base_path, db, client_id=None, user_id="system_import")

Complete workflow in one call.

Returns: Dict[str, int]

{
    "files_found": 3,
    "credentials_parsed": 8,
    "credentials_imported": 8
}

File Formats

Markdown (.md)

## Service Name
Username: admin
Password: secret123
API Key: sk-1234567890
URL: https://example.com
Notes: Additional info

Environment (.env)

DATABASE_URL=mysql://user:pass@host/db
API_KEY=sk-1234567890
SECRET_TOKEN=abc123def456

Text (.txt)

Same as Markdown format


Credential Types Auto-Detected

Value Pattern Type Field
sk-* api_key api_key
ghp_* api_key api_key
mysql://... connection_string connection_string
-----BEGIN... ssh_key password
JWT (3 parts) jwt token
Default password password

Security

Encryption: AES-256-GCM via credential_service Audit: Every import logged to credential_audit_log Logging: Never logs plaintext credentials


Command Line

# Preview
python example_credential_import.py /path --preview

# Import
python example_credential_import.py /path --client-id "uuid"

Common Workflows

Import from Client Directory

db = SessionLocal()
try:
    results = scan_and_import_credentials(
        "C:/Projects/ClientA",
        db,
        client_id="client-uuid"
    )
finally:
    db.close()

Preview Before Import

files = scan_for_credential_files("/path")
for f in files:
    creds = parse_credential_file(f)
    print(f"{f}: {len(creds)} credentials")

Import with Error Handling

files = scan_for_credential_files("/path")
for file_path in files:
    try:
        creds = parse_credential_file(file_path)
        count = import_credentials_to_db(db, creds)
        print(f"✓ {count} from {file_path}")
    except Exception as e:
        print(f"✗ Failed: {e}")

Testing

python test_credential_scanner.py
# All 5 tests should pass

Documentation

  • Full Guide: CREDENTIAL_SCANNER_GUIDE.md
  • Summary: CREDENTIAL_SCANNER_SUMMARY.md
  • Examples: example_credential_import.py
  • Tests: test_credential_scanner.py

Troubleshooting

No files found?

  • Check base_path exists
  • Verify file names match patterns
  • Ensure not in excluded dirs (.git, node_modules)

Parsing errors?

  • Verify file format (headers, key:value pairs)
  • Check UTF-8 encoding
  • Ensure recognized key names

Import fails?

  • Check database connection
  • Verify ENCRYPTION_KEY set
  • Check client_id exists (if provided)

Quick Help: See CREDENTIAL_SCANNER_GUIDE.md for complete documentation