#!/bin/bash
#
# Univention Self Service UMC module
#  postinst file for the debian package
#
# SPDX-FileCopyrightText: 2015-2026 Univention GmbH
# SPDX-License-Identifier: AGPL-3.0-only

eval "$(univention-config-registry shell)"

# shellcheck source=/dev/null
. /usr/share/univention-lib/all.sh

create_logfile /var/log/univention/management-console-module-passwordreset.log "root:adm" 640

# migrate umc/self-service/passwordreset/enabled -> umc/self-service/enabled (Bug #51001)
umc_enabled="$(univention-config-registry get umc/self-service/passwordreset/enabled)"
if [ -n "$umc_enabled" ]; then
	univention-config-registry set umc/self-service/enabled="$umc_enabled"
	univention-config-registry unset umc/self-service/passwordreset/enabled
fi

if dpkg --compare-versions "$2" lt-nl 4.0.3-30; then
	# duplicate set blacklist/whitelist to new variables to keep behaviour (Bug #51259)
	bl_users=$(ucr get umc/self-service/passwordreset/blacklist/users)
	bl_groups=$(ucr get umc/self-service/passwordreset/blacklist/groups)
	wl_users=$(ucr get umc/self-service/passwordreset/whitelist/users)
	wl_groups=$(ucr get umc/self-service/passwordreset/whitelist/groups)
	ucr set "umc/self-service/profiledata/blacklist/users=$bl_users"
	ucr set "umc/self-service/profiledata/blacklist/groups=$bl_groups"
	ucr set "umc/self-service/profiledata/whitelist/users=$wl_users"
	ucr set "umc/self-service/profiledata/whitelist/groups=$wl_groups"
	ucr set "umc/self-service/account-deregistration/blacklist/users=$bl_users"
	ucr set "umc/self-service/account-deregistration/blacklist/groups=$bl_groups"
	ucr set "umc/self-service/account-deregistration/whitelist/users=$wl_users"
	ucr set "umc/self-service/account-deregistration/whitelist/groups=$wl_groups"
fi

ucr set umc/self-service/profiledata/enabled?true \
	self-service/udm_attributes?"jpegPhoto,e-mail,phone,roomnumber,departmentNumber,country,homeTelephoneNumber,mobileTelephoneNumber,homePostalAddress" \
	umc/self-service/allow-authenticated-use?true \
	umc/self-service/content-security-policy/frame-ancestors?"*.$domainname"

#DEBHELPER#

is_dc_master_or_backup () {
	[ "$server_role" = "domaincontroller_master" ] || [ "$server_role" = "domaincontroller_backup" ]
}


if ! is_dc_master_or_backup && dpkg --compare-versions "$2" lt-nl "7.2.0" ; then
	deb-systemd-invoke disable univention-self-service-passwordreset-umc.service
	systemctl reset-failed univention-self-service-passwordreset-umc.service 2>/dev/null || true
fi

if is_dc_master_or_backup; then
	if ! getent passwd self-service-umc >/dev/null; then
	adduser --system --ingroup nogroup --home /var/lib/univention-self-service-passwordreset-umc self-service-umc
	chmod 0700 /var/lib/univention-self-service-passwordreset-umc
	fi

	deb-systemd-invoke enable univention-self-service-passwordreset-umc.service
	deb-systemd-invoke restart univention-self-service-passwordreset-umc.service
fi

systemctl try-restart univention-directory-listener
a2ensite univention-self-service.conf
systemctl reload apache2

if is_dc_master_or_backup && ! grep -q relayhost /etc/postfix/main.cf; then
	echo
	echo "This hosts mail system must be configured so it can send away."
	echo "Please consider the UCS documentation on the topic of a relay host:"
	echo "EN: https://docs.software-univention.de/manual-5.2.html#mail::serverconfig::relay"
	echo "DE: https://docs.software-univention.de/handbuch-5.2.html#mail::serverconfig::relay"
	echo
fi

if [ "$1" = "configure" ] && dpkg --compare-versions "$2" lt-nl "5.0.1-16"; then
	udm settings/extended_attribute modify --dn "cn=UniventionPasswordSelfServiceEmail,cn=custom attributes,cn=univention,$ldap_base" \
		--append translationShortDescription='"fr_FR" "Adresse e-mail pour la réinitialisation du mot de passe"' \
		--append translationLongDescription='"fr_FR" "Lors de la réinitialisation du mot de passe, un e-mail est envoyé à l’adresse spécifiée. La réinitialisation du mot de passe par e-mail est disponible pour les utilisateurs et utilisatrices uniquement si elle a été activée et configurée par l’administrateur ou l’administratrice."' \
		--append translationTabName='"fr_FR" "Réinitialisation du mot de passe"'

	udm settings/extended_attribute modify --dn "cn=UniventionPasswordSelfServiceMobile,cn=custom attributes,cn=univention,$ldap_base" \
		--append translationShortDescription='"fr_FR" "Numéro de téléphone portable"' \
		--append translationLongDescription='"fr_FR" "Lors de la réinitialisation du mot de passe, un SMS est envoyé au numéro de portable spécifié. La réinitialisation du mot de passe par SMS est disponible pour les utilisateurs et utilisatrices uniquement si elle a été activée et configurée par l’administrateur ou l’administratrice."' \
		--append translationTabName='"fr_FR" "Réinitialisation du mot de passe"'

	udm settings/extended_attribute modify --dn "cn=UniventionPasswordRecoveryEmailVerified,cn=custom attributes,cn=univention,$ldap_base" \
		--append translationShortDescription='"fr_FR" "Adresse e-mail vérifiée"' \
		--append translationLongDescription='"fr_FR" "Cet attribut indique si une adresse e-mail a déjà été vérifiée ou non. La valeur est réglée sur False par défaut et lorsque PasswordRecoveryMail est modifié. Lorsque’une adresse e-mail a été vérifiée, la valeur est réglée sur True."' \
		--append translationTabName='"fr_FR" "Réinitialisation du mot de passe"'

	udm settings/extended_attribute modify --dn "cn=UniventionRegisteredThroughSelfService,cn=custom attributes,cn=univention,$ldap_base" \
		--append translationShortDescription='"fr_FR" "Auto-inscription"' \
		--append translationLongDescription='"fr_FR" "Cet attribut indique si un utilisateur ou une utilisatrice a utilisé le module de libre-service pour s’inscrire par ses propres moyens."' \
		--append translationTabName='"fr_FR" "Réinitialisation du mot de passe"'

	udm settings/extended_attribute modify --dn "cn=UniventionDeregisteredThroughSelfService,cn=custom attributes,cn=univention,$ldap_base" \
		--append translationShortDescription='"fr_FR" "Auto-désinscription"' \
		--append translationLongDescription='"fr_FR" "Cet attribut indique si un utilisateur ou une utilisatrice a demandé sa désinscription."' \
		--append translationTabName='"fr_FR" "Réinitialisation du mot de passe"'

	udm settings/extended_attribute modify --dn "cn=UniventionDeregistrationTimestamp,cn=custom attributes,cn=univention,$ldap_base" \
		--append translationShortDescription='"fr_FR" "Horodatage de la désinscription"' \
		--append translationLongDescription='"fr_FR" "Horodatage de l’instant auquel l’utilisateur ou l’utilisatrice a demandé sa désinscription."' \
		--append translationTabName='"fr_FR" "Réinitialisation du mot de passe"'
fi

exit 0
