Tom P created GUACAMOLE-2140:
--------------------------------

             Summary: PI support for persisting TOTP disable attributes when 
TOTP is globally enabled
                 Key: GUACAMOLE-2140
                 URL: https://issues.apache.org/jira/browse/GUACAMOLE-2140
             Project: Guacamole
          Issue Type: Improvement
          Components: guacamole, guacamole-auth-jdbc, guacamole-auth-totp
    Affects Versions: 1.6.0
         Environment: Guacamole Version: 1.6.0
Deployment: Docker containers with two-phase deployment
Authentication: Database with TOTP extension
            Reporter: Tom P


h2. Summary

Requesting API support for persisting TOTP disable attributes when TOTP is 
globally enabled, avoiding database workarounds during automated deployment.
h2. Use Case: Automated Deployment

Our deployment scenario requires:
 * {*}Global TOTP{*}: Enabled for all new users by default{*}{*}
 * {*}API automation user{*}: TOTP disabled for programmatic access
 * {*}Custom admin user{*}: TOTP enabled for interactive use

This configuration enables automation workflows that cannot handle interactive 
TOTP challenges.
h2. Current Problem

Automated installed is done in 2 phases
 # Automated user creation with TOTP disabled attribute
 # Enabling TOTP

When TOTP is *not globally enabled* ('Phase 1'), the REST API correctly 
processes TOTP disable attributes:
{code:python}
# This approach WORKS during Phase 1 (TOTP not globally enabled)
api_attributes = {"guac-totp-disabled": "true"}
client.create_user(api_user, api_pass, api_attributes)
client.update_user_attributes(api_user, {"guac-totp-disabled": "true"})
{code}
However, when TOTP is *globally enabled* ('Phase 2'), the TOTP module 
*overwrites/removes* the disable attribute:
{code:sql}
-- Before Phase 2 (TOTP globally enabled):
username        | attribute_name     | attribute_value
eiguacadmin-api | guac-totp-disabled | true

-- After Phase 2 (TOTP globally enabled):
username        | attribute_name        | attribute_value
eiguacadmin-api | guac-totp-key-confirmed | true
eiguacadmin-api | guac-totp-key-secret    | ABC46UT52UQHC4P3LW5FZYQ4IN7JXYZ
-- guac-totp-disabled attribute was REMOVED
{code}
h3. Root Cause

The TOTP module does not respect existing {{guac-totp-disabled}} attributes 
when TOTP is enabled globally - it forces enrolment and removes disable flags.
h2. Current Workaround

Database manipulation is required to restore the disable attribute:
{code:sql}
-- Restore the disable attribute
INSERT INTO guacamole_user_attribute (user_id, attribute_name, attribute_value)
VALUES (user_id, 'guac-totp-disabled', 'true')
ON DUPLICATE KEY UPDATE attribute_value='true';

-- Clear forced enrolment
DELETE FROM guacamole_user_attribute
WHERE user_id = user_id
AND attribute_name IN ('guac-totp-key-secret', 'guac-totp-key-confirmed');
{code}
h2. Proposed Improvement

Modify the TOTP module to respect existing {{guac-totp-disabled}} attributes 
when global TOTP is enabled
h2. Benefits
 * Eliminates need for database workarounds



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to