fix(auth): support stream codes completely

This commit is contained in:
Prateek Sunal 2024-05-20 22:59:22 +05:30
parent 85396158aa
commit d104fc6788
3 changed files with 40 additions and 0 deletions

View file

@ -1,8 +1,12 @@
import 'package:ente_auth/models/code.dart'; import 'package:ente_auth/models/code.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:otp/otp.dart' as otp; import 'package:otp/otp.dart' as otp;
import 'package:steam_totp/steam_totp.dart';
String getOTP(Code code) { String getOTP(Code code) {
if (code.issuer.toLowerCase() == 'steam') {
return _getSteamCode(code);
}
if (code.type == Type.hotp) { if (code.type == Type.hotp) {
return _getHOTPCode(code); return _getHOTPCode(code);
} }
@ -26,7 +30,18 @@ String _getHOTPCode(Code code) {
); );
} }
String _getSteamCode(Code code, [bool isNext = false]) {
final SteamTOTP steamtotp = SteamTOTP(secret: code.secret);
return steamtotp.generate(
DateTime.now().millisecondsSinceEpoch ~/ 1000 + (isNext ? code.period : 0),
);
}
String getNextTotp(Code code) { String getNextTotp(Code code) {
if (code.issuer.toLowerCase() == 'steam') {
return _getSteamCode(code, true);
}
return otp.OTP.generateTOTPCodeString( return otp.OTP.generateTOTPCodeString(
getSanitizedSecret(code.secret), getSanitizedSecret(code.secret),
DateTime.now().millisecondsSinceEpoch + code.period * 1000, DateTime.now().millisecondsSinceEpoch + code.period * 1000,

View file

@ -745,6 +745,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.0" version: "2.1.0"
hashlib:
dependency: transitive
description:
name: hashlib
sha256: "67e640e19cc33070113acab3125cd48ebe480a0300e15554dec089b8878a729f"
url: "https://pub.dev"
source: hosted
version: "1.16.0"
hashlib_codecs:
dependency: transitive
description:
name: hashlib_codecs
sha256: "49e2a471f74b15f1854263e58c2ac11f2b631b5b12c836f9708a35397d36d626"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
hex: hex:
dependency: transitive dependency: transitive
description: description:
@ -1439,6 +1455,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.11.1" version: "1.11.1"
steam_totp:
dependency: "direct main"
description:
name: steam_totp
sha256: "3c09143c983f6bb05bb53e9232f9d40bbcc01c596ba0273c3e6bb246729abfa1"
url: "https://pub.dev"
source: hosted
version: "0.0.1"
step_progress_indicator: step_progress_indicator:
dependency: "direct main" dependency: "direct main"
description: description:

View file

@ -94,6 +94,7 @@ dependencies:
sqflite_common_ffi: ^2.3.0+4 sqflite_common_ffi: ^2.3.0+4
sqlite3: ^2.1.0 sqlite3: ^2.1.0
sqlite3_flutter_libs: ^0.5.19+1 sqlite3_flutter_libs: ^0.5.19+1
steam_totp: ^0.0.1
step_progress_indicator: ^1.0.2 step_progress_indicator: ^1.0.2
styled_text: ^8.1.0 styled_text: ^8.1.0
tray_manager: ^0.2.1 tray_manager: ^0.2.1