TISbackup/libtisbackup
k3nny f12d89f3da feat(auth): add pluggable authentication system for Flask routes
Implement comprehensive authentication system with support for
Basic Auth, Flask-Login, and OAuth2 providers.

Features:
- Pluggable architecture via factory pattern
- Multiple authentication providers:
  * None: No authentication (development/testing)
  * Basic Auth: HTTP Basic with bcrypt support
  * Flask-Login: Session-based with multiple users
  * OAuth2: Google, GitHub, GitLab, and generic providers
- Decorator-based route protection (@auth.require_auth)
- User authorization by domain or email (OAuth)
- bcrypt password hashing support
- Comprehensive documentation and examples

Components:
- libtisbackup/auth/__init__.py: Factory function and exports
- libtisbackup/auth/base.py: Base provider interface
- libtisbackup/auth/basic_auth.py: HTTP Basic Auth implementation
- libtisbackup/auth/flask_login_auth.py: Flask-Login implementation
- libtisbackup/auth/oauth_auth.py: OAuth2 implementation
- libtisbackup/auth/example_integration.py: Integration examples
- libtisbackup/auth/README.md: API reference and examples

Documentation:
- AUTHENTICATION.md: Complete authentication guide
  * Setup instructions for each provider
  * Configuration examples
  * Security best practices
  * Troubleshooting guide
  * Migration guide
- samples/auth-config-examples.ini: Configuration templates

Dependencies:
- Add optional dependencies in pyproject.toml:
  * auth-basic: bcrypt>=4.0.0
  * auth-login: flask-login>=0.6.0, bcrypt>=4.0.0
  * auth-oauth: authlib>=1.3.0, requests>=2.32.0
  * auth-all: All auth providers

Installation:
```bash
# Install specific provider
uv sync --extra auth-basic

# Install all providers
uv sync --extra auth-all
```

Usage:
```python
from libtisbackup.auth import get_auth_provider

# Initialize
auth = get_auth_provider("basic", {
    "username": "admin",
    "password": "$2b$12$...",
    "use_bcrypt": True
})
auth.init_app(app)

# Protect routes
@app.route("/")
@auth.require_auth
def index():
    user = auth.get_current_user()
    return f"Hello {user['username']}"
```

Security features:
- bcrypt password hashing (work factor 12)
- OAuth domain/user restrictions
- Session-based authentication
- Clear separation of concerns
- Environment variable support for secrets

OAuth providers supported:
- Google (OpenID Connect)
- GitHub
- GitLab
- Generic OAuth2 provider

Breaking change: None - new feature, backward compatible
Users can continue without authentication (type=none)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-05 02:02:46 +02:00
..
auth feat(auth): add pluggable authentication system for Flask routes 2025-10-05 02:02:46 +02:00
iniparse fix(tisbackup): fix iniparse wrong check 2025-04-14 23:37:16 +02:00
__init__.py EOF & whitespace 2024-11-29 00:54:09 +01:00
backup_mysql.py feat(security): modernize SSH key algorithm support with Ed25519 2025-10-05 01:39:17 +02:00
backup_null.py fix iniparse 2024-11-29 23:45:40 +01:00
backup_oracle.py feat(security): modernize SSH key algorithm support with Ed25519 2025-10-05 01:39:17 +02:00
backup_pgsql.py feat(security): modernize SSH key algorithm support with Ed25519 2025-10-05 01:39:17 +02:00
backup_rsync_btrfs.py Fix re.compile / re.match warnings 2025-03-07 22:51:20 +01:00
backup_rsync.py Fix re.compile / re.match warnings 2025-03-07 22:51:20 +01:00
backup_samba4.py feat(security): modernize SSH key algorithm support with Ed25519 2025-10-05 01:39:17 +02:00
backup_sqlserver.py feat(security): modernize SSH key algorithm support with Ed25519 2025-10-05 01:39:17 +02:00
backup_switch.py Fix re.compile / re.match warnings 2025-03-07 22:51:20 +01:00
backup_vmdk.py fix iniparse 2024-11-29 23:45:40 +01:00
backup_xcp_metadata.py Fix re.compile / re.match warnings 2025-03-07 22:51:20 +01:00
backup_xva.py fix(security): replace os.popen/os.system with subprocess for command injection prevention 2025-10-05 01:23:53 +02:00
common.py feat(security): modernize SSH key algorithm support with Ed25519 2025-10-05 01:39:17 +02:00
copy_vm_xcp.py fix iniparse 2024-11-29 23:45:40 +01:00
XenAPI.py fix iniparse 2024-11-29 23:45:40 +01:00