# Contributor: fossdd <fossdd@pwned.life>
# Maintainer: fossdd <fossdd@pwned.life>
pkgname=kanidm
pkgver=1.4.4
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/prepare_the_server.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

	cargo-update.patch
	"
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="
c442e60d4e391a2d26fde98387618e85060b01631333fd6f16744b2a0e5972d3f73b097c83da4861cf5a770d04a6dc14a1b21bc965104b41709835bab3d29c8d  kanidm-1.4.4.tar.gz
7b9e10204b44ae9a47dd276998d271875a566680b1173a7a660b5f10dc9d368a7fd0e4512e591dc881848f306d1b8b112e1a50a09d6862f3d0d28864fc5b36a1  release_alpine.toml
718974ccf058f6e12894882b9bd27ccb3977b3d23be088752368d2c85d0e3c31a182ef9096cbced506d8d1d5d63a7e1e4dd22c07f7009e4532820d0d96ebef7c  kanidmd.initd
c2936f5247122c3f6729ceca377a025c3752103c98e279df549a0d664783070561261edea41e7becf75d56f181cba05667c96a46205147ad25b284544ad5d656  kanidm-unixd.initd
08ab2aa7c1e8b14740172df89f3d265e1a7a06da083f65e8a296f7ac4cfdce7629b624d294a9de9bf4abf42769ca88efd10cb0edbbeb2320971b92d1bee393c0  kanidm-unixd-tasks.initd
6dec53d50389a7138163eeecef4dbcfe3a3cc474d33e66fcda65272b361219ffa43a59a042d5d59743e3a0b2df00ebcb273418920ebdc0354f52b22a9850bf5f  use-var-lib-kanidm.toml
c6a2b6da4192e5a2fa7ab383a5a4b2095860aa42f3c4b0333fff3fa5de37b06b0b5e8ac06a73d38958821680bb457684e488dfacc8dff523e3ba98f2c37fca73  cargo-update.patch
"
