finally the new login is completely working with refresh token as well

This commit is contained in:
Kima
2024-08-16 00:25:46 +02:00
parent f2c8e869b5
commit a673d3f1b3
11 changed files with 406 additions and 322 deletions

View File

@@ -67,6 +67,7 @@ Future loginAPI({
address: '1117 Budapest, Gábor Dénes utca 4.',
),
role: Role.parent,
refreshToken: '',
);
if (onLogin != null) onLogin(user);
@@ -130,6 +131,7 @@ Future loginAPI({
password: password,
instituteCode: instituteCode,
));
if (res != null) {
if (res.containsKey("error")) {
if (res["error"] == "invalid_grant") {
@@ -151,6 +153,7 @@ Future loginAPI({
name: student.name,
student: student,
role: JwtUtils.getRoleFromJWT(res["access_token"])!,
refreshToken: '',
);
if (onLogin != null) onLogin(user);
@@ -209,6 +212,9 @@ Future newLoginAPI({
void Function()? onSuccess,
}) async {
// actual login (token grant) logic
Provider.of<KretaClient>(context, listen: false).userAgent =
Provider.of<SettingsProvider>(context, listen: false).config.userAgent;
Map<String, String> headers = {
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
"accept": "*/*",
@@ -216,12 +222,12 @@ Future newLoginAPI({
};
Map? res = await Provider.of<KretaClient>(context, listen: false)
.postAPI(KretaAPI.login, autoHeader: false, headers: headers, body: {
.postAPI(KretaAPI.login, headers: headers, body: {
"code": code,
"code_verifier": "DSpuqj_HhDX4wzQIbtn8lr8NLE5wEi1iVLMtMK0jY6c",
"redirect_uri":
"https://mobil.e-kreta.hu/ellenorzo-student/prod/oauthredirect",
"client_id": "kreta-ellenorzo-student-mobile-ios",
"client_id": KretaAPI.clientId,
"grant_type": "authorization_code",
});
@@ -236,13 +242,12 @@ Future newLoginAPI({
return;
}
} else {
// print("MUKODIK GECI");
// print("ACCESS TOKEN: ${res["access_token"]}");
if (res.containsKey("access_token")) {
print(JwtUtils.decodeJwt(res["access_token"]));
try {
Provider.of<KretaClient>(context, listen: false).accessToken =
res["access_token"];
Provider.of<KretaClient>(context, listen: false).refreshToken =
res["refresh_token"];
String instituteCode =
JwtUtils.getInstituteFromJWT(res["access_token"])!;
@@ -261,6 +266,7 @@ Future newLoginAPI({
name: student.name,
student: student,
role: role,
refreshToken: res["refresh_token"],
);
if (onLogin != null) onLogin(user);

View File

@@ -81,7 +81,8 @@ class App extends StatelessWidget {
CorePalette? corePalette;
final status = StatusProvider();
final kreta = KretaClient(user: user, settings: settings, status: status);
final kreta = KretaClient(
user: user, settings: settings, database: database, status: status);
final timetable =
TimetableProvider(user: user, database: database, kreta: kreta);
final premium = PlusProvider(settings: settings);

View File

@@ -66,6 +66,7 @@ const usersDB = DatabaseStruct("users", {
"institute_code": String, "student": String, "role": int,
"nickname": String, "picture": String, // premium only (it's now plus btw)
"grade_streak": int,
"refresh_token": String,
});
const userDataDB = DatabaseStruct("user_data", {
"id": String, "grades": String, "timetable": String, "exams": String,
@@ -138,7 +139,8 @@ Future<Database> initDB(DatabaseProvider database) async {
"role": 0,
"nickname": "",
"picture": "",
"grade_streak": 0
"grade_streak": 0,
"refresh_token": "",
},
);
await migrateDB(db, struct: userDataDB, defaultValues: {

View File

@@ -71,9 +71,11 @@ class NotificationsHelper {
// Refresh kreta login for current user
final status = StatusProvider();
KretaClient kretaClientForUser = KretaClient(
user: userProviderForUser,
settings: settingsProvider,
status: status);
user: userProviderForUser,
settings: settingsProvider,
database: database,
status: status,
);
await kretaClientForUser.refreshLogin();
// Process notifications for current user

View File

@@ -17,6 +17,8 @@ class User {
String nickname;
String picture;
int gradeStreak;
// new login method
String refreshToken;
String get displayName => nickname != '' ? nickname : name;
bool get hasStreak => gradeStreak > 0;
@@ -32,6 +34,7 @@ class User {
this.nickname = "",
this.picture = "",
this.gradeStreak = 0,
required this.refreshToken,
}) {
if (id != null) {
this.id = id;
@@ -61,6 +64,7 @@ class User {
nickname: map["nickname"] ?? "",
picture: map["picture"] ?? "",
gradeStreak: map["grade_streak"] ?? 0,
refreshToken: map["refresh_token"] ?? "",
);
}
@@ -75,6 +79,8 @@ class User {
"role": role.index,
"nickname": nickname,
"picture": picture,
"grade_streak": gradeStreak,
"refresh_token": refreshToken,
};
}