@Override
    public Directory<UserGroup> getUserGroupDirectory() throws GuacamoleException {
        return new DecoratingDirectory<UserGroup>(super.getUserGroupDirectory()) {
           
            @Override
            protected UserGroup decorate(UserGroup object) {
                return new TOTPUserGroup(object);
            }
            
            @Override
            protected UserGroup undecorate(UserGroup object) {
                assert(object instanceof TOTPUserGroup);
                return ((TOTPUserGroup) object).getUndecorated();
            }
            
        };
    }
Creates a new TOTPUserContext which wraps the given UserContext,
providing (or hiding) additional TOTP-specific data.

@param userContext
    The UserContext to wrap.
extensions/guacamole-auth-totp/src/main/java/org/apache/guacamole/auth/totp/user/TOTPUserContext.java