finally the new login is completely working with refresh token as well
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user