class SchoolNavigationPolicy { static Uri? secureIdentityRedirect(Uri uri) { if (uri.scheme != 'http' || uri.port != 80 || uri.userInfo.isNotEmpty || uri.host != 'idas.uestc.edu.cn' || uri.path != '/authserver/login') { return null; } return Uri( scheme: 'https', host: uri.host, path: uri.path, query: uri.hasQuery ? uri.query : null, fragment: uri.hasFragment ? uri.fragment : null, ); } static bool canNavigate(Uri uri, {required bool isMainFrame}) => isMainFrame ? isSchoolPage(uri) : isGraduatePage(uri) || (uri.scheme == 'https' && uri.userInfo.isEmpty) || (uri.scheme == 'about' && uri.path == 'blank'); static bool _https(Uri uri) => uri.scheme == 'https' && uri.port == 443 && uri.userInfo.isEmpty; static bool canInjectCredentials(Uri uri) => _https(uri) && uri.host == 'idas.uestc.edu.cn' && uri.path == '/authserver/login'; static bool isTimetable(Uri uri) => _https(uri) && uri.host == 'yjsjy.uestc.edu.cn' && RegExp( r'^/pyxx/pygl/xskbcx/index/[1-9]\d*' r'$', ).hasMatch(uri.path); static bool isSchoolPage(Uri uri) => (_https(uri) && const { 'idas.uestc.edu.cn', 'yjsjy.uestc.edu.cn', }.contains(uri.host)) || (uri.scheme == 'http' && uri.port == 80 && uri.userInfo.isEmpty && uri.host == 'yjsjy.uestc.edu.cn' && (uri.path == '/pyxx' || uri.path.startsWith('/pyxx/'))); static bool isGraduatePage(Uri uri) => isSchoolPage(uri) && uri.host == 'yjsjy.uestc.edu.cn' && (uri.path == '/pyxx' || uri.path.startsWith('/pyxx/')); static bool isExam(Uri uri) => _https(uri) && uri.host == 'yjsjy.uestc.edu.cn' && uri.path == '/pyxx/pygl/kskcxx/index'; }