# Contributor: fossdd <fossdd@pwned.life>
# Maintainer: fossdd <fossdd@pwned.life>
pkgname=kanidm
pkgver=1.5.0
pkgrel=0
pkgdesc="A simple, secure and fast identity management platform"
url="https://kanidm.com/"
arch="x86_64 aarch64 riscv64"
# only x86_64 (with x86_64_v2) and aarch64 (with neon_v8) supported:
# https://kanidm.github.io/kanidm/stable/preparing_for_your_deployment.html#cpu
license="MPL-2.0"
depends="
	$pkgname-clients
	$pkgname-server
	$pkgname-unixd-clients
	"
makedepends="
	bash
	bc
	binaryen
	brotli
	cargo-auditable
	libudev-zero-dev
	linux-pam-dev
	openssl-dev
	rsync
	"
install="
	$pkgname-server.pre-install
	$pkgname-unixd-clients.pre-install
	"
subpackages="
	$pkgname-bash-completion
	$pkgname-clients
	$pkgname-openrc
	$pkgname-server
	$pkgname-unixd-clients:unixd_clients
	$pkgname-zsh-completion
	"
source="$pkgname-$pkgver.tar.gz::https://github.com/kanidm/kanidm/archive/refs/tags/v$pkgver.tar.gz
	release_alpine.toml
	kanidmd.initd
	kanidm-unixd.initd
	kanidm-unixd-tasks.initd
	use-var-lib-kanidm.toml
	"
options="!check net" # takes too long, downloading rust crates

_profile="release_alpine"
_cargoopts="--frozen --release
	--package daemon
	--package kanidm-ipa-sync
	--package kanidm_tools
	--package kanidm_unix_int
	--package nss_kanidm
	--package pam_kanidm
	"

prepare() {
	default_prepare

	cargo fetch --target="$CTARGET" --locked
	install -Dm644 "$srcdir"/release_alpine.toml -t libs/profiles
}

build() {
	KANIDM_BUILD_PROFILE="$_profile" \
	cargo auditable build $_cargoopts
}

check() {
	KANIDM_BUILD_PROFILE="$_profile" \
	cargo test $_cargoopts -- --test-threads=1
}

package() {
	# openrc
	install -Dm755 "$srcdir"/kanidmd.initd "$pkgdir"/etc/init.d/kanidmd
	install -Dm755 "$srcdir"/kanidm-unixd.initd "$pkgdir"/etc/init.d/kanidm-unixd
	install -Dm755 "$srcdir"/kanidm-unixd-tasks.initd "$pkgdir"/etc/init.d/kanidm-unixd-tasks

	# zsh completion
	install -Dm644 target/release/build/completions/_kanidm -t "$pkgdir"/usr/share/zsh/site-functions/
	install -Dm644 target/release/build/completions/_kanidmd -t "$pkgdir"/usr/share/zsh/site-functions/
	install -Dm644 target/release/build/completions/_kanidm_ssh_authorizedkeys_direct -t "$pkgdir"/usr/share/zsh/site-functions/
	install -Dm644 target/release/build/completions/_kanidm_ssh_authorizedkeys -t "$pkgdir"/usr/share/zsh/site-functions/
	install -Dm644 target/release/build/completions/_kanidm_unix -t "$pkgdir"/usr/share/zsh/site-functions/

	# bash completion
	install -Dm644 target/release/build/completions/kanidm.bash -t "$pkgdir"/usr/share/bash-completion/completions/
	install -Dm644 target/release/build/completions/kanidmd.bash -t "$pkgdir"/usr/share/bash-completion/completions/
	install -Dm644 target/release/build/completions/kanidm_ssh_authorizedkeys_direct.bash -t "$pkgdir"/usr/share/bash-completion/completions/
	install -Dm644 target/release/build/completions/kanidm_ssh_authorizedkeys.bash -t "$pkgdir"/usr/share/bash-completion/completions/
	install -Dm644 target/release/build/completions/kanidm_unix.bash -t "$pkgdir"/usr/share/bash-completion/completions/
}

clients() {
	pkgdesc="Kanidm client to interact with kanidm identity management server"
	depends=""

	install -Dm755 "$builddir"/target/release/kanidm -t "$subpkgdir"/usr/bin/
	install -Dm644 "$builddir"/examples/config -t "$subpkgdir"/etc/kanidm/
}

server() {
	pkgdesc="Kanidm server for idendity management, supports RADIUS, ssh key management"
	depends=""

	install -Dm755 "$builddir"/target/release/kanidmd -t "$subpkgdir"/usr/bin/
	install -Dm755 "$builddir"/target/release/kanidm-ipa-sync -t "$subpkgdir"/usr/bin/
	install -Dm644 "$builddir"/examples/server.toml -t "$subpkgdir"/etc/kanidm/

	install -dv "$subpkgdir"/usr/share/kanidm/ui/hpkg
	cp -r "$builddir"/server/core/static/* "$subpkgdir"/usr/share/kanidm/ui/hpkg
}

unixd_clients() {
	pkgdesc="Kanidm localhost resolver to resolve posix identities to a kanidm instance"
	depends=""

	install -Dm755 "$builddir"/target/release/kanidm_ssh_authorizedkeys -t "$subpkgdir"/usr/bin/
	install -Dm755 "$builddir"/target/release/kanidm_ssh_authorizedkeys_direct -t "$subpkgdir"/usr/bin/
	install -Dm755 "$builddir"/target/release/kanidm-unix -t "$subpkgdir"/usr/bin/
	install -Dm755 "$builddir"/target/release/kanidm_unixd -t "$subpkgdir"/usr/bin/
	install -Dm755 "$builddir"/target/release/kanidm_unixd_tasks -t "$subpkgdir"/usr/bin/

	install -Dm755 "$builddir"/target/release/libnss_kanidm.so "$subpkgdir"/usr/lib/libnss_kanidm.so.2
	install -Dm755 "$builddir"/target/release/libpam_kanidm.so "$subpkgdir"/usr/lib/security/pam_kanidm.so

	install -Dm644 "$builddir"/examples/unixd -t "$subpkgdir"/etc/kanidm/
}

sha512sums="
4c3aad30c176f73ee08913e831814ed53746e2f05eced392b508fa5862d64efc9f79f3f7d047716504a3ce0a0f726c66814abb24e85b89171db33a1928c90d53  kanidm-1.5.0.tar.gz
646c59dc6228c6d557d43d481db7ab9996131358f7709c78f36022dc4649d13ebc12020449d8ef3eef14e98bfab950a5b5290c2cdf72bcfe7585ce19419c3c67  release_alpine.toml
718974ccf058f6e12894882b9bd27ccb3977b3d23be088752368d2c85d0e3c31a182ef9096cbced506d8d1d5d63a7e1e4dd22c07f7009e4532820d0d96ebef7c  kanidmd.initd
c2936f5247122c3f6729ceca377a025c3752103c98e279df549a0d664783070561261edea41e7becf75d56f181cba05667c96a46205147ad25b284544ad5d656  kanidm-unixd.initd
08ab2aa7c1e8b14740172df89f3d265e1a7a06da083f65e8a296f7ac4cfdce7629b624d294a9de9bf4abf42769ca88efd10cb0edbbeb2320971b92d1bee393c0  kanidm-unixd-tasks.initd
6dec53d50389a7138163eeecef4dbcfe3a3cc474d33e66fcda65272b361219ffa43a59a042d5d59743e3a0b2df00ebcb273418920ebdc0354f52b22a9850bf5f  use-var-lib-kanidm.toml
"
