Change if-elseif to case switch for test schools

This commit is contained in:
Pearoo 2024-03-21 17:47:20 +01:00
parent 14bcb62184
commit a805d8292f

View File

@ -83,108 +83,114 @@ Future loginAPI({
} }
// if institute matches one of test things do test login // if institute matches one of test things do test login
if (instituteCode == 'refilc-test-sweden') { switch (instituteCode) {
School school = School( // by using a switch statement we are saving a whopping 0.0000001 seconds
city: "Stockholm", // (actually it just makes it easier to add more test schools later on)
instituteCode: "refilc-test-sweden", case 'refilc-test-sweden':
name: "reFilc Test SE - Leo Ekström High School", School school = School(
); city: "Stockholm",
instituteCode: "refilc-test-sweden",
name: "reFilc Test SE - Leo Ekström High School",
);
await testLogin(school); await testLogin(school);
} else if (instituteCode == 'refilc-test-spain') { break;
School school = School( case 'refilc-test-spain':
city: "Madrid", School school = School(
instituteCode: "refilc-test-spain", city: "Madrid",
name: "reFilc Test ES - Emilio Obrero University", instituteCode: "refilc-test-spain",
); name: "reFilc Test ES - Emilio Obrero University",
);
await testLogin(school); await testLogin(school);
} else { break;
// normal login from here default:
Provider.of<KretaClient>(context, listen: false).userAgent = // normal login from here
Provider.of<SettingsProvider>(context, listen: false).config.userAgent; Provider.of<KretaClient>(context, listen: false).userAgent =
Provider.of<SettingsProvider>(context, listen: false).config.userAgent;
Map<String, String> headers = { Map<String, String> headers = {
"content-type": "application/x-www-form-urlencoded", "content-type": "application/x-www-form-urlencoded",
}; };
String nonceStr = await Provider.of<KretaClient>(context, listen: false) String nonceStr = await Provider.of<KretaClient>(context, listen: false)
.getAPI(KretaAPI.nonce, json: false); .getAPI(KretaAPI.nonce, json: false);
Nonce nonce = getNonce(nonceStr, username, instituteCode); Nonce nonce = getNonce(nonceStr, username, instituteCode);
headers.addAll(nonce.header()); headers.addAll(nonce.header());
Map? res = await Provider.of<KretaClient>(context, listen: false) Map? res = await Provider.of<KretaClient>(context, listen: false)
.postAPI(KretaAPI.login, .postAPI(KretaAPI.login,
headers: headers, headers: headers,
body: User.loginBody( body: User.loginBody(
username: username, username: username,
password: password, password: password,
instituteCode: instituteCode, instituteCode: instituteCode,
)); ));
if (res != null) { if (res != null) {
if (res.containsKey("error")) { if (res.containsKey("error")) {
if (res["error"] == "invalid_grant") { if (res["error"] == "invalid_grant") {
return LoginState.invalidGrant; return LoginState.invalidGrant;
} }
} else { } else {
if (res.containsKey("access_token")) { if (res.containsKey("access_token")) {
try {
Provider.of<KretaClient>(context, listen: false).accessToken =
res["access_token"];
Map? studentJson =
await Provider.of<KretaClient>(context, listen: false)
.getAPI(KretaAPI.student(instituteCode));
Student student = Student.fromJson(studentJson!);
var user = User(
username: username,
password: password,
instituteCode: instituteCode,
name: student.name,
student: student,
role: JwtUtils.getRoleFromJWT(res["access_token"])!,
);
if (onLogin != null) onLogin(user);
// Store User in the database
await Provider.of<DatabaseProvider>(context, listen: false)
.store
.storeUser(user);
Provider.of<UserProvider>(context, listen: false).addUser(user);
Provider.of<UserProvider>(context, listen: false).setUser(user.id);
// Get user data
try { try {
await Future.wait([ Provider.of<KretaClient>(context, listen: false).accessToken =
Provider.of<GradeProvider>(context, listen: false).fetch(), res["access_token"];
Provider.of<TimetableProvider>(context, listen: false) Map? studentJson =
.fetch(week: Week.current()), await Provider.of<KretaClient>(context, listen: false)
Provider.of<ExamProvider>(context, listen: false).fetch(), .getAPI(KretaAPI.student(instituteCode));
Provider.of<HomeworkProvider>(context, listen: false).fetch(), Student student = Student.fromJson(studentJson!);
Provider.of<MessageProvider>(context, listen: false).fetchAll(), var user = User(
Provider.of<MessageProvider>(context, listen: false) username: username,
.fetchAllRecipients(), password: password,
Provider.of<NoteProvider>(context, listen: false).fetch(), instituteCode: instituteCode,
Provider.of<EventProvider>(context, listen: false).fetch(), name: student.name,
Provider.of<AbsenceProvider>(context, listen: false).fetch(), student: student,
]); role: JwtUtils.getRoleFromJWT(res["access_token"])!,
);
if (onLogin != null) onLogin(user);
// Store User in the database
await Provider.of<DatabaseProvider>(context, listen: false)
.store
.storeUser(user);
Provider.of<UserProvider>(context, listen: false).addUser(user);
Provider.of<UserProvider>(context, listen: false).setUser(user.id);
// Get user data
try {
await Future.wait([
Provider.of<GradeProvider>(context, listen: false).fetch(),
Provider.of<TimetableProvider>(context, listen: false)
.fetch(week: Week.current()),
Provider.of<ExamProvider>(context, listen: false).fetch(),
Provider.of<HomeworkProvider>(context, listen: false).fetch(),
Provider.of<MessageProvider>(context, listen: false).fetchAll(),
Provider.of<MessageProvider>(context, listen: false)
.fetchAllRecipients(),
Provider.of<NoteProvider>(context, listen: false).fetch(),
Provider.of<EventProvider>(context, listen: false).fetch(),
Provider.of<AbsenceProvider>(context, listen: false).fetch(),
]);
} catch (error) {
print("WARNING: failed to fetch user data: $error");
}
if (onSuccess != null) onSuccess();
return LoginState.success;
} catch (error) { } catch (error) {
print("WARNING: failed to fetch user data: $error"); print("ERROR: loginAPI: $error");
// maybe check debug mode
// ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("ERROR: $error")));
return LoginState.failed;
} }
if (onSuccess != null) onSuccess();
return LoginState.success;
} catch (error) {
print("ERROR: loginAPI: $error");
// maybe check debug mode
// ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("ERROR: $error")));
return LoginState.failed;
} }
} }
} }
} break;
} }
return LoginState.failed; return LoginState.failed;