feat: capture undergraduate pages with scoped evidence
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
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,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user