Skip to main content

Official Python SDK for LiteSOC - Security event tracking and threat detection

Project description

LiteSOC Python SDK

Official Python SDK for LiteSOC - Security event tracking and threat detection for your applications.

PyPI version Python Version License: MIT

Installation

pip install litesoc

Quick Start

from litesoc import LiteSOC

# Initialize the SDK
litesoc = LiteSOC(api_key="your-api-key")

# Track a login failure
litesoc.track("auth.login_failed",
    actor_id="user_123",
    actor_email="user@example.com",
    user_ip="192.168.1.1",
    metadata={"reason": "invalid_password"}
)

# Flush remaining events before shutdown
litesoc.flush()

Features

  • 50+ pre-defined security event types - Authentication, authorization, data access, and more
  • Automatic batching - Events are batched for efficient delivery
  • Retry logic - Failed events are automatically retried
  • Type hints - Full type annotations for IDE support
  • Thread-safe - Safe to use across multiple threads
  • Context manager support - Use with with statement for automatic cleanup

Configuration Options

from litesoc import LiteSOC

litesoc = LiteSOC(
    api_key="your-api-key",      # Required
    endpoint="https://...",       # Custom API endpoint
    batching=True,                # Enable event batching (default: True)
    batch_size=10,                # Events before auto-flush (default: 10)
    flush_interval=5.0,           # Seconds between auto-flushes (default: 5.0)
    debug=False,                  # Enable debug logging (default: False)
    silent=True,                  # Fail silently on errors (default: True)
    timeout=30.0,                 # Request timeout in seconds (default: 30.0)
)

Tracking Events

Basic Usage

# Track any event type
litesoc.track("auth.login_failed",
    actor_id="user_123",
    actor_email="user@example.com",
    user_ip="192.168.1.1"
)

Using Actor Object

from litesoc import LiteSOC, Actor

litesoc = LiteSOC(api_key="your-api-key")

actor = Actor(id="user_123", email="user@example.com")
litesoc.track("auth.login_success", actor=actor, user_ip="192.168.1.1")

With Severity Level

from litesoc import EventSeverity

litesoc.track("security.suspicious_activity",
    actor_id="user_123",
    user_ip="192.168.1.1",
    severity=EventSeverity.CRITICAL,
    metadata={"reason": "impossible travel detected"}
)

With Metadata

litesoc.track("data.export",
    actor_id="user_123",
    user_ip="192.168.1.1",
    metadata={
        "file_type": "csv",
        "record_count": 1000,
        "export_reason": "monthly_report"
    }
)

Convenience Methods

The SDK provides convenience methods for common security events:

# Track login failures
litesoc.track_login_failed("user_123", user_ip="192.168.1.1")

# Track login successes
litesoc.track_login_success("user_123", user_ip="192.168.1.1")

# Track privilege escalation (critical severity)
litesoc.track_privilege_escalation("admin_user", user_ip="192.168.1.1")

# Track sensitive data access (high severity)
litesoc.track_sensitive_access("user_123", "customer_pii_table", user_ip="192.168.1.1")

# Track bulk deletions (high severity)
litesoc.track_bulk_delete("admin_user", record_count=500, user_ip="192.168.1.1")

# Track role changes
litesoc.track_role_changed("user_123", old_role="viewer", new_role="admin", user_ip="192.168.1.1")

# Track access denied
litesoc.track_access_denied("user_123", resource="/admin/settings", user_ip="192.168.1.1")

Event Types

Authentication Events

  • auth.login_success
  • auth.login_failed
  • auth.logout
  • auth.password_changed
  • auth.password_reset_requested
  • auth.password_reset_completed
  • auth.mfa_enabled
  • auth.mfa_disabled
  • auth.mfa_challenge_success
  • auth.mfa_challenge_failed
  • auth.session_created
  • auth.session_revoked
  • auth.token_refreshed

User Events

  • user.created
  • user.updated
  • user.deleted
  • user.email_changed
  • user.email_verified
  • user.profile_updated

Authorization Events

  • authz.role_assigned
  • authz.role_removed
  • authz.role_changed
  • authz.permission_granted
  • authz.permission_revoked
  • authz.access_denied
  • authz.access_granted

Admin Events

  • admin.privilege_escalation
  • admin.user_impersonation
  • admin.settings_changed
  • admin.api_key_created
  • admin.api_key_revoked
  • admin.invite_sent
  • admin.invite_accepted
  • admin.member_removed

Data Events

  • data.export
  • data.import
  • data.bulk_delete
  • data.bulk_update
  • data.sensitive_access
  • data.download
  • data.upload
  • data.shared
  • data.unshared

Security Events

  • security.suspicious_activity
  • security.rate_limit_exceeded
  • security.ip_blocked
  • security.ip_unblocked
  • security.account_locked
  • security.account_unlocked
  • security.brute_force_detected
  • security.impossible_travel
  • security.geo_anomaly

API Events

  • api.key_used
  • api.rate_limited
  • api.error
  • api.webhook_sent
  • api.webhook_failed

Billing Events

  • billing.subscription_created
  • billing.subscription_updated
  • billing.subscription_cancelled
  • billing.payment_succeeded
  • billing.payment_failed

Framework Integration

Flask

from flask import Flask, request, g
from litesoc import LiteSOC

app = Flask(__name__)
litesoc = LiteSOC(api_key="your-api-key")

@app.route("/login", methods=["POST"])
def login():
    user_ip = request.headers.get("X-Forwarded-For", request.remote_addr)
    
    # Attempt authentication
    user = authenticate(request.form["email"], request.form["password"])
    
    if user:
        litesoc.track_login_success(user.id, actor_email=user.email, user_ip=user_ip)
        return {"success": True}
    else:
        litesoc.track_login_failed(request.form["email"], user_ip=user_ip)
        return {"success": False}, 401

Django

from django.contrib.auth.signals import user_logged_in, user_login_failed
from django.dispatch import receiver
from litesoc import LiteSOC

litesoc = LiteSOC(api_key="your-api-key")

@receiver(user_logged_in)
def track_login_success(sender, request, user, **kwargs):
    user_ip = request.META.get("HTTP_X_FORWARDED_FOR", request.META.get("REMOTE_ADDR"))
    litesoc.track_login_success(str(user.id), actor_email=user.email, user_ip=user_ip)

@receiver(user_login_failed)
def track_login_failure(sender, credentials, request, **kwargs):
    user_ip = request.META.get("HTTP_X_FORWARDED_FOR", request.META.get("REMOTE_ADDR"))
    litesoc.track_login_failed(credentials.get("username", "unknown"), user_ip=user_ip)

FastAPI

from fastapi import FastAPI, Request, Depends
from litesoc import LiteSOC

app = FastAPI()
litesoc = LiteSOC(api_key="your-api-key")

@app.post("/login")
async def login(request: Request, credentials: LoginRequest):
    user_ip = request.headers.get("X-Forwarded-For", request.client.host)
    
    user = await authenticate(credentials.email, credentials.password)
    
    if user:
        litesoc.track_login_success(user.id, actor_email=user.email, user_ip=user_ip)
        return {"success": True}
    else:
        litesoc.track_login_failed(credentials.email, user_ip=user_ip)
        raise HTTPException(status_code=401)

Context Manager Support

from litesoc import LiteSOC

with LiteSOC(api_key="your-api-key") as litesoc:
    litesoc.track("auth.login_success", actor_id="user_123")
    # Events are automatically flushed when exiting the context

Queue Management

# Get current queue size
queue_size = litesoc.get_queue_size()

# Manually flush all events
litesoc.flush()

# Clear queue without sending
litesoc.clear_queue()

# Graceful shutdown
litesoc.shutdown()

Error Handling

By default, the SDK fails silently (silent=True). To catch errors:

litesoc = LiteSOC(api_key="your-api-key", silent=False)

try:
    litesoc.track("auth.login_failed", actor_id="user_123")
    litesoc.flush()
except Exception as e:
    print(f"Failed to track event: {e}")

Debug Mode

Enable debug logging to troubleshoot issues:

litesoc = LiteSOC(api_key="your-api-key", debug=True)
# Logs will be printed to stdout

License

MIT License - see LICENSE for details.

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

litesoc-1.0.1.tar.gz (13.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

litesoc-1.0.1-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

Details for the file litesoc-1.0.1.tar.gz.

File metadata

  • Download URL: litesoc-1.0.1.tar.gz
  • Upload date:
  • Size: 13.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for litesoc-1.0.1.tar.gz
Algorithm Hash digest
SHA256 5415e55c6696ce2bf1a71653d066d62f2147a971801832f56d326adf1bce17fe
MD5 8ce308c7a0c14b41ced190890611ce40
BLAKE2b-256 156dba595ab9cd46ec74dd80a1674f1b66b887c6e2e43db6e712cb451bef66c8

See more details on using hashes here.

File details

Details for the file litesoc-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: litesoc-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 10.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for litesoc-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ea93b6b483fdfbdedf654c84a77c8e4df41ac9736d013c61f0c4f7c1bb44b2e4
MD5 d596c3eb6ebe9b00c38c07c4f0f852c6
BLAKE2b-256 215ba31bda32539d95a9bd496a238eb68443da27892e631938983b5f1796ef53

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page