From a9be02621e87a594ecdcc0be60ac19a6fbfee389 Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Wed, 12 Jun 2019 13:17:30 +0800 Subject: [PATCH 1/3] Update md5 function load by assets Fix: md5.dart complie error but can't use it --- assets/md5.js | 1 + ios/Podfile.lock | 4 +- ios/Runner.xcodeproj/project.pbxproj | 2 +- lib/pages/login_page.dart | 12 +- lib/utils/md5.dart | 975 ++++++++------------------- pubspec.yaml | 1 + 6 files changed, 280 insertions(+), 715 deletions(-) create mode 100644 assets/md5.js diff --git a/assets/md5.js b/assets/md5.js new file mode 100644 index 0000000..f80178f --- /dev/null +++ b/assets/md5.js @@ -0,0 +1 @@ +var hexcase=0;function hex_md5(r){return rstr2hex(rstr_md5(str2rstr_utf8(r)))}function hex_hmac_md5(r,d){return rstr2hex(rstr_hmac_md5(str2rstr_utf8(r),str2rstr_utf8(d)))}function md5_vm_test(){return"900150983cd24fb0d6963f7d28e17f72"==hex_md5("abc").toLowerCase()}function rstr_md5(r){return binl2rstr(binl_md5(rstr2binl(r),8*r.length))}function rstr_hmac_md5(r,d){var e=rstr2binl(r);e.length>16&&(e=binl_md5(e,8*r.length));for(var t=Array(16),a=Array(16),n=0;n<16;n++)t[n]=909522486^e[n],a[n]=1549556828^e[n];var h=binl_md5(t.concat(rstr2binl(d)),512+8*d.length);return binl2rstr(binl_md5(a.concat(h),640))}function rstr2hex(r){for(var d,e=hexcase?"0123456789ABCDEF":"0123456789abcdef",t="",a=0;a>>4&15)+e.charAt(15&d);return t}function str2rstr_utf8(r){for(var d,e,t="",a=-1;++a>>6&31,128|63&d):d<=65535?t+=String.fromCharCode(224|d>>>12&15,128|d>>>6&63,128|63&d):d<=2097151&&(t+=String.fromCharCode(240|d>>>18&7,128|d>>>12&63,128|d>>>6&63,128|63&d));return t}function rstr2binl(r){for(var d=Array(r.length>>2),e=0;e>5]|=(255&r.charCodeAt(e/8))<>5]>>>e%32&255);return d}function binl_md5(r,d){r[d>>5]|=128<>>9<<4)]=d;for(var e=1732584193,t=-271733879,a=-1732584194,n=271733878,h=0;h>16)+(d>>16)+(e>>16)<<16|65535&e}function bit_rol(r,d){return r<>>32-d}function base64_md5(r){return base64encode(rstr_md5(str2rstr_utf8(r)))}var base64EncodeChars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",base64DecodeChars=new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1);function base64encode(r){var d,e,t,a,n,h;for(t=r.length,e=0,d="";e>2),d+=base64EncodeChars.charAt((3&a)<<4),d+="==";break}if(n=r.charCodeAt(e++),e==t){d+=base64EncodeChars.charAt(a>>2),d+=base64EncodeChars.charAt((3&a)<<4|(240&n)>>4),d+=base64EncodeChars.charAt((15&n)<<2),d+="=";break}h=r.charCodeAt(e++),d+=base64EncodeChars.charAt(a>>2),d+=base64EncodeChars.charAt((3&a)<<4|(240&n)>>4),d+=base64EncodeChars.charAt((15&n)<<2|(192&h)>>6),d+=base64EncodeChars.charAt(63&h)}return d}function base64decode(r){var d,e,t,a,n,h,m;for(h=r.length,n=0,m="";n>4);do{if(61==(t=255&r.charCodeAt(n++)))return m;t=base64DecodeChars[t]}while(n>2);do{if(61==(a=255&r.charCodeAt(n++)))return m;a=base64DecodeChars[a]}while(n=1&&a<=127?d+=r.charAt(e):a>2047?(d+=String.fromCharCode(224|a>>12&15),d+=String.fromCharCode(128|a>>6&63),d+=String.fromCharCode(128|a>>0&63)):(d+=String.fromCharCode(192|a>>6&31),d+=String.fromCharCode(128|a>>0&63));return d}function utf8to16(r){var d,e,t,a,n,h;for(d="",t=r.length,e=0;e>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:d+=r.charAt(e-1);break;case 12:case 13:n=r.charCodeAt(e++),d+=String.fromCharCode((31&a)<<6|63&n);break;case 14:n=r.charCodeAt(e++),h=r.charCodeAt(e++),d+=String.fromCharCode((15&a)<<12|(63&n)<<6|(63&h)<<0)}return d} \ No newline at end of file diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 1b4579b..02fc6b9 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -126,7 +126,7 @@ DEPENDENCIES: - firebase_crashlytics (from `.symlinks/plugins/firebase_crashlytics/ios`) - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`) - firebase_remote_config (from `.symlinks/plugins/firebase_remote_config/ios`) - - Flutter (from `.symlinks/flutter/ios`) + - Flutter (from `.symlinks/flutter/ios-release`) - flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`) - package_info (from `.symlinks/plugins/package_info/ios`) - path_provider (from `.symlinks/plugins/path_provider/ios`) @@ -165,7 +165,7 @@ EXTERNAL SOURCES: firebase_remote_config: :path: ".symlinks/plugins/firebase_remote_config/ios" Flutter: - :path: ".symlinks/flutter/ios" + :path: ".symlinks/flutter/ios-release" flutter_local_notifications: :path: ".symlinks/plugins/flutter_local_notifications/ios" package_info: diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 2e4c9e9..ab39150 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -323,7 +323,7 @@ inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", "${BUILT_PRODUCTS_DIR}/FMDB/FMDB.framework", - "${PODS_ROOT}/../.symlinks/flutter/ios/Flutter.framework", + "${PODS_ROOT}/../.symlinks/flutter/ios-release/Flutter.framework", "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework", "${BUILT_PRODUCTS_DIR}/Protobuf/Protobuf.framework", "${BUILT_PRODUCTS_DIR}/flutter_local_notifications/flutter_local_notifications.framework", diff --git a/lib/pages/login_page.dart b/lib/pages/login_page.dart index edf2300..2ea41dd 100644 --- a/lib/pages/login_page.dart +++ b/lib/pages/login_page.dart @@ -4,6 +4,7 @@ import 'dart:io'; import 'package:encrypt/encrypt.dart'; import 'package:firebase_remote_config/firebase_remote_config.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart' show rootBundle; import 'package:nsysu_ap/config/constants.dart'; import 'package:nsysu_ap/res/colors.dart' as Resource; import 'package:nsysu_ap/utils/app_localizations.dart'; @@ -51,6 +52,11 @@ class LoginPageState extends State _getPreference(); _checkUpdate(); } + f(); + } + + f() async { + //print(MD5.base64_md5("Rain5345")); } @override @@ -72,11 +78,13 @@ class LoginPageState extends State children: [ SizedBox( child: WebView( - initialUrl: 'https://sso.nsysu.edu.tw/index.php/passport/login', javascriptMode: JavascriptMode.unrestricted, - onWebViewCreated: (controller) { + onWebViewCreated: (controller) async { print('onWebViewCreated = $controller'); + //source https://sso.nsysu.edu.tw/public/js/md5.js + String code = await rootBundle.loadString('assets/md5.js'); Helper.controller = controller; + Helper.controller.evaluateJavascript(code); }, onPageFinished: (s) { print('onPageFinished = $s'); diff --git a/lib/utils/md5.dart b/lib/utils/md5.dart index bf8ae0a..54c5ab8 100644 --- a/lib/utils/md5.dart +++ b/lib/utils/md5.dart @@ -8,6 +8,10 @@ // */ //int hexcase = 0; // +//int zeroFillRightShift(int n, int amount) { +// return (n & 0xffffffff) >> amount; +//} +// //hex_md5(a) { // return rstr2hex(rstr_md5(str2rstr_utf8(a))); //} @@ -30,13 +34,13 @@ // e = binl_md5(e, c.length * 8); // } // List a = List(16); -// List d = List(16); +// List d = List(16); // for (var b = 0; b < 16; b++) { // a[b] = e[b] ^ 909522486; // d[b] = e[b] ^ 1549556828; // } -// var g = binl_md5(a.concat(rstr2binl(f)), 512 + f.length * 8); -// return binl2rstr(binl_md5(d.concat(g), 512 + 128)); +// var g = binl_md5((a + rstr2binl(f)), 512 + f.length * 8); +// return binl2rstr(binl_md5(d + g, 512 + 128)); //} // //rstr2hex(c) { @@ -45,23 +49,23 @@ // } catch (g) { // hexcase = 0; // } -// var f = hexcase==0 ? "0123456789ABCDEF" : "0123456789abcdef"; +// var f = hexcase == 0 ? "0123456789ABCDEF" : "0123456789abcdef"; // var b = ""; // var a; // for (var d = 0; d < c.length; d++) { -// a = c.charCodeAt(d); -// b += f[(a >>> 4) & 15] + f[a & 15)] +// a = c.codeUnitAt(d); +// b += f[zeroFillRightShift(a, 4) & 15] + f[a & 15]; // } // return b; //} // -//str2rstr_utf8(c) { +//str2rstr_utf8(String c) { // var b = ""; // var d = -1; // var a, e; // while (++d < c.length) { -// a = c.charCodeAt(d); -// e = d + 1 < c.length ? c.charCodeAt(d + 1) : 0; +// a = c.codeUnitAt(d); +// e = d + 1 < c.length ? c.codeUnitAt(d + 1) : 0; // if (55296 <= a && a <= 56319 && 56320 <= e && e <= 57343) { // a = 65536 + ((a & 1023) << 10) + (e & 1023); // d++; @@ -70,46 +74,50 @@ // b += String.fromCharCode(a); // } else { // if (a <= 2047) { -// b += String.fromCharCode(192 | ((a >>> 6) & 31), 128 | (a & 63)); +// b += String.fromCharCode(192 | (zeroFillRightShift(a, 6) & 31)) + +// String.fromCharCode(128 | (a & 63)); // } else { // if (a <= 65535) { -// b += String.fromCharCode( -// 224 | ((a >>> 12) & 15), 128 | ((a >>> 6) & 63), 128 | (a & 63)); +// b += String.fromCharCode(224 | (zeroFillRightShift(a, 12) & 15)) + +// String.fromCharCode(128 | (zeroFillRightShift(a, 6) & 63)) + +// String.fromCharCode(128 | (a & 63)); // } else { // if (a <= 2097151) { -// b += String.fromCharCode( -// 240 | ((a >>> 18) & 7), 128 | ((a >>> 12) & 63), -// 128 | ((a >>> 6) & 63), 128 | (a & 63)); +// b += String.fromCharCode(240 | (zeroFillRightShift(a, 18) & 7)) + +// String.fromCharCode(128 | (zeroFillRightShift(a, 12) & 63)) + +// String.fromCharCode(128 | (zeroFillRightShift(a, 6) & 63)) + +// String.fromCharCode(128 | (a & 63)); // } // } // } // } // } -// return b +// return b; //} // //rstr2binl(b) { -// var a = Array(b.length >> 2); +// var a = List(b.length >> 2); // for (var c = 0; c < a.length; c++) { -// a[c] = 0 +// a[c] = 0; // } // for (var c = 0; c < b.length * 8; c += 8) { -// a[c >> 5] |= (b.charCodeAt(c / 8) & 255) << (c % 32) +// a[c >> 5] |= (b.codeUnitAt(c ~/ 8) & 255) << (c % 32); // } -// return a +// return a; //} // //binl2rstr(b) { // var a = ""; // for (var c = 0; c < b.length * 32; c += 8) { -// a += String.fromCharCode((b[c >> 5] >>> (c % 32)) & 255); } -// return -// a +// a += String.fromCharCode(zeroFillRightShift(b[c >> 5], (c % 32)) & 255); +// } +// return a; //} // //binl_md5(p, k) { +// print('k = $p'); // p[k >> 5] |= 128 << ((k) % 32); -// p[(((k + 64) >>> 9) << 4) + 14] = k; +// p[(zeroFillRightShift((k + 64), 9) << 4) + 14] = k; // var o = 1732584193; // var n = -271733879; // var m = -1732584194; @@ -119,524 +127,76 @@ // var h = n; // var f = m; // var e = l; -// o = md5_ff( -// o, -// n, -// m, -// l, -// p[g + 0], -// 7, -// -680876936); -// l = md5_ff( -// l, -// o, -// n, -// m, -// p[g + 1], -// 12, -// -389564586); -// m = md5_ff( -// m, -// l, -// o, -// n, -// p[g + 2], -// 17, -// 606105819); -// n = md5_ff( -// n, -// m, -// l, -// o, -// p[g + 3], -// 22, -// -1044525330); -// o = md5_ff( -// o, -// n, -// m, -// l, -// p[g + 4], -// 7, -// -176418897); -// l = md5_ff( -// l, -// o, -// n, -// m, -// p[g + 5], -// 12, -// 1200080426); -// m = md5_ff( -// m, -// l, -// o, -// n, -// p[g + 6], -// 17, -// -1473231341); -// n = md5_ff( -// n, -// m, -// l, -// o, -// p[g + 7], -// 22, -// -45705983); -// o = md5_ff( -// o, -// n, -// m, -// l, -// p[g + 8], -// 7, -// 1770035416); -// l = md5_ff( -// l, -// o, -// n, -// m, -// p[g + 9], -// 12, -// -1958414417); -// m = md5_ff( -// m, -// l, -// o, -// n, -// p[g + 10], -// 17, -// -42063); -// n = md5_ff( -// n, -// m, -// l, -// o, -// p[g + 11], -// 22, -// -1990404162); -// o = md5_ff( -// o, -// n, -// m, -// l, -// p[g + 12], -// 7, -// 1804603682); -// l = md5_ff( -// l, -// o, -// n, -// m, -// p[g + 13], -// 12, -// -40341101); -// m = md5_ff( -// m, -// l, -// o, -// n, -// p[g + 14], -// 17, -// -1502002290); -// n = md5_ff( -// n, -// m, -// l, -// o, -// p[g + 15], -// 22, -// 1236535329); -// o = md5_gg( -// o, -// n, -// m, -// l, -// p[g + 1], -// 5, -// -165796510); -// l = md5_gg( -// l, -// o, -// n, -// m, -// p[g + 6], -// 9, -// -1069501632); -// m = md5_gg( -// m, -// l, -// o, -// n, -// p[g + 11], -// 14, -// 643717713); -// n = md5_gg( -// n, -// m, -// l, -// o, -// p[g + 0], -// 20, -// -373897302); -// o = md5_gg( -// o, -// n, -// m, -// l, -// p[g + 5], -// 5, -// -701558691); -// l = md5_gg( -// l, -// o, -// n, -// m, -// p[g + 10], -// 9, -// 38016083); -// m = md5_gg( -// m, -// l, -// o, -// n, -// p[g + 15], -// 14, -// -660478335); -// n = md5_gg( -// n, -// m, -// l, -// o, -// p[g + 4], -// 20, -// -405537848); -// o = md5_gg( -// o, -// n, -// m, -// l, -// p[g + 9], -// 5, -// 568446438); -// l = md5_gg( -// l, -// o, -// n, -// m, -// p[g + 14], -// 9, -// -1019803690); -// m = md5_gg( -// m, -// l, -// o, -// n, -// p[g + 3], -// 14, -// -187363961); -// n = md5_gg( -// n, -// m, -// l, -// o, -// p[g + 8], -// 20, -// 1163531501); -// o = md5_gg( -// o, -// n, -// m, -// l, -// p[g + 13], -// 5, -// -1444681467); -// l = md5_gg( -// l, -// o, -// n, -// m, -// p[g + 2], -// 9, -// -51403784); -// m = md5_gg( -// m, -// l, -// o, -// n, -// p[g + 7], -// 14, -// 1735328473); -// n = md5_gg( -// n, -// m, -// l, -// o, -// p[g + 12], -// 20, -// -1926607734); -// o = md5_hh( -// o, -// n, -// m, -// l, -// p[g + 5], -// 4, -// -378558); -// l = md5_hh( -// l, -// o, -// n, -// m, -// p[g + 8], -// 11, -// -2022574463); -// m = md5_hh( -// m, -// l, -// o, -// n, -// p[g + 11], -// 16, -// 1839030562); -// n = md5_hh( -// n, -// m, -// l, -// o, -// p[g + 14], -// 23, -// -35309556); -// o = md5_hh( -// o, -// n, -// m, -// l, -// p[g + 1], -// 4, -// -1530992060); -// l = md5_hh( -// l, -// o, -// n, -// m, -// p[g + 4], -// 11, -// 1272893353); -// m = md5_hh( -// m, -// l, -// o, -// n, -// p[g + 7], -// 16, -// -155497632); -// n = md5_hh( -// n, -// m, -// l, -// o, -// p[g + 10], -// 23, -// -1094730640); -// o = md5_hh( -// o, -// n, -// m, -// l, -// p[g + 13], -// 4, -// 681279174); -// l = md5_hh( -// l, -// o, -// n, -// m, -// p[g + 0], -// 11, -// -358537222); -// m = md5_hh( -// m, -// l, -// o, -// n, -// p[g + 3], -// 16, -// -722521979); -// n = md5_hh( -// n, -// m, -// l, -// o, -// p[g + 6], -// 23, -// 76029189); -// o = md5_hh( -// o, -// n, -// m, -// l, -// p[g + 9], -// 4, -// -640364487); -// l = md5_hh( -// l, -// o, -// n, -// m, -// p[g + 12], -// 11, -// -421815835); -// m = md5_hh( -// m, -// l, -// o, -// n, -// p[g + 15], -// 16, -// 530742520); -// n = md5_hh( -// n, -// m, -// l, -// o, -// p[g + 2], -// 23, -// -995338651); -// o = md5_ii( -// o, -// n, -// m, -// l, -// p[g + 0], -// 6, -// -198630844); -// l = md5_ii( -// l, -// o, -// n, -// m, -// p[g + 7], -// 10, -// 1126891415); -// m = md5_ii( -// m, -// l, -// o, -// n, -// p[g + 14], -// 15, -// -1416354905); -// n = md5_ii( -// n, -// m, -// l, -// o, -// p[g + 5], -// 21, -// -57434055); -// o = md5_ii( -// o, -// n, -// m, -// l, -// p[g + 12], -// 6, -// 1700485571); -// l = md5_ii( -// l, -// o, -// n, -// m, -// p[g + 3], -// 10, -// -1894986606); -// m = md5_ii( -// m, -// l, -// o, -// n, -// p[g + 10], -// 15, -// -1051523); -// n = md5_ii( -// n, -// m, -// l, -// o, -// p[g + 1], -// 21, -// -2054922799); -// o = md5_ii( -// o, -// n, -// m, -// l, -// p[g + 8], -// 6, -// 1873313359); -// l = md5_ii( -// l, -// o, -// n, -// m, -// p[g + 15], -// 10, -// -30611744); -// m = md5_ii( -// m, -// l, -// o, -// n, -// p[g + 6], -// 15, -// -1560198380); -// n = md5_ii( -// n, -// m, -// l, -// o, -// p[g + 13], -// 21, -// 1309151649); -// o = md5_ii( -// o, -// n, -// m, -// l, -// p[g + 4], -// 6, -// -145523070); -// l = md5_ii( -// l, -// o, -// n, -// m, -// p[g + 11], -// 10, -// -1120210379); -// m = md5_ii( -// m, -// l, -// o, -// n, -// p[g + 2], -// 15, -// 718787259); -// n = md5_ii( -// n, -// m, -// l, -// o, -// p[g + 9], -// 21, -// -343485551); +// o = md5_ff(o, n, m, l, p[g + 0], 7, -680876936); +// l = md5_ff(l, o, n, m, p[g + 1], 12, -389564586); +// m = md5_ff(m, l, o, n, p[g + 2], 17, 606105819); +// n = md5_ff(n, m, l, o, p[g + 3], 22, -1044525330); +// o = md5_ff(o, n, m, l, p[g + 4], 7, -176418897); +// l = md5_ff(l, o, n, m, p[g + 5], 12, 1200080426); +// m = md5_ff(m, l, o, n, p[g + 6], 17, -1473231341); +// n = md5_ff(n, m, l, o, p[g + 7], 22, -45705983); +// o = md5_ff(o, n, m, l, p[g + 8], 7, 1770035416); +// l = md5_ff(l, o, n, m, p[g + 9], 12, -1958414417); +// m = md5_ff(m, l, o, n, p[g + 10], 17, -42063); +// n = md5_ff(n, m, l, o, p[g + 11], 22, -1990404162); +// o = md5_ff(o, n, m, l, p[g + 12], 7, 1804603682); +// l = md5_ff(l, o, n, m, p[g + 13], 12, -40341101); +// m = md5_ff(m, l, o, n, p[g + 14], 17, -1502002290); +// n = md5_ff(n, m, l, o, p[g + 15], 22, 1236535329); +// o = md5_gg(o, n, m, l, p[g + 1], 5, -165796510); +// l = md5_gg(l, o, n, m, p[g + 6], 9, -1069501632); +// m = md5_gg(m, l, o, n, p[g + 11], 14, 643717713); +// n = md5_gg(n, m, l, o, p[g + 0], 20, -373897302); +// o = md5_gg(o, n, m, l, p[g + 5], 5, -701558691); +// l = md5_gg(l, o, n, m, p[g + 10], 9, 38016083); +// m = md5_gg(m, l, o, n, p[g + 15], 14, -660478335); +// n = md5_gg(n, m, l, o, p[g + 4], 20, -405537848); +// o = md5_gg(o, n, m, l, p[g + 9], 5, 568446438); +// l = md5_gg(l, o, n, m, p[g + 14], 9, -1019803690); +// m = md5_gg(m, l, o, n, p[g + 3], 14, -187363961); +// n = md5_gg(n, m, l, o, p[g + 8], 20, 1163531501); +// o = md5_gg(o, n, m, l, p[g + 13], 5, -1444681467); +// l = md5_gg(l, o, n, m, p[g + 2], 9, -51403784); +// m = md5_gg(m, l, o, n, p[g + 7], 14, 1735328473); +// n = md5_gg(n, m, l, o, p[g + 12], 20, -1926607734); +// o = md5_hh(o, n, m, l, p[g + 5], 4, -378558); +// l = md5_hh(l, o, n, m, p[g + 8], 11, -2022574463); +// m = md5_hh(m, l, o, n, p[g + 11], 16, 1839030562); +// n = md5_hh(n, m, l, o, p[g + 14], 23, -35309556); +// o = md5_hh(o, n, m, l, p[g + 1], 4, -1530992060); +// l = md5_hh(l, o, n, m, p[g + 4], 11, 1272893353); +// m = md5_hh(m, l, o, n, p[g + 7], 16, -155497632); +// n = md5_hh(n, m, l, o, p[g + 10], 23, -1094730640); +// o = md5_hh(o, n, m, l, p[g + 13], 4, 681279174); +// l = md5_hh(l, o, n, m, p[g + 0], 11, -358537222); +// m = md5_hh(m, l, o, n, p[g + 3], 16, -722521979); +// n = md5_hh(n, m, l, o, p[g + 6], 23, 76029189); +// o = md5_hh(o, n, m, l, p[g + 9], 4, -640364487); +// l = md5_hh(l, o, n, m, p[g + 12], 11, -421815835); +// m = md5_hh(m, l, o, n, p[g + 15], 16, 530742520); +// n = md5_hh(n, m, l, o, p[g + 2], 23, -995338651); +// o = md5_ii(o, n, m, l, p[g + 0], 6, -198630844); +// l = md5_ii(l, o, n, m, p[g + 7], 10, 1126891415); +// m = md5_ii(m, l, o, n, p[g + 14], 15, -1416354905); +// n = md5_ii(n, m, l, o, p[g + 5], 21, -57434055); +// o = md5_ii(o, n, m, l, p[g + 12], 6, 1700485571); +// l = md5_ii(l, o, n, m, p[g + 3], 10, -1894986606); +// m = md5_ii(m, l, o, n, p[g + 10], 15, -1051523); +// n = md5_ii(n, m, l, o, p[g + 1], 21, -2054922799); +// o = md5_ii(o, n, m, l, p[g + 8], 6, 1873313359); +// l = md5_ii(l, o, n, m, p[g + 15], 10, -30611744); +// m = md5_ii(m, l, o, n, p[g + 6], 15, -1560198380); +// n = md5_ii(n, m, l, o, p[g + 13], 21, 1309151649); +// o = md5_ii(o, n, m, l, p[g + 4], 6, -145523070); +// l = md5_ii(l, o, n, m, p[g + 11], 10, -1120210379); +// m = md5_ii(m, l, o, n, p[g + 2], 15, 718787259); +// n = md5_ii(n, m, l, o, p[g + 9], 21, -343485551); // o = safe_add(o, j); // n = safe_add(n, h); // m = safe_add(m, f); // l = safe_add(l, e); // } -// return Array(o, n, m, l); +// return [o, n, m, l]; //} // //md5_cmn(h, e, d, c, g, f) { @@ -666,142 +226,145 @@ //} // //bit_rol(a, b) { -// return (a << b) | (a >>> (32 - b)); } +// return (a << b) | zeroFillRightShift(a, (32 - b)); +//} // -//base64_md5(a) { -// return base64encode(rstr_md5(str2rstr_utf8(a))) +//base64_md5(String a) { +// return base64encode(rstr_md5(str2rstr_utf8(a))); //} // -//String base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +//String base64EncodeChars = +// "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; //var base64DecodeChars = [ -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// 62, -// -1, -// -1, -// -1, -// 63, -// 52, -// 53, -// 54, -// 55, -// 56, -// 57, -// 58, -// 59, -// 60, -// 61, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// 0, -// 1, -// 2, -// 3, -// 4, -// 5, -// 6, -// 7, -// 8, -// 9, -// 10, -// 11, -// 12, -// 13, -// 14, -// 15, -// 16, -// 17, -// 18, -// 19, -// 20, -// 21, -// 22, -// 23, -// 24, -// 25, -// -1, -// -1, -// -1, -// -1, -// -1, -// -1, -// 26, -// 27, -// 28, -// 29, -// 30, -// 31, -// 32, -// 33, -// 34, -// 35, -// 36, -// 37, -// 38, -// 39, -// 40, -// 41, -// 42, -// 43, -// 44, -// 45, -// 46, -// 47, -// 48, -// 49, -// 50, -// 51, -// -1, -// -1, -// -1, -// -1, -// -1]; +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// 62, +// -1, +// -1, +// -1, +// 63, +// 52, +// 53, +// 54, +// 55, +// 56, +// 57, +// 58, +// 59, +// 60, +// 61, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// 0, +// 1, +// 2, +// 3, +// 4, +// 5, +// 6, +// 7, +// 8, +// 9, +// 10, +// 11, +// 12, +// 13, +// 14, +// 15, +// 16, +// 17, +// 18, +// 19, +// 20, +// 21, +// 22, +// 23, +// 24, +// 25, +// -1, +// -1, +// -1, +// -1, +// -1, +// -1, +// 26, +// 27, +// 28, +// 29, +// 30, +// 31, +// 32, +// 33, +// 34, +// 35, +// 36, +// 37, +// 38, +// 39, +// 40, +// 41, +// 42, +// 43, +// 44, +// 45, +// 46, +// 47, +// 48, +// 49, +// 50, +// 51, +// -1, +// -1, +// -1, +// -1, +// -1 +//]; // //base64encode(str) { // var out, i, len; @@ -811,26 +374,26 @@ // i = 0; // out = ""; // while (i < len) { -// c1 = str.charCodeAt(i++) & 0xff; +// c1 = str.codeUnitAt(i++) & 0xff; // if (i == len) { -// out += base64EncodeChars.charAt(c1 >> 2); -// out += base64EncodeChars.charAt((c1 & 0x3) << 4); +// out += base64EncodeChars[c1 >> 2]; +// out += base64EncodeChars[(c1 & 0x3) << 4]; // out += "=="; // break; // } -// c2 = str.charCodeAt(i++); +// c2 = str.codeUnitAt(i++); // if (i == len) { -// out += base64EncodeChars.charAt(c1 >> 2); -// out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); -// out += base64EncodeChars.charAt((c2 & 0xF) << 2); +// out += base64EncodeChars[c1 >> 2]; +// out += base64EncodeChars[((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)]; +// out += base64EncodeChars[(c2 & 0xF) << 2]; // out += "="; // break; // } -// c3 = str.charCodeAt(i++); -// out += base64EncodeChars.charAt(c1 >> 2); -// out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); -// out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6)); -// out += base64EncodeChars.charAt(c3 & 0x3F); +// c3 = str.codeUnitAt(i++); +// out += base64EncodeChars[c1 >> 2]; +// out += base64EncodeChars[((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)]; +// out += base64EncodeChars[((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6)]; +// out += base64EncodeChars[c3 & 0x3F]; // } // return out; //} @@ -845,41 +408,35 @@ // while (i < len) { // /* c1 */ // do { -// c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; +// c1 = base64DecodeChars[str.codeUnitAt(i++) & 0xff]; // } while (i < len && c1 == -1); -// if (c1 == -1) -// break; +// if (c1 == -1) break; // // /* c2 */ // do { -// c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; +// c2 = base64DecodeChars[str.codeUnitAt(i++) & 0xff]; // } while (i < len && c2 == -1); -// if (c2 == -1) -// break; +// if (c2 == -1) break; // // out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4)); // // /* c3 */ // do { -// c3 = str.charCodeAt(i++) & 0xff; -// if (c3 == 61) -// return out; +// c3 = str.codeUnitAt(i++) & 0xff; +// if (c3 == 61) return out; // c3 = base64DecodeChars[c3]; // } while (i < len && c3 == -1); -// if (c3 == -1) -// break; +// if (c3 == -1) break; // // out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2)); // // /* c4 */ // do { -// c4 = str.charCodeAt(i++) & 0xff; -// if (c4 == 61) -// return out; +// c4 = str.codeUnitAt(i++) & 0xff; +// if (c4 == 61) return out; // c4 = base64DecodeChars[c4]; // } while (i < len && c4 == -1); -// if (c4 == -1) -// break; +// if (c4 == -1) break; // out += String.fromCharCode(((c3 & 0x03) << 6) | c4); // } // return out; @@ -904,9 +461,9 @@ // out = ""; // len = str.length; // for (i = 0; i < len; i++) { -// c = str.charCodeAt(i); +// c = str.codeUnitAt(i); // if ((c >= 0x0001) && (c <= 0x007F)) { -// out += str.charAt(i); +// out += str[i]; // } else if (c > 0x07FF) { // out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F)); // out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F)); @@ -927,7 +484,7 @@ // len = str.length; // i = 0; // while (i < len) { -// c = str.charCodeAt(i++); +// c = str.codeUnitAt(i++); // switch (c >> 4) { // case 0: // case 1: @@ -937,26 +494,24 @@ // case 5: // case 6: // case 7: -// // 0xxxxxxx +// // 0xxxxxxx // out += str.charAt(i - 1); // break; // case 12: // case 13: -// // 110x xxxx 10xx xxxx -// char2 = str.charCodeAt(i++); +// // 110x xxxx 10xx xxxx +// char2 = str.codeUnitAt(i++); // out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); // break; // case 14: -// // 1110 xxxx 10xx xxxx 10xx xxxx -// char2 = str.charCodeAt(i++); -// char3 = str.charCodeAt(i++); -// out += String.fromCharCode(((c & 0x0F) << 12) | -// ((char2 & 0x3F) << 6) | -// ((char3 & 0x3F) << 0)); +// // 1110 xxxx 10xx xxxx 10xx xxxx +// char2 = str.codeUnitAt(i++); +// char3 = str.codeUnitAt(i++); +// out += String.fromCharCode( +// ((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0)); // break; // } // } // // return out; //} -// diff --git a/pubspec.yaml b/pubspec.yaml index aa34984..9e39922 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -41,3 +41,4 @@ flutter: uses-material-design: true assets: - assets/images/ + - assets/md5.js From a7abf7a530f0a2189386d7e611985dc2dc02107f Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Wed, 12 Jun 2019 14:27:00 +0800 Subject: [PATCH 2/3] Add log html parser and department --- lib/pages/home_page.dart | 1 + lib/utils/firebase_analytics_utils.dart | 29 +++++++++++++++++++++++++ lib/utils/helper.dart | 7 ++++++ 3 files changed, 37 insertions(+) diff --git a/lib/pages/home_page.dart b/lib/pages/home_page.dart index bcf8f3e..c20ffdb 100644 --- a/lib/pages/home_page.dart +++ b/lib/pages/home_page.dart @@ -255,6 +255,7 @@ class HomePageState extends State { userInfo = response; }); FA.setUserProperty('department', userInfo.department); + FA.logUserInfo(userInfo.department); FA.setUserId(userInfo.studentId); } }).catchError((e) {}); diff --git a/lib/utils/firebase_analytics_utils.dart b/lib/utils/firebase_analytics_utils.dart index 18a2a0d..579c09c 100644 --- a/lib/utils/firebase_analytics_utils.dart +++ b/lib/utils/firebase_analytics_utils.dart @@ -30,6 +30,18 @@ class FA { print('setUserProperty succeeded'); } + static Future logUserInfo(String department) async { + if (Platform.isIOS || Platform.isAndroid) + await analytics.logEvent( + name: 'user_info', + parameters: { + 'department': department, + 'platform': Platform.operatingSystem, + }, + ); + print('setUserProperty succeeded'); + } + static Future logApiEvent(String type, int status, {String message = ''}) async { PackageInfo packageInfo = await PackageInfo.fromPlatform(); @@ -75,6 +87,23 @@ class FA { print('log CalculateUnits succeeded'); } + static const String COURSE_HTML_PARSER = 'course_html_parser'; + static const String SCORE_HTML_PARSER = 'score_html_parser'; + + static Future logTimeEvent(String name, double seconds) async { + PackageInfo packageInfo = await PackageInfo.fromPlatform(); + if (Platform.isIOS || Platform.isAndroid) + await analytics.logEvent( + name: name, + parameters: { + 'time': seconds, + 'buildNumber': int.parse(packageInfo.buildNumber), + 'platform': Platform.operatingSystem, + }, + ); + print('log TimeEvent succeeded'); + } + static Future logAction(String name, String action, {String message = ''}) async { PackageInfo packageInfo = await PackageInfo.fromPlatform(); diff --git a/lib/utils/helper.dart b/lib/utils/helper.dart index 90d9d7e..b6c8567 100644 --- a/lib/utils/helper.dart +++ b/lib/utils/helper.dart @@ -13,6 +13,7 @@ import 'package:webview_flutter/webview_flutter.dart'; import 'app_localizations.dart'; import 'big5.dart'; +import 'firebase_analytics_utils.dart'; const HOST = "nsysu-ap.rainvisitor.me"; const PORT = '8443'; @@ -188,6 +189,7 @@ class Helper { ); String text = big5.decode(response.bodyBytes); //print('text = ${text}'); + var startTime = DateTime.now().millisecondsSinceEpoch; var document = parse(text, encoding: 'BIG-5'); var trDoc = document.getElementsByTagName('tr'); var courseData = CourseData( @@ -234,6 +236,8 @@ class Helper { courseData.courseTables.saturday = null; if (courseData.courseTables.sunday.length == 0) courseData.courseTables.sunday = null; + var endTime = DateTime.now().millisecondsSinceEpoch; + FA.logTimeEvent(FA.COURSE_HTML_PARSER, (endTime - startTime) / 1000.0); } //print(DateTime.now()); return courseData; @@ -295,6 +299,7 @@ class Helper { encoding: Encoding.getByName('BIG-5'), ); String text = big5.decode(response.bodyBytes); + var startTime = DateTime.now().millisecondsSinceEpoch; var document = parse(text, encoding: 'BIG-5'); List list = []; Detail detail = Detail(); @@ -332,6 +337,8 @@ class Helper { finalScore: fontDoc[5].text, )); } + var endTime = DateTime.now().millisecondsSinceEpoch; + FA.logTimeEvent(FA.SCORE_HTML_PARSER, (endTime - startTime) / 1000.0); } /*var trDoc = document.getElementsByTagName('tr'); for (var i = 0; i < trDoc.length; i++) { From ec1c9634b8fc13565076118efdf744dd69ce2e67 Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Wed, 12 Jun 2019 14:28:35 +0800 Subject: [PATCH 3/3] Update to v0.0.7 --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 9e39922..4bb103b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: nsysu_ap description: NSYSU AP -version: 0.0.6+6 +version: 0.0.7+7 environment: sdk: ">=2.2.2 <3.0.0"