depot/nix/pkgs/unifi-hack/default.nix
Luke Granger-Brown 85c2c4d507 unifiHack: init
This package takes the upstream Unifi package, and then applies a AspectJ
aspect which replaces the auth logic with stuff which checks whether there's a
Pomerium header.
2021-01-04 20:49:04 +00:00

48 lines
1.5 KiB
Nix

{ depot, pkgs, ... }:
let
inherit (pkgs) stdenvNoCC jdk aspectj unifi;
in
stdenvNoCC.mkDerivation {
pname = "unifi-hack";
version = "depot";
src = ./aspect;
nativeBuildInputs = [ jdk aspectj depot.pkgs.tiny-remapper ];
buildPhase = ''
mkdir $NIX_BUILD_TOP/tmp
cp $(type -p ajc) $NIX_BUILD_TOP/tmp/ajc
substituteInPlace $NIX_BUILD_TOP/tmp/ajc \
--replace '-Xmx64M' ""
ajc_classpath="$(ls ${unifi}/lib/*.jar | tr '\n' ':' | sed 's/:$//')"
tiny-remapper ${unifi}/lib/ace.jar $NIX_BUILD_TOP/tmp/acedeobf.jar ./ace.jar.tiny2map intermediary named
$NIX_BUILD_TOP/tmp/ajc -8 \
-classpath "${aspectj}/lib/aspectjrt.jar:$ajc_classpath" \
-inpath $NIX_BUILD_TOP/tmp/acedeobf.jar \
-outjar $NIX_BUILD_TOP/tmp/aceaspected.jar \
./MyLogin.aj
tiny-remapper $NIX_BUILD_TOP/tmp/aceaspected.jar $NIX_BUILD_TOP/tmp/acereobf.jar ./ace.jar.tiny2map named intermediary
# Repack the manifest
pushd $NIX_BUILD_TOP/tmp
jar xf acereobf.jar META-INF/MANIFEST.MF
awk \
'/^[^ ]/ { inclasspath=0 } /Class-Path:/ { inclasspath=1 } { if (inclasspath) print; }' \
META-INF/MANIFEST.MF > classpath.MF
substituteInPlace classpath.MF \
--replace 'Class-Path: ' 'Class-Path: aspectjrt.jar '
jar -ufm acereobf.jar classpath.MF
popd
'';
installPhase = ''
cp -R ${unifi} $out
chmod -R u+w $out
rm $out/lib/ace.jar
cp $NIX_BUILD_TOP/tmp/acereobf.jar $out/lib/ace.jar
cp ${aspectj}/lib/aspectjrt.jar $out/lib/aspectjrt.jar
'';
}