111 lines
2.3 KiB
Bash
111 lines
2.3 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# ============================================
|
|
# Lifecycle
|
|
# ============================================
|
|
|
|
function keys::on_load() {
|
|
system::require_command wg
|
|
system::require_command qrencode
|
|
}
|
|
|
|
# ============================================
|
|
# Generation
|
|
# ============================================
|
|
|
|
function keys::generate_pair() {
|
|
local name="$1"
|
|
local dir
|
|
dir="$(ctx::clients)"
|
|
|
|
local private_key_file="${dir}/${name}_private.key"
|
|
local public_key_file="${dir}/${name}_public.key"
|
|
|
|
if [[ -f "$private_key_file" ]] || [[ -f "$public_key_file" ]]; then
|
|
log::wg_warning "Keys already exist for client: ${name}"
|
|
return 1
|
|
fi
|
|
|
|
wg genkey | tee "$private_key_file" | wg pubkey > "$public_key_file"
|
|
chmod 600 "$private_key_file"
|
|
|
|
log::wg_key "Generated key pair for: ${name}"
|
|
}
|
|
|
|
function keys::private() {
|
|
local name="$1"
|
|
local file
|
|
file="$(ctx::clients)/${name}_private.key"
|
|
|
|
if [[ ! -f "$file" ]]; then
|
|
log::error "Private key not found for: ${name}"
|
|
return 1
|
|
fi
|
|
|
|
cat "$file"
|
|
}
|
|
|
|
function keys::public() {
|
|
local name="$1"
|
|
local file
|
|
file="$(ctx::clients)/${name}_public.key"
|
|
|
|
if [[ ! -f "$file" ]]; then
|
|
log::error "Public key not found for: ${name}"
|
|
return 1
|
|
fi
|
|
|
|
cat "$file"
|
|
}
|
|
|
|
# ============================================
|
|
# Query
|
|
# ============================================
|
|
|
|
function keys::find_by_public() {
|
|
local public_key="$1"
|
|
local clients_dir
|
|
clients_dir="$(ctx::clients)"
|
|
|
|
for pubkey_file in "${clients_dir}"/*_public.key; do
|
|
[[ -f "$pubkey_file" ]] || continue
|
|
if [[ "$(cat "$pubkey_file")" == "$public_key" ]]; then
|
|
basename "$pubkey_file" _public.key
|
|
return 0
|
|
fi
|
|
done
|
|
return 1
|
|
}
|
|
|
|
# ============================================
|
|
# Removal
|
|
# ============================================
|
|
|
|
function keys::remove() {
|
|
local name="$1"
|
|
local dir
|
|
dir="$(ctx::clients)"
|
|
|
|
rm -f "${dir}/${name}_private.key"
|
|
rm -f "${dir}/${name}_public.key"
|
|
|
|
log::wg_key "Removed keys for: ${name}"
|
|
}
|
|
|
|
# ============================================
|
|
# QR Code
|
|
# ============================================
|
|
|
|
function keys::qr() {
|
|
local name="$1"
|
|
local conf
|
|
conf="$(ctx::clients)/${name}.conf"
|
|
|
|
if [[ ! -f "$conf" ]]; then
|
|
log::error "Client config not found: ${name}"
|
|
return 1
|
|
fi
|
|
|
|
log::wg_qr "QR code for: ${name}"
|
|
qrencode -t ansiutf8 < "$conf"
|
|
}
|