#!/bin/bash
### Copyright 1999-2024. WebPros International GmbH. All rights reserved.
#

#
# Plesk script
#



#default values

### Copyright 1999-2024. WebPros International GmbH. All rights reserved.
# vim:syntax=sh

generate_encryption_key()
{
	local key_file="/etc/psa/private/secret_key"
	local key_dir="`dirname $key_file`"
	local rc=0

	[ -d "$key_dir" ] || mkdir -p "$key_dir"

	if [ ! -e "$key_file" ]; then
		dd if=/dev/urandom of="$key_file" bs=16 count=1 2>/dev/null
	else
		rc=1
	fi
	fix_key_permissions
	return $rc
}

fix_key_permissions()
{
	local key_file="/etc/psa/private/secret_key"
	local key_dir="`dirname $key_file`"

	if [ -e "$key_file" ]; then
		chown psaadm:0 "$key_file"
		chmod 0600 "$key_file"
	fi

	if [ -d "$key_dir" ]; then
		chown psaadm:0 "$key_dir"
		chmod 0700 "$key_dir"
	fi
}
### Copyright 1999-2024. WebPros International GmbH. All rights reserved.
reexec_with_clean_env()
{
	# Usage: call this function as 'reexec_with_clean_env "$@"' at the start of a script.
	#        Don't use with scripts that require sensitive environment variables.
	#        Don't put the call under any input/output redirection.
	# Purpose: make sure the script is executed with a sane environment.

	local lc="`get_default_locale`"
	export LANG="$lc" LC_MESSAGES="$lc" LC_ALL="$lc"
	export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
	umask 022

	PLESK_SCRIPT_COMMAND_LINE="$0 $*"
	[ -z "$PLESK_INSTALLER_ENV_CLEANED" ] || { unset PLESK_INSTALLER_ENV_CLEANED; return 0; }
	[ -n "$BASH" ] || exec /bin/bash "$0" "$@"

	# N.B.: the following code requires Bash. On Dash it would cause syntax error upon parse w/o eval.
	eval '
	local extra_vars=()                     # list of variables to preserve
	for var in "${!PLESK_@}"; do            # enumerate all PLESK_* variables
		extra_vars+=("$var=${!var}")
	done
	extra_vars+=("PLESK_INSTALLER_ENV_CLEANED=1")

	# Exec self with clean env except for extra_vars, shell opts, and arguments.
	exec /usr/bin/env -i "${extra_vars[@]}" /bin/bash ${-:+-$-} "$0" "$@" || {
		echo "Failed to reexec self ($0) with clean environment" >&2
		exit 91		# Just some relatively unique error code
	}
	'
}

get_default_locale()
{
	# Note that CentOS 7 typically doesn't have C.UTF-8
	for lc in "C.UTF-8" "en_US.UTF-8" "C"; do
		if [ -z "`LC_ALL=$lc locale 2>&1 >/dev/null`" ]; then
			echo "$lc"
			return 0
		fi
	done
	echo "C"
}

### Copyright 1999-2024. WebPros International GmbH. All rights reserved.
# vim:ft=sh:

reexec_with_clean_env "$@"

key_file="/etc/psa/private/secret_key"
if [ -e "$key_file" ]; then
	echo "Unable to generate new key - key file exists"
	fix_key_permissions
	exit 1
else
	generate_encryption_key
fi
