summarylogtreecommitdiffstats
path: root/prepare-overlay.sh
blob: 991f25dfe93b4609587a5bdb0f9997c2a53fcce0 (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
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/env bash
set -euo pipefail

if [[ $# -ne 2 ]]; then
    echo "Usage: $0 <upstream_source_dir> <overlay_output_dir>" >&2
    exit 1
fi

src_dir="$1"
out_dir="$2"

wrapper_src="$src_dir/fido2-manage.sh"
gui_src="$src_dir/gui.py"

if [[ ! -f "$wrapper_src" ]]; then
    echo "Missing wrapper source: $wrapper_src" >&2
    exit 1
fi
if [[ ! -f "$gui_src" ]]; then
    echo "Missing GUI source: $gui_src" >&2
    exit 1
fi

rm -rf "$out_dir"
mkdir -p "$out_dir"

wrapper_out="$out_dir/fido2-manage"
{
    head -n 1 "$wrapper_src"
    cat <<'BLOCK'

SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"

if [[ -n "${FIDO2_TOKEN_CMD:-}" ]]; then
    :
elif [[ -x "${SCRIPT_DIR}/fido2-token2" ]]; then
    FIDO2_TOKEN_CMD="${SCRIPT_DIR}/fido2-token2"
elif command -v fido2-token2 >/dev/null 2>&1; then
    FIDO2_TOKEN_CMD="$(command -v fido2-token2)"
else
    echo "[Error] Unable to locate fido2-token2. Set FIDO2_TOKEN_CMD or install fido2-token2 in PATH." >&2
    exit 1
fi

BLOCK
    tail -n +2 "$wrapper_src" | sed '/^FIDO2_TOKEN_CMD=/d'
} > "$wrapper_out"

sed -i 's#\./fido2-manage\.sh#fido2-manage#g' "$wrapper_out"
chmod 755 "$wrapper_out"

gui_out="$out_dir/gui.py"
cp "$gui_src" "$gui_out"
sed -i 's#^FIDO_COMMAND = "\./fido2-manage.sh"#FIDO_COMMAND = os.environ.get("FIDO_MANAGE_CMD", "/usr/bin/fido2-manage")#' "$gui_out"

cat > "$out_dir/fido2-manage-gui" <<'LAUNCHER'
#!/usr/bin/env bash
set -euo pipefail

exec /usr/bin/python3 /usr/share/fido2-manage/gui.py "$@"
LAUNCHER
chmod 755 "$out_dir/fido2-manage-gui"

cat > "$out_dir/69-fido2-token2.rules" <<'RULES'
# Derived from upstream fido2-manage udev data (fido2-manage/udev/fidodevs).
# Arch-safe variant: no plugdev group dependency.
ACTION!="add|change", GOTO="fido2_token2_end"

# TOKEN2 and Hypersecu vendor IDs used by TOKEN2 devices.
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="349e", TAG+="uaccess", MODE="0660"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="2ccf", TAG+="uaccess", MODE="0660"

LABEL="fido2_token2_end"
RULES