Compare commits

...

4 Commits
v1.0.4 ... main

Author SHA1 Message Date
b662d82ae3 🐛 use echo, lib log not loaded 2024-09-12 20:12:08 +02:00
bad40c1d1a 💄 use alert boxes for notes 2024-09-07 13:25:07 +02:00
bd099af12f 🥅 catch file disappearing right before reading 2024-09-02 21:53:44 +02:00
c794049d19 🐛 fix regex precedence (fix #1)
All checks were successful
Release / Build and publish Docker images (push) Successful in 1m8s
Release / Create Gitea release (push) Successful in 6s
2024-08-27 22:39:12 +02:00
3 changed files with 10 additions and 7 deletions

View File

@ -25,7 +25,8 @@ services:
$ docker compose up -d $ docker compose up -d
``` ```
> ▶️ For both variants, persistent config and key files will be stored in the `./data` directory. Feel free to change this to your needs. > [!TIP]
> For both variants, persistent config and key files will be stored in the `./data` directory. Feel free to change this to your needs.
## Client Management ## Client Management
Generate new client keys and output its config: Generate new client keys and output its config:
@ -43,4 +44,5 @@ Revoke a client's keys:
$ docker compose exec main clientmgmt revoke $ docker compose exec main clientmgmt revoke
``` ```
> ▶️ If you are using docker run, replace `docker compose exec main` with `docker exec -it openvpn`. > [!NOTE]
> If you are using docker run, replace `docker compose exec main` with `docker exec -it openvpn`.

View File

@ -96,14 +96,14 @@ clientmgmt_add(){
# ask whether auto-detection should be used # ask whether auto-detection should be used
local answer="x" local answer="x"
local first=0 local first=0
until [[ -z "$answer" || "$answer" =~ ^Y|y|N|n$ ]]; do until [[ -z "$answer" || "$answer" =~ ^(Y|y|N|n)$ ]]; do
[[ "$first" -le 0 ]] && first=1 || echo "Invalid answer '$answer'" [[ "$first" -le 0 ]] && first=1 || echo "Invalid answer '$answer'"
read -ep "Auto-detect public IP-Address using icanhazip.com? [Y/n]: " answer read -ep "Auto-detect public IP-Address using icanhazip.com? [Y/n]: " answer
done done
# maybe do auto-detection # maybe do auto-detection
local public_ip="" local public_ip=""
if [[ ! "$answer" =~ ^N|n$ ]]; then if [[ ! "$answer" =~ ^(N|n)$ ]]; then
local exit=0 local exit=0
local icanhazip local icanhazip
icanhazip=$(wget -O - -q icanhazip.com) || exit=$? icanhazip=$(wget -O - -q icanhazip.com) || exit=$?
@ -307,7 +307,7 @@ clientmgmt_askname(){
## VALIDATE ## ## VALIDATE ##
# check for reserved names # check for reserved names
if [[ "$answer" =~ ^ca|server$ ]]; then if [[ "$answer" =~ ^(ca|server)$ ]]; then
log_error "Name is reserved for internal use: '$answer'" log_error "Name is reserved for internal use: '$answer'"
fi fi

View File

@ -19,7 +19,7 @@ trap_exit(){
q=$(( q + 1 )) q=$(( q + 1 ))
snore 1 snore 1
if [[ "$q" -ge 15 ]]; then if [[ "$q" -ge 15 ]]; then
log_warn "Sending kill to OpenVPN" echo "Sending kill to OpenVPN" 1>&2
kill -s KILL -- $openvpn_pid 2> /dev/null || true kill -s KILL -- $openvpn_pid 2> /dev/null || true
break break
fi fi
@ -53,7 +53,8 @@ proc_running(){
# try reading state # try reading state
local state_path="/proc/$1/stat" local state_path="/proc/$1/stat"
[[ ! -f "$state_path" ]] && return 1 [[ ! -f "$state_path" ]] && return 1
local state=$(cat "$state_path" | cut -d ' ' -f3) local state
state=$(cat "$state_path" 2> /dev/null | cut -d ' ' -f3) || return 1
# parse state # parse state
case "$state" in case "$state" in