summaryrefslogtreecommitdiff
path: root/pkgs/athena-bccr/gaudi-env.nix
blob: 1ced54e252b3b3d0d0c0ad4a495aed3464e4b8f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
{ buildFHSEnv
, curl
, lib
, writeShellScriptBin

, gaudiHash ? null
, unwrapped
}:
let
  unwrappedWithGaudi = unwrapped.override { inherit gaudiHash; };
in
buildFHSEnv {
  name = "gaudi";

  targetPkgs = pkgs: [
    unwrappedWithGaudi.ase-idprotect.lib
    unwrappedWithGaudi.gaudi

    (writeShellScriptBin "launch-gaudi" ''
      set -o errexit
      set -o pipefail
      set -o nounset

      PATH="${lib.makeBinPath [ curl ]}:$PATH"

      echo "$0: testing for incompatible releases..." >&2

      jar_name=bccr-firma-fva-clienteMultiplataforma.jar
      url="https://www.firmadigital.go.cr/Bccr.Firma.Fva.Actualizador.ClienteFirmadorJava//recursosLiberica17/actualizador/$jar_name"
      ca_file="${unwrappedWithGaudi.bccr-cacerts}/root-ca.pem"
      url_hash=$(curl -sS --cacert "$ca_file" "$url" | sha256sum | cut -d' ' -f1)
      jar_path="${unwrappedWithGaudi.gaudi}/share/java/$jar_name"
      jar_hash=$(sha256sum "$jar_path" | cut -d' ' -f1)

      if [ "$url_hash" != "$jar_hash" ]; then
        last_modified=$(curl -sS --head --cacert "$ca_file" "$url" | grep -i '^last-modified:' | head -1)

        echo "$0: sha256 mismatch for $jar_path due to server-side update" >&2
        echo "$0:   expected:      $url_hash" >&2
        echo "$0:   actual:        $jar_hash" >&2
        echo "$0:   $last_modified" >&2
        echo "$0: run the following to download the new client JAR, then update your derivation:" >&2
        echo "$0: \$ ${unwrappedWithGaudi.update-gaudi}" >&2

        exit 1
      fi

      cache_path_1="''${XDG_CACHE_HOME:-$HOME/.cache}/Agente-GAUDI"
      cache_path_2="''${XDG_CACHE_HOME:-$HOME/.cache}/Firmador-BCCR"

      for cache_path in "$cache_path_1" "$cache_path_2"; do
        mkdir -p "$cache_path"
        ln -sf -- ${unwrappedWithGaudi.gaudi}/share/java/bccr-firma-fva-clienteMultiplataforma.jar "$cache_path"
      done

      cp -f --no-preserve=mode -t "$cache_path_1" -- "${unwrappedWithGaudi.gaudi}/share/java/config.properties"

      exec gaudi
    '')
  ];

  runScript = "launch-gaudi";
}