#!/usr/bin/env bash
# SPDX-License-Identifier: GPL-3.0-or-later
#
# steamos-priv-write — Steam's privileged sysfs write hook
# (steamos-polkit-helpers), called as: steamos-priv-write <path> <value>.
#
# Only backlight brightness is handled, through logind's
# Session.SetBrightness, which the session's own user may call without
# extra privileges. Anything else is refused.

path=$1
value=$2

[[ $path =~ ^/sys/class/backlight/([^/]+)/brightness$ ]] && name=${BASH_REMATCH[1]}
if [ -z "$name" ] || [ "$name" = .. ] || [[ ! $value =~ ^[0-9]+$ ]]; then
    echo "${0##*/}: refusing write of '$value' to '$path'" >&2
    exit 1
fi

set_brightness() {
    busctl call org.freedesktop.login1 "$1" org.freedesktop.login1.Session \
        SetBrightness ssu backlight "$name" "$value"
}

set_brightness /org/freedesktop/login1/session/auto 2>/dev/null && exit 0
[ -n "$XDG_SESSION_ID" ] || exit 1
session=$(busctl call org.freedesktop.login1 /org/freedesktop/login1 \
    org.freedesktop.login1.Manager GetSession s "$XDG_SESSION_ID" | cut -d'"' -f2)
[ -n "$session" ] && set_brightness "$session"
