Skip to main content

WireGuard Configuration API Client

Project description

WireGuard Configuration API Client

A comprehensive client library and CLI tool for interacting with the WireGuard Configuration Distribution API.

CI License PyPI version

Features

  • Complete API client for the WireGuard Configuration Distribution API
  • Command-line interface for all API operations
  • Automatic token authentication and renewal
  • Configuration file support
  • WireGuard keypair generation
  • WireGuard configuration file creation

Installation

From PyPI (Recommended)

pip install wg-api-client

From Source

git clone https://github.com/tiiuae/wg-api-client-lib.git
cd wg-api-client-lib
pip install -e .

Prerequisites for Ubuntu

sudo apt update
sudo apt install -y python3 python3-pip wireguard-tools

Usage

As a Command-Line Tool

The package installs a wg-api-client command that can be used to interact with the API:

# Show help
wg-api-client --help

# Authenticate with the API
wg-api-client auth

# Get a WireGuard configuration for a device
wg-api-client get-config --device-id drone-01 --output drone01.conf

As a Library

from wg_api_client import WireGuardAPI, WireGuardHelper

# Initialize the API client
api = WireGuardAPI(
    api_url="http://20.46.55.161:8080/api/v1",
    hashed_credential="your-hashed-credential"
)

# Authenticate
success, _ = api.authenticate()
if success:
    # Generate a keypair
    private_key, public_key = WireGuardHelper.generate_keypair()
    
    # Request a configuration
    success, config_data = api.request_wireguard_config(
        device_id="drone-01",
        role="drone",
        public_key=public_key
    )
    
    if success:
        # Create a configuration file
        WireGuardHelper.create_client_config(config_data, "drone01.conf")

Configuration

The tool stores configuration in ~/.wg_api_config by default. You can specify a different location with the --config-file parameter.

Available Commands

Global Parameters

These parameters can be used with any command:

  • --api-url: Base URL for the API (default: http://20.46.55.161:8080/api/v1)
  • --hashed-credential: Hashed credential for authentication
  • --config-file: Path to configuration file (default: ~/.wg_api_config)

Authentication

wg-api-client auth

This will:

  • Authenticate with the API using the hashed credential
  • Store the JWT token in the configuration file
  • Store the refresh token for automatic token renewal

Device Configuration Management

Get WireGuard Configuration

wg-api-client get-config --device-id DEVICE_ID [--role {drone|fmo}] [--public-key KEY] [--output FILE]

Parameters:

  • --device-id: Unique identifier for the device (required)
  • --role: Device role - either "drone" or "fmo" (default: "drone")
  • --public-key: WireGuard public key (if not provided, a new keypair will be generated)
  • --output: Output configuration file (default: "wg.conf")

Examples:

# Generate a new keypair and configuration for a drone device
wg-api-client get-config --device-id drone-01

# Use an existing public key and set role to FMO
wg-api-client get-config --device-id fmo-main --role fmo --public-key "AbCdEf123..." --output fmo.conf

List All Devices (Admin only)

wg-api-client list-devices

This will display detailed information about all devices, including:

  • Device ID
  • Role
  • IP address
  • Public key
  • Creation and update timestamps

Get Device Information (Admin only)

wg-api-client get-device DEVICE_ID

Delete a Device (Admin only)

wg-api-client delete-device DEVICE_ID

Delete All Devices (Admin only)

wg-api-client delete-all-devices [--confirm]

Use the --confirm flag to bypass the confirmation prompt.

FMO-specific Operations

Get FMO Device Information (Admin only)

wg-api-client get-fmo

Remove FMO Role (Admin only)

wg-api-client delete-fmo

Credential Management (Admin only)

Add a New Credential

wg-api-client add-credential --hashed-credential HASH [--role {user|admin}]

Parameters:

  • --hashed-credential: Hashed credential to add (required)
  • --role: Role for the credential - either "user" or "admin" (default: "user")

Examples of Common Workflows

Setting Up a New Drone Device

# Authenticate with the API
wg-api-client auth

# Generate a WireGuard configuration for the device
wg-api-client get-config --device-id drone-42 --output drone42.conf

# Transfer the generated configuration file to the device and apply it using the WireGuard tools

Setting Up an FMO Device

# Authenticate with the API
wg-api-client auth

# Check if there's already an FMO device
wg-api-client get-fmo

# If needed, remove the current FMO role
wg-api-client delete-fmo

# Generate a WireGuard configuration for the new FMO device
wg-api-client get-config --device-id fmo-new --role fmo --output fmo.conf

Administrator Tasks

# Check all registered devices
wg-api-client list-devices

# Add a new admin credential
wg-api-client add-credential --hashed-credential "your-hashed-credential" --role admin

# Clean up old devices
wg-api-client delete-device old-device-id

Development

Setup Development Environment

# Clone repository
git clone https://github.com/tiiuae/wg-api-client-lib.git
cd wg-api-client-lib

# Install development dependencies
pip install -r requirements-dev.txt

# Install in development mode
pip install -e .

Run Tests

pytest

Run Linters

# Format code with Black
black .

# Sort imports
isort .

# Check with pylint
pylint wg_api_client

# Check with mypy
mypy wg_api_client

# Security check with bandit
bandit -r wg_api_client

Publishing

This package is available on PyPI and can be automatically published through GitHub releases.

Automatic Publishing

  1. Update version numbers in:

    • wg_api_client/__init__.py (__version__ variable)
    • setup.py (version parameter)
  2. Create a new GitHub release:

    • Go to the GitHub repository
    • Click "Releases" → "Create a new release"
    • Tag version should be in format v{version} (e.g., v0.1.2)
    • The GitHub Action will automatically build and publish to PyPI

Manual Publishing

For detailed instructions on manual publishing, see PUBLISHING.md.

License

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

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

wg_api_client-0.1.3.tar.gz (14.2 kB view details)

Uploaded Source

Built Distribution

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

wg_api_client-0.1.3-py3-none-any.whl (13.7 kB view details)

Uploaded Python 3

File details

Details for the file wg_api_client-0.1.3.tar.gz.

File metadata

  • Download URL: wg_api_client-0.1.3.tar.gz
  • Upload date:
  • Size: 14.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.21

File hashes

Hashes for wg_api_client-0.1.3.tar.gz
Algorithm Hash digest
SHA256 a4ed3f25282c1f1781227e279660e25cf193bac9627885092a7b3e9e0a17f2ea
MD5 3475097fca17379e7654188da1f0ee73
BLAKE2b-256 ad99962205687855e915265bfcb5ea6dba286808a5afab67f2c2ab9d5c436aab

See more details on using hashes here.

File details

Details for the file wg_api_client-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: wg_api_client-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 13.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.21

File hashes

Hashes for wg_api_client-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 6c280a72fcae4407b599854bf6279430d56315118e8eed5deeb39cbd43ebfcee
MD5 7e2670736934ab0d991f2725d2448e1d
BLAKE2b-256 868d1f13222816dde95bc4173c6e2682ced3cfd30ea237e01a1148626b67e715

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