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-1.0.0.tar.gz (47.7 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-1.0.0-py3-none-any.whl (24.1 kB view details)

Uploaded Python 3

File details

Details for the file ad_user_manager-1.0.0.tar.gz.

File metadata

  • Download URL: ad_user_manager-1.0.0.tar.gz
  • Upload date:
  • Size: 47.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.12.1.2 readme-renderer/44.0 requests/2.32.4 requests-toolbelt/1.0.0 urllib3/2.4.0 tqdm/4.67.1 importlib-metadata/7.2.1 keyring/25.6.0 rfc3986/1.5.0 colorama/0.4.6 CPython/3.12.7

File hashes

Hashes for ad_user_manager-1.0.0.tar.gz
Algorithm Hash digest
SHA256 0f883b1e48295cabcf0a6ec49e9499821eb459638a9c743b84a3fdf39ddbcf7b
MD5 1131a26d47fd7ecaaa6edee871dfc242
BLAKE2b-256 ba610c40fd7b2832367f37b52bef9b9e71be3d6c449ab80cf512433c3c681d43

See more details on using hashes here.

File details

Details for the file ad_user_manager-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: ad_user_manager-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 24.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.12.1.2 readme-renderer/44.0 requests/2.32.4 requests-toolbelt/1.0.0 urllib3/2.4.0 tqdm/4.67.1 importlib-metadata/7.2.1 keyring/25.6.0 rfc3986/1.5.0 colorama/0.4.6 CPython/3.12.7

File hashes

Hashes for ad_user_manager-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 26624ac8b44de960f146d621e4085d03bd1ac95e8f877c1342b578ae74a83f47
MD5 3734434274f0a576372e0d65bc80a056
BLAKE2b-256 9b2fbbd998141f4261241429555773ef5631502f3b1145079f001733537884d7

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