2022-04-05 17:59:05 +01:00
|
|
|
{ stdenv
|
|
|
|
, lib
|
|
|
|
, fetchzip
|
|
|
|
, makeWrapper
|
|
|
|
, jre
|
|
|
|
, writeText
|
|
|
|
, nixosTests
|
2021-10-03 19:08:59 +01:00
|
|
|
, callPackage
|
2022-04-05 17:59:05 +01:00
|
|
|
|
|
|
|
, confFile ? null
|
|
|
|
, plugins ? [ ]
|
2020-10-05 14:58:44 +01:00
|
|
|
}:
|
|
|
|
|
2020-02-25 07:00:40 +00:00
|
|
|
stdenv.mkDerivation rec {
|
2022-04-05 17:59:05 +01:00
|
|
|
pname = "keycloak";
|
2022-08-31 12:18:56 +01:00
|
|
|
version = "19.0.1";
|
2020-02-25 07:00:40 +00:00
|
|
|
|
|
|
|
src = fetchzip {
|
2022-04-05 17:59:05 +01:00
|
|
|
url = "https://github.com/keycloak/keycloak/releases/download/${version}/keycloak-${version}.zip";
|
2022-08-31 12:18:56 +01:00
|
|
|
sha256 = "sha256-3hqnFH0zWvgOgpQHV4eMqTGzUWEoRwxvOcOUL2s8YQk=";
|
2020-02-25 07:00:40 +00:00
|
|
|
};
|
|
|
|
|
2022-04-05 17:59:05 +01:00
|
|
|
nativeBuildInputs = [ makeWrapper jre ];
|
|
|
|
|
|
|
|
buildPhase = ''
|
|
|
|
runHook preBuild
|
|
|
|
'' + lib.optionalString (confFile != null) ''
|
|
|
|
install -m 0600 ${confFile} conf/keycloak.conf
|
|
|
|
'' + ''
|
|
|
|
install_plugin() {
|
2022-08-31 12:18:56 +01:00
|
|
|
if [ -d "$1" ]; then
|
|
|
|
find "$1" -type f \( -iname \*.ear -o -iname \*.jar \) -exec install -m 0500 "{}" "providers/" \;
|
|
|
|
else
|
|
|
|
install -m 0500 "$1" "providers/"
|
|
|
|
fi
|
2022-04-05 17:59:05 +01:00
|
|
|
}
|
|
|
|
${lib.concatMapStringsSep "\n" (pl: "install_plugin ${lib.escapeShellArg pl}") plugins}
|
|
|
|
'' + ''
|
|
|
|
patchShebangs bin/kc.sh
|
|
|
|
bin/kc.sh build
|
|
|
|
|
|
|
|
runHook postBuild
|
|
|
|
'';
|
2020-02-25 07:00:40 +00:00
|
|
|
|
|
|
|
installPhase = ''
|
2022-04-05 17:59:05 +01:00
|
|
|
runHook preInstall
|
|
|
|
|
2020-02-25 07:00:40 +00:00
|
|
|
mkdir $out
|
|
|
|
cp -r * $out
|
|
|
|
|
2022-04-05 17:59:05 +01:00
|
|
|
rm $out/bin/*.{ps1,bat}
|
2020-02-25 07:00:40 +00:00
|
|
|
|
2022-04-05 17:59:05 +01:00
|
|
|
runHook postInstall
|
|
|
|
'';
|
|
|
|
|
|
|
|
postFixup = ''
|
2022-04-30 21:41:24 +01:00
|
|
|
substituteInPlace $out/bin/kc.sh --replace ${lib.escapeShellArg "-Dkc.home.dir='$DIRNAME'/../"} '-Dkc.home.dir=$KC_HOME_DIR'
|
|
|
|
substituteInPlace $out/bin/kc.sh --replace ${lib.escapeShellArg "-Djboss.server.config.dir='$DIRNAME'/../conf"} '-Djboss.server.config.dir=$KC_CONF_DIR'
|
2020-10-05 14:58:44 +01:00
|
|
|
|
2022-04-05 17:59:05 +01:00
|
|
|
for script in $(find $out/bin -type f -executable); do
|
|
|
|
wrapProgram "$script" --set JAVA_HOME ${jre} --prefix PATH : ${jre}/bin
|
2022-03-22 19:03:47 +00:00
|
|
|
done
|
2020-02-25 07:00:40 +00:00
|
|
|
'';
|
|
|
|
|
2021-10-03 19:08:59 +01:00
|
|
|
passthru = {
|
|
|
|
tests = nixosTests.keycloak;
|
2022-04-05 17:59:05 +01:00
|
|
|
plugins = callPackage ./all-plugins.nix { };
|
|
|
|
enabledPlugins = plugins;
|
2021-10-03 19:08:59 +01:00
|
|
|
};
|
2020-10-13 10:44:02 +01:00
|
|
|
|
2021-01-11 07:54:33 +00:00
|
|
|
meta = with lib; {
|
2022-04-05 17:59:05 +01:00
|
|
|
homepage = "https://www.keycloak.org/";
|
2020-02-25 07:00:40 +00:00
|
|
|
description = "Identity and access management for modern applications and services";
|
2022-06-02 14:38:41 +01:00
|
|
|
sourceProvenance = with sourceTypes; [ binaryBytecode ];
|
2022-04-05 17:59:05 +01:00
|
|
|
license = licenses.asl20;
|
|
|
|
platforms = jre.meta.platforms;
|
2020-10-05 14:58:44 +01:00
|
|
|
maintainers = with maintainers; [ ngerstle talyz ];
|
2020-02-25 07:00:40 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|