Browse Source

Fix parsing and add tests

Neeraj Gupta 2 năm trước cách đây
mục cha
commit
0963ea7129
2 tập tin đã thay đổi với 16 bổ sung3 xóa
  1. 5 1
      lib/models/code.dart
  2. 11 2
      test/models/code_test.dart

+ 5 - 1
lib/models/code.dart

@@ -67,7 +67,10 @@ class Code {
 
 
   static String _getAccount(Uri uri) {
   static String _getAccount(Uri uri) {
     try {
     try {
-      final String path = Uri.decodeComponent(uri.path);
+      String path = Uri.decodeComponent(uri.path);
+      if (path.startsWith("/")) {
+        path = path.substring(1, path.length);
+      }
       // Parse account name from documented auth URI
       // Parse account name from documented auth URI
       // otpauth://totp/ACCOUNT?secret=SUPERSECRET&issuer=SERVICE
       // otpauth://totp/ACCOUNT?secret=SUPERSECRET&issuer=SERVICE
       if (uri.queryParameters.containsKey("issuer") && !path.contains(":")) {
       if (uri.queryParameters.containsKey("issuer") && !path.contains(":")) {
@@ -88,6 +91,7 @@ class Code {
         if (issuerName.contains("period=")) {
         if (issuerName.contains("period=")) {
           return issuerName.substring(0, issuerName.indexOf("period="));
           return issuerName.substring(0, issuerName.indexOf("period="));
         }
         }
+        return issuerName;
       }
       }
       final String path = Uri.decodeComponent(uri.path);
       final String path = Uri.decodeComponent(uri.path);
       return path.split(':')[0].substring(1);
       return path.split(':')[0].substring(1);

+ 11 - 2
test/models/code_test.dart

@@ -6,8 +6,17 @@ void main() {
     final code1 = Code.fromRawData(
     final code1 = Code.fromRawData(
       "otpauth://totp/example%20finance%3Aee%40ff.gg?secret=ASKZNWOU6SVYAMVS",
       "otpauth://totp/example%20finance%3Aee%40ff.gg?secret=ASKZNWOU6SVYAMVS",
     );
     );
-    expect(code1.issuer, "example finance");
-    expect(code1.account, "ee@ff.gg");
+    expect(code1.issuer, "example finance", reason: "issuerMismatch");
+    expect(code1.account, "ee@ff.gg", reason: "accountMismatch");
     expect(code1.secret, "ASKZNWOU6SVYAMVS");
     expect(code1.secret, "ASKZNWOU6SVYAMVS");
   });
   });
+
+  test("parseDocumentedFormat", () {
+    final code = Code.fromRawData(
+      "otpauth://totp/testdata@ente.io?secret=ASKZNWOU6SVYAMVS&issuer=GitHub",
+    );
+    expect(code.issuer, "GitHub", reason: "issuerMismatch");
+    expect(code.account, "testdata@ente.io", reason: "accountMismatch");
+    expect(code.secret, "ASKZNWOU6SVYAMVS");
+  });
 }
 }