ha-bambulab icon indicating copy to clipboard operation
ha-bambulab copied to clipboard

[Bug] 2FA is not supported

Open Schluggi opened this issue 2 years ago • 5 comments

Describe the bug

I'm unable to connect via cloud MQTT while 2FA is activated for my account. Please add support.

To Reproduce

  1. Enable 2FA in your bambulab account settings image

  2. Add the printer in HA image

Expected Behaviour

Getting a 2FA input field after entering the login information.

What device are you using?

P1P

Diagnostic Output

-

Log Extracts

Logger: aiohttp.server
Source: /usr/local/lib/python3.11/site-packages/aiohttp/web_protocol.py:403
First occurred: 18:38:41 (1 occurrences)
Last logged: 18:38:41

Error handling request
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/aiohttp/web_protocol.py", line 433, in _handle_request
    resp = await request_handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohttp/web_app.py", line 504, in _handle
    resp = await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohttp/web_middlewares.py", line 117, in impl
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 85, in security_filter_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 100, in forwarded_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 28, in request_context_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 80, in ban_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 236, in auth_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/headers.py", line 31, in headers_middleware
    response = await handler(request)
               ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/view.py", line 148, in handle
    result = await handler(request, **request.match_info)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/decorators.py", line 63, in with_admin
    return await func(self, request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 234, in post
    return await super().post(request, flow_id)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/data_validator.py", line 72, in wrapper
    result = await method(view, request, data, *args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py", line 110, in post
    result = await self._flow_mgr.async_configure(flow_id, data)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 293, in async_configure
    result = await self._async_handle_step(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 394, in _async_handle_step
    result: FlowResult = await getattr(flow, method)(user_input)
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/bambu_lab/config_flow.py", line 284, in async_step_Bambu
    username = get_username_from_authentication_token(authToken)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/bambu_lab/config_flow.py", line 74, in get_username_from_authentication_token
    b64_string = authToken.split(".")[1]
                 ~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range

Other Information

Workaround:

  1. Disable 2FA
  2. Add the printer
  3. Enable 2FA

Since the OAuth token is persistent, this will work :)

Schluggi avatar Oct 08 '23 16:10 Schluggi

Can confirm. I'm experiencing the same issue.

TheDuffman85 avatar Nov 03 '23 14:11 TheDuffman85

This one is going to be quite frankly, rather difficult to solve. Bambu authentication isn't a public provider, so would require some reverse engineering. To be honest, I'm not sure if this is something we want to dive into either. It could be that we push the workaround above for now?

greghesp avatar Nov 05 '23 19:11 greghesp

Would be fine I guess. But there should be a descriptive error message instead of a random error.

TheDuffman85 avatar Nov 05 '23 19:11 TheDuffman85

Stale issue message

github-actions[bot] avatar Jan 05 '24 08:01 github-actions[bot]

Stale issue message

github-actions[bot] avatar Mar 21 '24 08:03 github-actions[bot]