diff --git a/lib/models/code.dart b/lib/models/code.dart index c21c4ac24..4c05c11dc 100644 --- a/lib/models/code.dart +++ b/lib/models/code.dart @@ -1,3 +1,5 @@ +import 'package:ente_auth/utils/totp_util.dart'; + class Code { static const defaultDigits = 6; static const defaultPeriod = 30; @@ -51,7 +53,7 @@ class Code { _getIssuer(uri), _getDigits(uri), _getPeriod(uri), - uri.queryParameters['secret']!, + getSanitizedSecret(uri.queryParameters['secret']!), _getAlgorithm(uri), _getType(uri), rawData, diff --git a/lib/utils/totp_util.dart b/lib/utils/totp_util.dart index 28c8d7d88..336689810 100644 --- a/lib/utils/totp_util.dart +++ b/lib/utils/totp_util.dart @@ -3,7 +3,7 @@ import 'package:otp/otp.dart' as otp; String getTotp(Code code) { return otp.OTP.generateTOTPCodeString( - code.secret, + getSanitizedSecret(code.secret), DateTime.now().millisecondsSinceEpoch, length: code.digits, interval: code.period, @@ -14,7 +14,7 @@ String getTotp(Code code) { String getNextTotp(Code code) { return otp.OTP.generateTOTPCodeString( - code.secret, + getSanitizedSecret(code.secret), DateTime.now().millisecondsSinceEpoch + code.period * 1000, length: code.digits, interval: code.period, @@ -33,3 +33,7 @@ otp.Algorithm _getAlgorithm(Code code) { return otp.Algorithm.SHA1; } } + +String getSanitizedSecret(String secret) { + return secret.toUpperCase().trim(); +}