Fix _authelia_set_remember_me skipping inactivity sync on a no-op remember_me

The "already equal" early-exit compared only remember_me against the typed
value, so re-entering an unchanged remember_me (the exact case for anyone
who'd set it before the earlier fix existed) skipped the inactivity write
entirely, leaving inactivity stuck at its old mismatched value. Now only
skips when both keys already match the typed duration.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0148pWopbt3tEKZWHYuHTb3c
This commit is contained in:
Claude
2026-09-09 13:20:32 +00:00
parent 5c13054cdd
commit 3cd9a1ece3
+16 -3
View File
@@ -2412,10 +2412,11 @@ _authelia_set_remember_me() {
local config_file="$DOCKER_DIR/authelia/config/configuration.yml" local config_file="$DOCKER_DIR/authelia/config/configuration.yml"
[ -f "$config_file" ] || { log_warning "No configuration.yml found — install Authelia first."; return 1; } [ -f "$config_file" ] || { log_warning "No configuration.yml found — install Authelia first."; return 1; }
local current local current current_inactivity
current="$(grep -E '^ remember_me:' "$config_file" | awk '{print $2}' | tr -d "'\"")" current="$(grep -E '^ remember_me:' "$config_file" | awk '{print $2}' | tr -d "'\"")"
current_inactivity="$(grep -E '^ inactivity:' "$config_file" | awk '{print $2}' | tr -d "'\"")"
echo "" echo ""
echo " Current \"remember me\" duration: ${current:-not set}" echo " Current \"remember me\" duration: ${current:-not set} (inactivity timeout: ${current_inactivity:-not set})"
echo " How long a session lasts when someone checks \"Remember me\" at login —" echo " How long a session lasts when someone checks \"Remember me\" at login —"
echo " applies to every domain this Authelia instance protects. Also sets" echo " applies to every domain this Authelia instance protects. Also sets"
echo " \"inactivity\" (idle timeout) to the same value, so a gap between visits" echo " \"inactivity\" (idle timeout) to the same value, so a gap between visits"
@@ -2424,10 +2425,22 @@ _authelia_set_remember_me() {
echo " Examples: 12h, 7d, 1M (month), 1y. Set to -1 to disable Remember Me entirely." echo " Examples: 12h, 7d, 1M (month), 1y. Set to -1 to disable Remember Me entirely."
local new_duration="" local new_duration=""
prompt_text " New duration [${current:-7d}]:" "${current:-7d}" new_duration prompt_text " New duration [${current:-7d}]:" "${current:-7d}" new_duration
if [ -z "$new_duration" ] || [ "$new_duration" = "$current" ]; then if [ -z "$new_duration" ]; then
log_info "No change made." log_info "No change made."
return 0 return 0
fi fi
# Only truly a no-op if BOTH keys already match — remember_me alone
# matching isn't enough to skip, or an install still carrying the old
# mismatched inactivity default (from before this function synced the
# two) could never actually get inactivity fixed by re-entering the
# same remember_me value. Confirmed live: this is exactly what
# happened on a box that had already set remember_me: 1y before this
# sync existed — re-running with "1y" again hit this early return and
# left inactivity untouched.
if [ "$new_duration" = "$current" ] && [ "$new_duration" = "$current_inactivity" ]; then
log_info "No change made — remember_me and inactivity already both ${new_duration}."
return 0
fi
if grep -qE '^ remember_me:' "$config_file"; then if grep -qE '^ remember_me:' "$config_file"; then
sed -i "s/^ remember_me:.*/ remember_me: '${new_duration}'/" "$config_file" sed -i "s/^ remember_me:.*/ remember_me: '${new_duration}'/" "$config_file"