@zach What doesn’t seem to work though is the phone callback. Push works, but phone callback results in a server error:
[thawing-thunder-2560][2023-05-29 08:26:23,229][ERROR] Exception on /key/duo [POST]
Traceback (most recent call last):
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/flask/app.py", line 2528, in wsgi_app
response = self.full_dispatch_request()
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/flask/app.py", line 1825, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/flask/app.py", line 1823, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/flask/app.py", line 1799, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/pritunl/auth/app.py", line 26, in _wrapped
return call(*args, **kwargs)
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/pritunl/handlers/key.py", line 2942, in key_duo_post
valid = duo_auth.authenticate()
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/pritunl/sso/duo.py", line 61, in authenticate
self._auth(factor)
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/pritunl/sso/duo.py", line 120, in _auth
self._auth('phone')
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/pritunl/sso/duo.py", line 127, in _auth
raise InvalidUser('Invalid username')
pritunl.exceptions.InvalidUser: Invalid username
[thawing-thunder-2560][2023-05-29 08:26:23,229][ERROR] Invalid Duo username
username = "username@company.com"
data = {"code": 40002, "message": "Invalid request parameters", "message_detail": "The phone factor is not supported on this account. Please contact Duo Support for more information.", "stat": "FAIL"}
Traceback (most recent call last):
File "/usr/lib/pritunl/usr/lib/python3.9/threading.py", line 937, in _bootstrap
self._bootstrap_inner()
File "/usr/lib/pritunl/usr/lib/python3.9/threading.py", line 980, in _bootstrap_inner
self.run()
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/cheroot/workers/threadpool.py", line 120, in run
keep_conn_open = conn.communicate()
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/cheroot/server.py", line 1287, in communicate
req.respond()
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/cheroot/server.py", line 1077, in respond
self.server.gateway(self).respond()
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/cheroot/wsgi.py", line 134, in respond
response = self.req.server.wsgi_app(self.env, self.start_response)
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/flask/app.py", line 2551, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/flask/app.py", line 2528, in wsgi_app
response = self.full_dispatch_request()
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/flask/app.py", line 1823, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/flask/app.py", line 1799, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/pritunl/auth/app.py", line 26, in _wrapped
return call(*args, **kwargs)
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/pritunl/handlers/key.py", line 2942, in key_duo_post
valid = duo_auth.authenticate()
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/pritunl/sso/duo.py", line 61, in authenticate
self._auth(factor)
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/pritunl/sso/duo.py", line 120, in _auth
self._auth('phone')
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/pritunl/sso/duo.py", line 122, in _auth
logger.error('Invalid Duo username',
File "/usr/lib/pritunl/usr/lib/python3.9/site-packages/pritunl/logger/__init__.py", line 55, in error
kwargs['traceback'] = traceback.format_stack()
I don’t understand if this is an issue on the Duo side, so I’ve opened a support ticket with them too.
However, if you know what the root cause is, please let me know.
Suggestion for improvement: I think that the exception handling in this part of the code could be improved, as it raises InvalidUser('Invalid username')
while it seems that the Duo error is unrelated: The phone factor is not supported on this account.
EDIT: Nevermind, it was a Duo policy configuration issue. It’s working now. Nevertheless, my suggestion for the error handling still applies 