97 lines
2.8 KiB
Dart
97 lines
2.8 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:hepan_everyday/features/school/undergraduate/navigation_policy.dart';
|
|
import 'package:hepan_everyday/features/school/undergraduate/page_probe.dart';
|
|
|
|
void main() {
|
|
final uri = Uri.parse('https://eams.uestc.edu.cn/eams/');
|
|
test(
|
|
'navigation and capture distinguish official data from authentication',
|
|
() {
|
|
for (final host in [
|
|
'eams.uestc.edu.cn',
|
|
'idas.uestc.edu.cn',
|
|
'eportal.uestc.edu.cn',
|
|
]) {
|
|
expect(
|
|
UndergraduateNavigationPolicy.canNavigate(
|
|
Uri.https(host, '/'),
|
|
isMainFrame: true,
|
|
),
|
|
isTrue,
|
|
);
|
|
}
|
|
for (final value in [
|
|
'https://eams.uestc.edu.cn.attacker.test/eams/',
|
|
'https://eams.uestc.edu.cn:444/eams/',
|
|
'https://user@eams.uestc.edu.cn/eams/',
|
|
'http://eams.uestc.edu.cn/eams/',
|
|
]) {
|
|
expect(
|
|
UndergraduateNavigationPolicy.canNavigate(
|
|
Uri.parse(value),
|
|
isMainFrame: true,
|
|
),
|
|
isFalse,
|
|
);
|
|
}
|
|
expect(UndergraduateNavigationPolicy.isDataPage(uri), isTrue);
|
|
expect(
|
|
UndergraduateNavigationPolicy.isDataPage(
|
|
Uri.parse('https://idas.uestc.edu.cn/authserver/login'),
|
|
),
|
|
isFalse,
|
|
);
|
|
expect(
|
|
UndergraduateNavigationPolicy.secureIdentityRedirect(
|
|
Uri.parse('http://idas.uestc.edu.cn/authserver/login?service=abc'),
|
|
).toString(),
|
|
'https://idas.uestc.edu.cn/authserver/login?service=abc',
|
|
);
|
|
},
|
|
);
|
|
test(
|
|
'page evidence rejects changed URLs cross origins and aggregate oversize',
|
|
() {
|
|
Map<String, dynamic> value() => {
|
|
'topUrl': uri.toString(),
|
|
'authenticated': true,
|
|
'pages': [
|
|
{'kind': 'timetable', 'url': uri.toString(), 'html': 'table'},
|
|
],
|
|
};
|
|
expect(
|
|
UndergraduatePageEvidence.decode(jsonEncode(value()), uri).pages,
|
|
hasLength(1),
|
|
);
|
|
expect(
|
|
() => UndergraduatePageEvidence.decode({
|
|
...value(),
|
|
'topUrl': 'https://other.test',
|
|
}, uri),
|
|
throwsFormatException,
|
|
);
|
|
final cross = value();
|
|
(cross['pages'] as List).single['url'] = 'https://idas.uestc.edu.cn/';
|
|
expect(
|
|
() => UndergraduatePageEvidence.decode(cross, uri),
|
|
throwsFormatException,
|
|
);
|
|
final large = value();
|
|
(large['pages'] as List).single['html'] = '汉' * 800000;
|
|
expect(
|
|
() => UndergraduatePageEvidence.decode(large, uri),
|
|
throwsFormatException,
|
|
);
|
|
expect(
|
|
() => UndergraduatePageEvidence.decode({
|
|
...value(),
|
|
'error': 'capture_limit',
|
|
}, uri),
|
|
throwsFormatException,
|
|
);
|
|
},
|
|
);
|
|
}
|