own-pki/lib/core.sh
2026-04-26 20:44:39 +02:00

125 lines
3.8 KiB
Bash

# check if run from script
[[ "${BASH_SOURCE[0]}" == "${0}" ]] && exit 1
#------------------------------------------------------------------------------
# read default param
init_default(){
DEFAULT_CONF="${ROOT_DIR}/config/default.conf"
[[ -f "$DEFAULT_CONF" ]] && source "$DEFAULT_CONF"
}
#------------------------------------------------------------------------------
# read param from config file
init_env() {
# read config file
CONFIG_FILE="/etc/own-pki/own-pki.conf"
[[ -f "$CONFIG_FILE" ]] && source "$CONFIG_FILE" || msg_error "File ${ORANGE}$CONFIG_FILE${RED} missing. Run 'sudo bin/install.sh'${NC}"
# debug mode
if [[ "${DEBUG:-false}" == "true" ]]; then
set -x
fi
out_tmp=$(mktemp)
err_tmp=$(mktemp)
}
#------------------------------------------------------------------------------
# read credential from /root/.cred file
init_cred(){
CRED_FILE=/root/.cred
[[ -f "$CRED_FILE" ]] && source "$CRED_FILE"|| msg_error "File ${ORANGE}$CRED_FILE${RED} missing.${NC}"
}
#------------------------------------------------------------------------------
# clean string
# input: string to clean
# output: string cleaned
clean_string() {
echo "$1" | \
# translate special chars to closest ASCII (e.g., 'é' -> 'e')
iconv -f utf-8 -t ascii//TRANSLIT | \
# convert to lowercase
tr '[:upper:]' '[:lower:]' | \
# replace any non-alphanumeric character with an underscore
sed -E 's/[^a-z0-9]+/_/g' | \
# replace multiple underscores into one
sed -E 's/(_)+/_/g' | \
# remove underscores at the beginning or end
sed -E 's/^_|_$//g'
}
#------------------------------------------------------------------------------
# check format fqdn
# input: fqdn to check
check_format_fqdn(){
if [[ ! "$1" =~ ^([a-z0-9]+(-[a-z0-9]+)*\.){2,}[a-z]{2,}$ ]]; then
msg_error "\n$1 is not a fqdn valid.\n"
exit 1
fi
}
#------------------------------------------------------------------------------
# check format ip address
# input: ip address to check
check_format_ip(){
if [[ ! "$1" =~ ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]]; then
msg_error "\n$1 is not an address IP valid.\n"
exit 1
fi
}
#------------------------------------------------------------------------------
# check if the user has sudo privileges and ensure that the script runs with sudo.
check_sudo(){
# check if user has sudo rigth
if sudo ! -n true 2>/dev/null; then
msg_error "\nAccess denied: user $USER does not have sudo privileges or a password is required.\n"
exit 1
fi
# check if the effective user ID is 0 (root)
if [[ $EUID -ne 0 ]]; then
msg_error "\nThis script must be run as root or with sudo.\n"
exit 1
fi
}
#------------------------------------------------------------------------------
# check the return code
check_rc(){
if [ "$1" != "0" ]; then
msg_error "Error (RC:$rc)"
exit 1
else
msg_ok "OK"
fi
}
#-----------------------------------------------------------
# set colors
# RED Error
# ORANGE Attention or color for parameters when
# confirmation
# CYAN Ask to user or display a data
# GREEN OK
set_color(){
if [[ "$ENABLE_COLOR" == "true" ]]; then
RED='\e[0;31m'
ORANGE='\e[0;33m'
CYAN='\e[0;36m'
GREEN='\e[0;32m'
NC='\e[0m'
else
RED=''
ORANGE=''
CYAN=''
GREEN=''
NC=''
fi
}
#-----------------------------------------------------------
# ask question yes or no
# input: prompt
yes_no(){
if [ "$ASSUME_YES" == "0" ]; then
echo -n -e "${CYAN}$1 [y/N]? ${NC}"
unset answer
read answer
if [ "${answer}" != "y" ]; then
echo -e "${ORANGE}Canceled!${NC}"
exit 1
fi
fi
}