Generate iwd network profiles

* Addresses issue #162
This commit is contained in:
2Shirt 2021-03-25 23:39:48 -06:00
parent ba5efedb11
commit 1a70ad0c63
Signed by: 2Shirt
GPG key ID: 152FAC923B0E132C
4 changed files with 21 additions and 86 deletions

View file

@ -1,81 +0,0 @@
#!/bin/env python3
#
## Convert saved WiFi connections for NetworkManager
import os
import re
import sys
import uuid
KNOWN_NETWORKS = '/root/known_networks'
TEMPLATE = '''[connection]
id={ssid}
uuid={uuid}
type=wifi
permissions=user:{user}:;
[wifi]
mac-address-blacklist=
mode=infrastructure
ssid={ssid}
[wifi-security]
auth-alg=open
key-mgmt=wpa-psk
psk={password}
[ipv4]
dns-search=
method=auto
[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=auto
'''
def get_user_name():
"""Get user name, returns str."""
user = None
# Get running user
if 'SUDO_USER' in os.environ:
user = os.environ.get('SUDO_USER')
else:
user = os.environ.get('USER')
# Check if user manually specified
for a in sys.argv:
a = a.strip().lower()
if a.startswith('--user='):
user = a.replace('--user=', '')
return user
if __name__ == '__main__':
known_networks = {}
#try:
with open('/root/known_networks', 'r') as f:
for line in f.readlines():
r = re.search(r"^'(.*)':\s+'(.*)'", line.strip())
if r:
known_networks[r.group(1)] = r.group(2)
for ssid, password in known_networks.items():
out_path = '{}/{}.nmconnection'.format(
'/etc/NetworkManager/system-connections',
ssid,
)
if not os.path.exists(out_path):
with open(out_path, 'w') as f:
f.write(TEMPLATE.format(
user=get_user_name(),
ssid=ssid,
password=password,
uuid=uuid.uuid4(),
))
os.chmod(out_path, 0o600)
#except:
# # Meh
# pass
# vim: sts=2 sw=2 ts=2

View file

@ -227,9 +227,23 @@ function update_live_env() {
fi
# WiFi
# TODO
#cp "$ROOT_DIR/setup/linux/known_networks" "$PROFILE_DIR/airootfs/root/known_networks"
#echo "add-known-networks --user=$username" >> "$PROFILE_DIR/airootfs/root/customize_airootfs.sh"
IFS_BAK="${IFS}"
IFS=$'\n'
mkdir -p "$PROFILE_DIR/airootfs/var/lib/iwd"
for line in $(<"$ROOT_DIR/setup/linux/known_networks"); do
if [[ "${line:0:1}" == "#" ]]; then
# Skip comments
continue
fi
w_name="${line%%:::*}"
w_pass="${line##*:::}"
w_pass="$(wpa_passphrase "${w_name}" "${w_pass}" \
| grep -E 'psk=[0-9a-z]+' \
| sed -r 's/\s+psk=//')"
echo "[Security]" > "$PROFILE_DIR/airootfs/var/lib/iwd/${w_name}.psk"
echo "PreSharedKey=${w_pass}" >> "$PROFILE_DIR/airootfs/var/lib/iwd/${w_name}.psk"
done
IFS="${IFS_BAK}"
}
function update_repo() {

View file

@ -1,2 +1,3 @@
#Put WiFi network info here
#'WiFi SSID': 'WiFi Password'
# Put known WiFi networks in the form:
#SSID-5G:::Password
#SSID-2G:::hunter2

View file

@ -31,3 +31,4 @@ startup-notification
subversion
syslinux
tigervnc
wpa_supplicant