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.2.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.2-py3-none-any.whl (13.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: wg_api_client-0.1.2.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.2.tar.gz
Algorithm Hash digest
SHA256 e8ea193f92251c333466535e4915f63975c1696f0c9bc995b8bfbad6f6d26fbe
MD5 b8b5486412d32a83b49c5bd707a0a8ac
BLAKE2b-256 89948a8ffc8cb2276152b650fe8e26775a123e6a155f8e0ad07970abdbbb3925

See more details on using hashes here.

File details

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

File metadata

  • Download URL: wg_api_client-0.1.2-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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d6b7c2a2fc95bbac802b643243ffa3c0f28099e5e4341cc3de0f2bc0c085a3ad
MD5 ce31ea881ec6b66a058279601cbaca09
BLAKE2b-256 d382a423911111513cc301c8b49360e5a09c983b871415b3868a99c03c7822ce

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