mirror of
https://github.com/ngoduykhanh/wireguard-ui.git
synced 2025-06-07 00:46:58 +03:00
Script to import wg.conf to wireguard-ui
This commit is contained in:
parent
1c73f6cfd4
commit
06cfefd451
1 changed files with 98 additions and 0 deletions
98
import-wg-conf.py
Normal file
98
import-wg-conf.py
Normal file
|
@ -0,0 +1,98 @@
|
|||
# import wg0.conf to the database
|
||||
import sys
|
||||
import requests
|
||||
import json
|
||||
import configparser
|
||||
import re
|
||||
|
||||
# usage:
|
||||
# python import-wg-conf.py <wg0.conf> http://<ip>:<port> USER PASSWORD
|
||||
|
||||
# parse the command line
|
||||
if len(sys.argv) != 5:
|
||||
print("Usage: python import-wg-conf.py <wg0.conf> http://<ip>:<port> USER PASSWORD")
|
||||
sys.exit(1)
|
||||
|
||||
# read the config file
|
||||
with open(sys.argv[1], 'r') as f:
|
||||
config_str = f.read()
|
||||
|
||||
# we need to use a trick:
|
||||
# - toml can't parse the IP address
|
||||
# - configparser will complain about multiple Peer sections
|
||||
# we will replace [Peer] with [Peer1], [Peer2], etc.
|
||||
|
||||
# first, count the number of peers
|
||||
peers = re.findall(r'\[Peer\]', config_str)
|
||||
num_peers = len(peers)
|
||||
# then replace [Peer] with [Peer1], [Peer2], etc.
|
||||
for i in range(num_peers):
|
||||
config_str = config_str.replace('[Peer]', '[Peer' + str(i+1) + ']', 1)
|
||||
|
||||
# remove the comment from '# friendly_name = ' line
|
||||
config_str = config_str.replace('# friendly_name = ', 'friendly_name = ')
|
||||
|
||||
# parse the config file
|
||||
config = configparser.ConfigParser()
|
||||
config.read_string(config_str)
|
||||
|
||||
# iterate the sections
|
||||
for section in config.sections():
|
||||
# print header
|
||||
print('[' + section + ']')
|
||||
# iterate the options
|
||||
for option in config.options(section):
|
||||
print(option + ' = ' + config[section][option])
|
||||
print('')
|
||||
|
||||
# login to the API
|
||||
|
||||
login_data = {
|
||||
'username': sys.argv[3],
|
||||
'password': sys.argv[4],
|
||||
}
|
||||
|
||||
session = requests.Session()
|
||||
|
||||
response = session.post(sys.argv[2] + '/login', json=login_data)
|
||||
|
||||
|
||||
# add the peers to wireguard-ui
|
||||
|
||||
# iterate the sections
|
||||
for section in config.sections():
|
||||
#if starts with "Peer"
|
||||
if not section.startswith('Peer'):
|
||||
continue
|
||||
|
||||
newclient_data = {
|
||||
'name': 'clientname',
|
||||
'email': '',
|
||||
'allocated_ips': [
|
||||
],
|
||||
'allowed_ips': [
|
||||
'10.123.0.0/24',
|
||||
'172.16.0.0/12'
|
||||
],
|
||||
'extra_allowed_ips': [],
|
||||
'use_server_dns': True,
|
||||
'enabled': True,
|
||||
'public_key': '',
|
||||
'preshared_key': '',
|
||||
}
|
||||
|
||||
for option in config.options(section):
|
||||
if option == 'friendly_name':
|
||||
newclient_data['name'] = config[section][option]
|
||||
elif option == 'allowedips':
|
||||
# this will become AllowedIPs in the configuration file
|
||||
newclient_data['allocated_ips'] = config[section][option].split(',')
|
||||
elif option == 'publickey':
|
||||
newclient_data['public_key'] = config[section][option]
|
||||
elif option == 'presharedkey':
|
||||
newclient_data['preshared_key'] = config[section][option]
|
||||
|
||||
response = session.post('http://localhost:5000/new-client', json=newclient_data)
|
||||
print(response.text)
|
||||
#break
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue