Allow TOTP to be reused (within its lifetime) #341
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When
FLATNOTES_AUTH_TYPEistotpthe user cannot log in, log out, and log back in within 30 seconds.This change address the issue.
How to reproduce the issue:
FLATNOTES_AUTH_TYPEistotp,FLATNOTES_USERNAMEandFLATNOTES_PASSWORDare defined.Expected results:
At step 5 login is successful given the correct username, password, and the current 2FA code.
Actual results:
Log in fails.
Discussion:
Flatnotes keeps track of the current 2FA code and does not allow it to be reused.
However the user can't get a new code on demand and pyotp rotates codes every 30 seconds.
So if the user logs in, logs out, and tries to log in again before a new 2FA code is available they'll get a confusing "incorrect login credentials" message and no recourse.
Given the pyotp behavior I'm not sure what's the purpose of the current Flatnotes logic.
This change allows 2FA codes to be reused as long as they match
totp.now()