Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: session logic #1283

Merged
merged 34 commits into from
Sep 12, 2024
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
ad8808f
refactor: create FederatedSession and CredentialsSession
limwa Jul 23, 2024
ad1c898
refactor: serialize session requests instead
limwa Jul 24, 2024
6043220
refactor: change logic to use new sessions
limwa Jul 30, 2024
e7b177e
refactor: add NetworkRouter.login method again
limwa Jul 30, 2024
cf66e05
refactor: some more work on http rewrite
limwa Aug 7, 2024
8a3f241
refactor: continue refactor
limwa Aug 21, 2024
62411af
refactor: use new package structure
limwa Aug 21, 2024
1e1ad89
refactor: some more progress
limwa Aug 21, 2024
649dc96
feat: some more progress
limwa Sep 2, 2024
7b8a4d6
feat: some more stuff
limwa Sep 4, 2024
806179d
feat: some more work
limwa Sep 5, 2024
5ba3985
fix: indefinite waiting with no internet
limwa Sep 5, 2024
f1e3b86
docs: explain controller behavior
limwa Sep 5, 2024
4365773
style: reorder lines
limwa Sep 5, 2024
8c9a278
refactor: make message more accurate
limwa Sep 5, 2024
1a6876e
refactor: clean up login
limwa Sep 5, 2024
52586cd
fix: bug reports for non-persisted sessions
limwa Sep 5, 2024
73798c1
fix: don't throw on network errors
limwa Sep 6, 2024
81c0cce
Merge branch 'develop' into refactor/sessions
limwa Sep 6, 2024
c73170c
refactor: some more work
limwa Sep 10, 2024
64a4651
refactor: finish session refactor
limwa Sep 11, 2024
59f4716
test: remove tests (lol)
limwa Sep 11, 2024
019b975
Merge branch 'develop' into refactor/sessions
limwa Sep 11, 2024
6bb7f16
fix: minor issues
limwa Sep 11, 2024
24809b7
test: readd some tests
limwa Sep 11, 2024
5fd57c0
refactor: lint code
limwa Sep 11, 2024
88df1e9
refactor: remove useless code
limwa Sep 12, 2024
ede3c97
refactor: readd close method
limwa Sep 12, 2024
dd1b60b
fix: use inner client on callback client
limwa Sep 12, 2024
efce93c
refactor: add suggestions
limwa Sep 12, 2024
f82beca
style: add trailing comma
limwa Sep 12, 2024
24416fd
Merge branch 'develop' into refactor/sessions
DGoiana Sep 12, 2024
d5f2715
refreshing session over time while user is logged in
DGoiana Sep 12, 2024
4d28139
Merge branch 'develop' into refactor/sessions
DGoiana Sep 12, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ import 'package:tuple/tuple.dart';
import 'package:uni/controller/background_workers/notifications/tuition_notification.dart';
import 'package:uni/controller/local_storage/notification_timeout_storage.dart';
import 'package:uni/controller/local_storage/preferences_controller.dart';
import 'package:uni/controller/networking/network_router.dart';
import 'package:uni/model/entities/session.dart';
import 'package:uni/session/flows/base/session.dart';
import 'package:workmanager/workmanager.dart';

///
Expand Down Expand Up @@ -143,44 +142,14 @@ class NotificationManager {

static Future<void> updateAndTriggerNotifications() async {
PreferencesController.prefs = await SharedPreferences.getInstance();
final userInfo = await PreferencesController.getPersistentUserInfo();
final faculties = PreferencesController.getUserFaculties();
final refreshToken = await PreferencesController.getSessionRefreshToken();
final savedSession = await PreferencesController.getSavedSession();

if (faculties.isEmpty) {
if (savedSession == null) {
return;
}
if (userInfo == null && refreshToken == null) {
return; // Session not persistent
}

Session? session;
if (userInfo != null) {
session = await NetworkRouter.login(
userInfo.item1,
userInfo.item2,
faculties,
persistentSession: false,
);
}

if (refreshToken != null) {
final token = await NetworkRouter.getAccessToken(refreshToken);
final studentNumber = await PreferencesController.getUserNumber();
if (token == null || studentNumber == null) {
return;
}
session = await NetworkRouter.loginWithToken(
token,
studentNumber,
faculties,
persistentSession: false,
);
}

if (session == null) {
return;
}
final request = savedSession.createRefreshRequest();
final session = await request.perform();

// Get the .json file that contains the last time that the
// notification has ran
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import 'package:uni/controller/background_workers/notifications.dart';
import 'package:uni/controller/fetchers/fees_fetcher.dart';
import 'package:uni/controller/local_storage/preferences_controller.dart';
import 'package:uni/controller/parsers/parser_fees.dart';
import 'package:uni/model/entities/session.dart';
import 'package:uni/session/flows/base/session.dart';
import 'package:uni/utils/duration_string_formatter.dart';

class TuitionNotification extends Notification {
Expand Down
6 changes: 1 addition & 5 deletions packages/uni_app/lib/controller/cleanup.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,12 @@ import 'package:uni/controller/local_storage/database/app_last_user_info_update_
import 'package:uni/controller/local_storage/database/app_lectures_database.dart';
import 'package:uni/controller/local_storage/database/app_user_database.dart';
import 'package:uni/controller/local_storage/preferences_controller.dart';
import 'package:uni/controller/networking/network_router.dart';
import 'package:uni/model/providers/state_providers.dart';

Future<void> cleanupStoredData(BuildContext context) async {
StateProviders.fromContext(context).invalidate();

final prefs = await SharedPreferences.getInstance();
final faculties = PreferencesController.getUserFaculties();
await prefs.clear();

await Future.wait([
Expand All @@ -31,9 +29,7 @@ Future<void> cleanupStoredData(BuildContext context) async {
AppLastUserInfoUpdateDatabase().deleteLastUpdate(),
AppBusStopDatabase().deleteBusStops(),
AppCourseUnitsDatabase().deleteCourseUnits(),
NetworkRouter.killSigarraAuthentication(faculties),
PreferencesController.removePersistentUserInfo(),
PreferencesController.removeSessionRefreshToken(),
PreferencesController.removeSavedSession(),
]);

final toCleanDirectory = await getApplicationDocumentsDirectory();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import 'package:uni/controller/fetchers/session_dependant_fetcher.dart';
import 'package:uni/controller/networking/network_router.dart';
import 'package:uni/controller/parsers/parser_calendar.dart';
import 'package:uni/model/entities/calendar_event.dart';
import 'package:uni/model/entities/session.dart';
import 'package:uni/session/flows/base/session.dart';

/// Fetch the school calendar from HTML
class CalendarFetcherHtml implements SessionDependantFetcher {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import 'package:uni/controller/networking/network_router.dart';
import 'package:uni/controller/parsers/parser_course_units.dart';
import 'package:uni/model/entities/course.dart';
import 'package:uni/model/entities/course_units/course_unit.dart';
import 'package:uni/model/entities/session.dart';
import 'package:uni/session/flows/base/session.dart';

class AllCourseUnitsFetcher {
Future<List<CourseUnit>?> getAllCourseUnitsAndCourseAverages(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import 'package:uni/model/entities/course_units/course_unit_class.dart';
import 'package:uni/model/entities/course_units/course_unit_directory.dart';
import 'package:uni/model/entities/course_units/course_unit_sheet.dart';
import 'package:uni/model/entities/course_units/sheet.dart';
import 'package:uni/model/entities/session.dart';
import 'package:uni/session/flows/base/session.dart';

class CourseUnitsInfoFetcher implements SessionDependantFetcher {
@override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import 'dart:convert';
import 'package:uni/controller/fetchers/session_dependant_fetcher.dart';
import 'package:uni/controller/networking/network_router.dart';
import 'package:uni/model/entities/course_units/course_unit.dart';
import 'package:uni/model/entities/session.dart';
import 'package:uni/session/flows/base/session.dart';

class CurrentCourseUnitsFetcher implements SessionDependantFetcher {
@override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import 'package:http/http.dart';
import 'package:uni/controller/fetchers/session_dependant_fetcher.dart';
import 'package:uni/controller/networking/network_router.dart';
import 'package:uni/model/entities/course_units/course_unit.dart';
import 'package:uni/model/entities/session.dart';
import 'package:uni/session/flows/base/session.dart';

/// Returns the user's current list of [CourseUnit].
class CoursesFetcher implements SessionDependantFetcher {
Expand Down
2 changes: 1 addition & 1 deletion packages/uni_app/lib/controller/fetchers/exam_fetcher.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import 'package:uni/controller/parsers/parser_exams.dart';
import 'package:uni/model/entities/course.dart';
import 'package:uni/model/entities/course_units/course_unit.dart';
import 'package:uni/model/entities/exam.dart';
import 'package:uni/model/entities/session.dart';
import 'package:uni/session/flows/base/session.dart';

class ExamFetcher implements SessionDependantFetcher {
ExamFetcher(this.courses, this.userUcs);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'package:html/parser.dart';
import 'package:uni/controller/networking/network_router.dart';
import 'package:uni/model/entities/session.dart';
import 'package:uni/session/flows/base/session.dart';

Future<List<String>> getStudentFaculties(Session session) async {
final response = await NetworkRouter.getWithCookies(
Expand Down
2 changes: 1 addition & 1 deletion packages/uni_app/lib/controller/fetchers/fees_fetcher.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:http/http.dart';
import 'package:uni/controller/fetchers/session_dependant_fetcher.dart';
import 'package:uni/controller/networking/network_router.dart';
import 'package:uni/model/entities/session.dart';
import 'package:uni/session/flows/base/session.dart';

class FeesFetcher implements SessionDependantFetcher {
@override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import 'package:uni/controller/fetchers/session_dependant_fetcher.dart';
import 'package:uni/controller/networking/network_router.dart';
import 'package:uni/controller/parsers/parser_library_occupation.dart';
import 'package:uni/model/entities/library_occupation.dart';
import 'package:uni/model/entities/session.dart';
import 'package:uni/session/flows/base/session.dart';

/// Fetch the library occupation from Google Sheets
class LibraryOccupationFetcherSheets implements SessionDependantFetcher {
Expand Down
4 changes: 2 additions & 2 deletions packages/uni_app/lib/controller/fetchers/print_fetcher.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:http/http.dart' as http;
import 'package:uni/controller/fetchers/session_dependant_fetcher.dart';
import 'package:uni/controller/networking/network_router.dart';
import 'package:uni/model/entities/session.dart';
import 'package:uni/session/flows/base/session.dart';

class PrintFetcher implements SessionDependantFetcher {
@override
Expand Down Expand Up @@ -36,7 +36,7 @@ class PrintFetcher implements SessionDependantFetcher {
};

final headers = <String, String>{};
headers['cookie'] = session.cookies;
headers['cookie'] = session.cookies.join('; ');
headers['content-type'] = 'application/x-www-form-urlencoded';

final response = await http.post(url.toUri(), headers: headers, body: data);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import 'package:uni/controller/fetchers/session_dependant_fetcher.dart';
import 'package:uni/controller/networking/network_router.dart';
import 'package:uni/controller/parsers/parser_courses.dart';
import 'package:uni/model/entities/profile.dart';
import 'package:uni/model/entities/session.dart';
import 'package:uni/session/flows/base/session.dart';

class ProfileFetcher implements SessionDependantFetcher {
@override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:http/http.dart';
import 'package:uni/controller/fetchers/session_dependant_fetcher.dart';
import 'package:uni/controller/networking/network_router.dart';
import 'package:uni/model/entities/session.dart';
import 'package:uni/session/flows/base/session.dart';

class ReferenceFetcher implements SessionDependantFetcher {
@override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:uni/controller/networking/network_router.dart';
import 'package:uni/controller/parsers/parser_restaurants.dart';
import 'package:uni/model/entities/restaurant.dart';
import 'package:uni/model/entities/session.dart';
import 'package:uni/session/flows/base/session.dart';

/// Class for fetching the menu
class RestaurantFetcher {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import 'package:uni/controller/fetchers/session_dependant_fetcher.dart';
import 'package:uni/model/entities/lecture.dart';
import 'package:uni/model/entities/profile.dart';
import 'package:uni/model/entities/session.dart';
import 'package:uni/model/utils/time/week.dart';
import 'package:uni/session/flows/base/session.dart';

/// Class for fetching the user's schedule.
abstract class ScheduleFetcher extends SessionDependantFetcher {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import 'package:uni/controller/networking/network_router.dart';
import 'package:uni/controller/parsers/parser_schedule.dart';
import 'package:uni/model/entities/lecture.dart';
import 'package:uni/model/entities/profile.dart';
import 'package:uni/model/entities/session.dart';
import 'package:uni/model/utils/time/week.dart';
import 'package:uni/session/flows/base/session.dart';

/// Class for fetching the user's lectures from the faculties' API.
class ScheduleFetcherApi extends ScheduleFetcher {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import 'package:uni/controller/networking/network_router.dart';
import 'package:uni/controller/parsers/parser_schedule_html.dart';
import 'package:uni/model/entities/lecture.dart';
import 'package:uni/model/entities/profile.dart';
import 'package:uni/model/entities/session.dart';
import 'package:uni/model/utils/time/week.dart';
import 'package:uni/session/flows/base/session.dart';

/// Class for fetching the user's lectures from the schedule's HTML page.
class ScheduleFetcherHtml extends ScheduleFetcher {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import 'package:uni/model/entities/session.dart';
import 'package:uni/session/flows/base/session.dart';

abstract class SessionDependantFetcher {
List<String> getEndpoints(Session session);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,7 @@ abstract class AppDatabase<T> {

/// Getter to determine if the session is persistent.
Future<bool> get persistentSession async {
_persistentSession ??=
await PreferencesController.getPersistentUserInfo() != null;
_persistentSession ??= await PreferencesController.isSessionPersistent();
return _persistentSession!;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import 'package:http/http.dart' as http;
import 'package:logger/logger.dart';
import 'package:path_provider/path_provider.dart';
import 'package:uni/controller/networking/network_router.dart';
import 'package:uni/model/entities/session.dart';
import 'package:uni/session/flows/base/session.dart';

/// The offline image storage location on the device.
Future<String> get _localPath async {
Expand Down
Loading
Loading