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.
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
-
Update version numbers in:
wg_api_client/__init__.py(__version__variable)setup.py(versionparameter)
-
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e8ea193f92251c333466535e4915f63975c1696f0c9bc995b8bfbad6f6d26fbe
|
|
| MD5 |
b8b5486412d32a83b49c5bd707a0a8ac
|
|
| BLAKE2b-256 |
89948a8ffc8cb2276152b650fe8e26775a123e6a155f8e0ad07970abdbbb3925
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d6b7c2a2fc95bbac802b643243ffa3c0f28099e5e4341cc3de0f2bc0c085a3ad
|
|
| MD5 |
ce31ea881ec6b66a058279601cbaca09
|
|
| BLAKE2b-256 |
d382a423911111513cc301c8b49360e5a09c983b871415b3868a99c03c7822ce
|