This commit is contained in:
unknown 2021-09-11 17:55:27 +02:00
parent f52a747268
commit 8238cc0678
No known key found for this signature in database
GPG Key ID: 1D070E0B09CFB257
5 changed files with 51 additions and 18 deletions

View File

@ -1,3 +1,4 @@
import 'package:filcnaplo/utils/jwt.dart';
import 'package:filcnaplo_kreta_api/providers/absence_provider.dart'; import 'package:filcnaplo_kreta_api/providers/absence_provider.dart';
import 'package:filcnaplo_kreta_api/providers/event_provider.dart'; import 'package:filcnaplo_kreta_api/providers/event_provider.dart';
import 'package:filcnaplo_kreta_api/providers/exam_provider.dart'; import 'package:filcnaplo_kreta_api/providers/exam_provider.dart';
@ -10,10 +11,8 @@ import 'package:filcnaplo/api/providers/user_provider.dart';
import 'package:filcnaplo/api/providers/database_provider.dart'; import 'package:filcnaplo/api/providers/database_provider.dart';
import 'package:filcnaplo/models/settings.dart'; import 'package:filcnaplo/models/settings.dart';
import 'package:filcnaplo/models/user.dart'; import 'package:filcnaplo/models/user.dart';
import 'package:filcnaplo/utils/jwt.dart';
import 'package:filcnaplo_kreta_api/client/api.dart'; import 'package:filcnaplo_kreta_api/client/api.dart';
import 'package:filcnaplo_kreta_api/client/client.dart'; import 'package:filcnaplo_kreta_api/client/client.dart';
import 'package:filcnaplo_kreta_api/models/message.dart';
import 'package:filcnaplo_kreta_api/models/student.dart'; import 'package:filcnaplo_kreta_api/models/student.dart';
import 'package:filcnaplo_kreta_api/models/week.dart'; import 'package:filcnaplo_kreta_api/models/week.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -65,12 +64,14 @@ Future loginApi({
try { try {
Provider.of<KretaClient>(context, listen: false).accessToken = res["access_token"]; Provider.of<KretaClient>(context, listen: false).accessToken = res["access_token"];
Map? studentJson = await Provider.of<KretaClient>(context, listen: false).getAPI(KretaAPI.student(instituteCode)); Map? studentJson = await Provider.of<KretaClient>(context, listen: false).getAPI(KretaAPI.student(instituteCode));
Student student = Student.fromJson(studentJson!);
var user = User( var user = User(
username: username, username: username,
password: password, password: password,
instituteCode: instituteCode, instituteCode: instituteCode,
name: JwtUtils.getNameFromJWT(res["access_token"]) ?? "?", name: student.name,
student: Student.fromJson(studentJson!), student: student,
role: JwtUtils.getRoleFromJWT(res["access_token"])!,
); );
if (onLogin != null) onLogin(user); if (onLogin != null) onLogin(user);
@ -82,14 +83,16 @@ Future loginApi({
// Get user data // Get user data
try { try {
await Provider.of<GradeProvider>(context, listen: false).fetch(); await Future.wait([
await Provider.of<TimetableProvider>(context, listen: false).fetch(week: Week.current()); Provider.of<GradeProvider>(context, listen: false).fetch(),
await Provider.of<ExamProvider>(context, listen: false).fetch(); Provider.of<TimetableProvider>(context, listen: false).fetch(week: Week.current()),
await Provider.of<HomeworkProvider>(context, listen: false).fetch(); Provider.of<ExamProvider>(context, listen: false).fetch(),
await Provider.of<MessageProvider>(context, listen: false).fetch(type: MessageType.inbox); Provider.of<HomeworkProvider>(context, listen: false).fetch(),
await Provider.of<NoteProvider>(context, listen: false).fetch(); Provider.of<MessageProvider>(context, listen: false).fetchAll(),
await Provider.of<EventProvider>(context, listen: false).fetch(); Provider.of<NoteProvider>(context, listen: false).fetch(),
await Provider.of<AbsenceProvider>(context, listen: false).fetch(); Provider.of<EventProvider>(context, listen: false).fetch(),
Provider.of<AbsenceProvider>(context, listen: false).fetch(),
]);
} catch (error) { } catch (error) {
print("WARNING: failed to fetch user data: $error"); print("WARNING: failed to fetch user data: $error");
} }

View File

@ -3,6 +3,8 @@ import 'package:filcnaplo_kreta_api/client/api.dart';
import 'package:filcnaplo_kreta_api/models/student.dart'; import 'package:filcnaplo_kreta_api/models/student.dart';
import 'package:uuid/uuid.dart'; import 'package:uuid/uuid.dart';
enum Role { student, parent }
class User { class User {
late String id; late String id;
String username; String username;
@ -10,6 +12,7 @@ class User {
String instituteCode; String instituteCode;
String name; String name;
Student student; Student student;
Role role;
User({ User({
String? id, String? id,
@ -18,6 +21,7 @@ class User {
required this.password, required this.password,
required this.instituteCode, required this.instituteCode,
required this.student, required this.student,
required this.role,
}) { }) {
if (id != null) { if (id != null) {
this.id = id; this.id = id;
@ -34,6 +38,7 @@ class User {
password: map["password"], password: map["password"],
name: map["name"].trim(), name: map["name"].trim(),
student: Student.fromJson(jsonDecode(map["student"])), student: Student.fromJson(jsonDecode(map["student"])),
role: Role.values[map["role"] ?? 0],
); );
} }
@ -45,9 +50,13 @@ class User {
"institute_code": instituteCode, "institute_code": instituteCode,
"name": name, "name": name,
"student": jsonEncode(student.json), "student": jsonEncode(student.json),
"role": role.index,
}; };
} }
@override
String toString() => jsonEncode(toMap());
static Map<String, Object?> loginBody({ static Map<String, Object?> loginBody({
required String username, required String username,
required String password, required String password,

View File

@ -1,7 +1,9 @@
import 'dart:convert'; import 'dart:convert';
import 'package:filcnaplo/models/user.dart';
class JwtUtils { class JwtUtils {
static String? getNameFromJWT(String jwt) { static Map? decodeJwt(String jwt) {
var parts = jwt.split("."); var parts = jwt.split(".");
if (parts.length != 3) return null; if (parts.length != 3) return null;
@ -11,8 +13,27 @@ class JwtUtils {
parts[1] += "="; parts[1] += "=";
} }
var payload = utf8.decode(base64Url.decode(parts[1])); try {
var jwtData = jsonDecode(payload); var payload = utf8.decode(base64Url.decode(parts[1]));
return jwtData["name"]; return jsonDecode(payload);
} catch (error) {
print("ERROR: JwtUtils.decodeJwt: $error");
}
}
static String? getNameFromJWT(String jwt) {
var jwtData = decodeJwt(jwt);
return jwtData?["name"];
}
static Role? getRoleFromJWT(String jwt) {
var jwtData = decodeJwt(jwt);
switch (jwtData?["role"]) {
case "Tanulo":
return Role.student;
case "Gondviselo":
return Role.parent;
}
} }
} }

@ -1 +1 @@
Subproject commit e6a0bd36bf81cf13e529ed741a1e9dc9ed8e5a3f Subproject commit cfc6b7daa0aed43ef76c1ec8c50ffb37d8f4f059

@ -1 +1 @@
Subproject commit 7b2ff224c0efe717329e8c605a89ecabc46c10b0 Subproject commit 1ab230519d554425df22bbbda3217d1e1afd0d95