#!/usr/bin/bash

set -u

user="${MAILMAN_WEB_WRAPPER_USER-mailman-web}"
shell="${MAILMAN_WEB_WRAPPER_SHELL-/bin/sh}"
env="${MAILMAN_WEB_WRAPPER_ENV_PATH-/opt/osstech/etc/mailman-web/mailman-web.env}"
venv="${MAILMAN_WEB_WRAPPER_VENV-/opt/osstech/libexec/mailman-web/0.0.10~a20250924-18.el9/app}"

export \
  PGSERVICE="${MAILMAN_WEB_WRAPPER_PGSERVICE-mailman-web}" \
  PGSERVICEFILE="${MAILMAN_WEB_WRAPPER_PGSERVICEFILE-/opt/osstech/etc/mailman-web/postgresql/pg_service.conf}" \
  PGPASSFILE="${MAILMAN_WEB_WRAPPER_PGPASSFILE-/opt/osstech/etc/mailman-web/postgresql/pgpass}" \
  PSQLRC="${MAILMAN_WEB_WRAPPER_SQLRC-/opt/osstech/etc/mailman-web/postgresql/psqlrc}" \
;

cmd="$venv/bin/${0##*/}"

set -- "$cmd" "$@"

if [ "$(id -u)" -eq 0 ]; then
  if [ -x /usr/bin/setpriv ]; then
    IFS=: read -r _ _ _ _ _ home _ <<<"$(/usr/bin/getent passwd "$user")"
    ## Linux (util-linux)
    set -- \
      /usr/bin/setpriv \
        --reuid="$user" \
        --regid="$user" \
        --init-groups \
        --no-new-privs \
      /usr/bin/env \
        HOME="$home" \
        USER="$user" \
        LOGNAME="$user" \
      "$@" \
    ;
  else
    set -- \
      /bin/su \
        -s "$shell" \
        -c 'exec "$@"' \
        -- \
        "$user" \
        "$cmd" \
      "$@" \
    ;
  fi
fi

if [ -f "$env" ]; then
  set -a
  # shellcheck disable=SC1090 # ShellCheck can't follow non-constant source
  . "$env"
  set +a
fi

exec "$@"
