Skip to main content

Modern Active Directory user management tool with conflict resolution

Project description

AD User Manager

Python Version License

Modern Active Directory user management tool with conflict resolution, supporting both domain controller (PowerShell) and remote LDAP operations.

Features

  • Dual Operation Modes: PowerShell on domain controllers for optimal performance, LDAP for remote connections
  • Automatic Conflict Resolution: Intelligent username conflict detection and resolution
  • Type-Safe Configuration: Pydantic-based configuration with validation
  • Rich CLI Interface: Beautiful command-line interface with progress indicators
  • Structured Logging: JSON and console logging with contextual information
  • Modern Python: Built for Python 3.12+ with type hints and async support

Installation

pip install ad-user-manager

Quick Start

Domain Controller Mode (Recommended)

When running directly on a domain controller, the tool automatically uses PowerShell for optimal performance:

from ad_user_manager import ADConfig, DCServerConfig, create_ad_manager

# Configure for domain controller
config = ADConfig(
    server=DCServerConfig(
        connection_type="domain_controller",
        base_dn="CN=Users,DC=example,DC=com",
        use_current_credentials=True  # Use current user's AD credentials
    )
)

# Create user
with create_ad_manager(config) as manager:
    result = manager.create_user(
        username="jdoe",
        first_name="John",
        last_name="Doe",
        email="john.doe@example.com",
        resolve_conflicts=True
    )
    print(f"Created user: {result.username}")

LDAP Mode (Remote Connections)

For remote connections to Active Directory:

from ad_user_manager import ADConfig, LDAPServerConfig, create_ad_manager

# Configure for LDAP connection
config = ADConfig(
    server=LDAPServerConfig(
        connection_type="ldap",
        host="dc.example.com",
        port=389,
        use_ssl=False,
        bind_dn="CN=service-account,CN=Users,DC=example,DC=com",
        bind_password="your-password",
        base_dn="CN=Users,DC=example,DC=com"
    )
)

# Create user
with create_ad_manager(config) as manager:
    result = manager.create_user(
        username="jsmith",
        first_name="Jane",
        last_name="Smith",
        email="jane.smith@example.com"
    )

CLI Usage

Create a User

# Domain controller mode
ad-user-manager create-user -u jdoe -f John -l Doe -e john.doe@example.com

# With conflict resolution
ad-user-manager create-user -u jdoe -f John -l Doe -e john.doe@example.com --resolve-conflicts

# Dry run mode
ad-user-manager create-user -u jdoe -f John -l Doe -e john.doe@example.com --dry-run

Search for a User

ad-user-manager search-user -u jdoe

Test Connection

ad-user-manager test-connection

Generate Username Suggestions

ad-user-manager suggest-usernames -f John -l Doe

Configuration

Environment Variables

# LDAP Configuration
export AD_CONNECTION_TYPE=ldap
export AD_HOST=dc.example.com
export AD_PORT=389
export AD_USE_SSL=false
export AD_BIND_DN="CN=service-account,CN=Users,DC=example,DC=com"
export AD_BIND_PASSWORD="your-password"
export AD_BASE_DN="CN=Users,DC=example,DC=com"

# Domain Controller Configuration
export AD_CONNECTION_TYPE=domain_controller
export AD_BASE_DN="CN=Users,DC=example,DC=com"
export AD_USE_CURRENT_CREDENTIALS=true

Configuration File

Create a .env file or use environment variables:

# For LDAP mode
AD_CONNECTION_TYPE=ldap
AD_HOST=dc.example.com
AD_BIND_DN=CN=service-account,CN=Users,DC=example,DC=com
AD_BIND_PASSWORD=your-password
AD_BASE_DN=CN=Users,DC=example,DC=com

# For DC mode
AD_CONNECTION_TYPE=domain_controller
AD_BASE_DN=CN=Users,DC=example,DC=com
AD_USE_CURRENT_CREDENTIALS=true

Advanced Features

Conflict Resolution

The tool automatically detects username conflicts and generates alternatives:

# Automatic conflict resolution
result = manager.create_user(
    username="jdoe",  # If exists, might become "jdoe1", "jdoe2", etc.
    first_name="John",
    last_name="Doe",
    email="john.doe@example.com",
    resolve_conflicts=True
)
print(f"Final username: {result.username}")
print(f"Conflicts resolved: {result.conflicts_resolved}")

Custom Attributes

result = manager.create_user(
    username="jdoe",
    first_name="John",
    last_name="Doe",
    email="john.doe@example.com",
    additional_attributes={
        "department": "Engineering",
        "title": "Software Developer",
        "telephoneNumber": "+1-555-0123"
    }
)

Logging Configuration

config = ADConfig(
    server=your_server_config,
    log_level="DEBUG",  # DEBUG, INFO, WARNING, ERROR, CRITICAL
    log_format="json"   # "json" or "console"
)

Development

Setup

git clone https://github.com/your-org/ad-user-manager.git
cd ad-user-manager
pip install -e ".[dev]"

Running Tests

pytest

Code Quality

# Linting
ruff check .

# Formatting
black .

# Type checking
mypy .

Architecture

The project is organized into focused modules:

  • models.py - Data models and configuration schemas
  • powershell_manager.py - PowerShell-based AD operations (DC mode)
  • ldap_manager.py - LDAP-based AD operations (remote mode)
  • factory.py - Manager creation and auto-detection
  • config.py - Configuration management
  • validators.py - Input validation and conflict resolution
  • exceptions.py - Custom exception hierarchy
  • cli.py - Command-line interface
  • utils.py - Utility functions

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests for new functionality
  5. Run the test suite
  6. Submit a pull request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support

For issues, feature requests, or questions:

  1. Check the GitHub Issues
  2. Create a new issue with detailed information
  3. Include configuration (without sensitive data) and error messages

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

ad_user_manager-0.1.0a11.tar.gz (32.4 kB view details)

Uploaded Source

Built Distribution

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

ad_user_manager-0.1.0a11-py3-none-any.whl (21.1 kB view details)

Uploaded Python 3

File details

Details for the file ad_user_manager-0.1.0a11.tar.gz.

File metadata

  • Download URL: ad_user_manager-0.1.0a11.tar.gz
  • Upload date:
  • Size: 32.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for ad_user_manager-0.1.0a11.tar.gz
Algorithm Hash digest
SHA256 0905454d867aa96cd9d8b30e3fca6a787b88224192c086049dcd5d86319a9170
MD5 00ec8ce50794f53cdb38b8f61e4205c7
BLAKE2b-256 42fc4477268bf30808d1e3c6b1e88f27c9e447bdf762e322fd303fce5187b8d3

See more details on using hashes here.

Provenance

The following attestation bundles were made for ad_user_manager-0.1.0a11.tar.gz:

Publisher: pypi-publish.yml on VinnyVanGogh/py-ad-user-mgr

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ad_user_manager-0.1.0a11-py3-none-any.whl.

File metadata

File hashes

Hashes for ad_user_manager-0.1.0a11-py3-none-any.whl
Algorithm Hash digest
SHA256 747f218b23ba0afa703e9d5d4ccb0ccd11879eb81dfdf8f4baded81eaee6b425
MD5 57aef07491df56d1a79881b9f612326d
BLAKE2b-256 5c52f349914f5904aaea09238bf42742d12a27ce1e49a9487174bcfbca7188d8

See more details on using hashes here.

Provenance

The following attestation bundles were made for ad_user_manager-0.1.0a11-py3-none-any.whl:

Publisher: pypi-publish.yml on VinnyVanGogh/py-ad-user-mgr

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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