Script to import wg.conf to wireguard-ui
This commit is contained in:
		
							parent
							
								
									1c73f6cfd4
								
							
						
					
					
						commit
						06cfefd451
					
				|  | @ -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…
	
		Reference in New Issue