12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- import 'package:auth_totp/auth_totp.dart';
- /// otpauth://totp/{}?secret={}&issuer={}
- class Totp {
- /// for persistent
- final String uri;
- final String issuer;
- final String secret;
- final int interval;
- Totp({
- required this.uri,
- required this.issuer,
- required this.secret,
- required this.interval,
- });
- String get now => AuthTOTP.generateTOTPCode(
- secretKey: secret,
- interval: interval,
- );
- static Totp? fromUri(String uri) {
- final totpUri = Uri.tryParse(uri);
- if (totpUri == null) return null;
- final query = totpUri.queryParameters;
- final secret = query["secret"];
- if (secret == null) return null;
- // final digit = query["digits"];
- final period = query["period"];
- final issuerQuery = query["issuer"];
- final lastPathSeg = totpUri.pathSegments.lastOrNull;
- final colonPos = lastPathSeg?.indexOf(":");
- final account = colonPos == null
- ? null
- : colonPos == -1
- ? lastPathSeg!
- : lastPathSeg!.substring(colonPos + 1);
- final issuer = issuerQuery == null
- ? lastPathSeg ?? "UNKNOWN"
- : "$issuerQuery${account == null ? "" : ":$account"}";
- return Totp(
- uri: uri,
- issuer: issuer,
- secret: secret,
- interval: period == null ? 30 : int.tryParse(period) ?? 30,
- );
- }
- }
|