2023-03-15 23:29:07 +02:00
|
|
|
import 'dart:io';
|
|
|
|
|
2022-02-03 18:06:44 +02:00
|
|
|
import 'package:auto_route/auto_route.dart';
|
2022-07-13 14:23:48 +02:00
|
|
|
import 'package:flutter/foundation.dart';
|
|
|
|
import 'package:immich_mobile/routing/router.dart';
|
|
|
|
import 'package:immich_mobile/shared/services/api.service.dart';
|
2023-07-28 05:05:27 +02:00
|
|
|
import 'package:logging/logging.dart';
|
2023-03-15 23:29:07 +02:00
|
|
|
import 'package:openapi/api.dart';
|
2022-02-03 18:06:44 +02:00
|
|
|
|
|
|
|
class AuthGuard extends AutoRouteGuard {
|
2022-07-13 14:23:48 +02:00
|
|
|
final ApiService _apiService;
|
2023-07-28 05:05:27 +02:00
|
|
|
final _log = Logger("AuthGuard");
|
2022-07-13 14:23:48 +02:00
|
|
|
AuthGuard(this._apiService);
|
2022-02-03 18:06:44 +02:00
|
|
|
@override
|
|
|
|
void onNavigation(NavigationResolver resolver, StackRouter router) async {
|
2023-07-28 05:05:27 +02:00
|
|
|
|
|
|
|
resolver.next(true);
|
|
|
|
|
2022-02-03 18:06:44 +02:00
|
|
|
try {
|
2022-07-13 14:23:48 +02:00
|
|
|
var res = await _apiService.authenticationApi.validateAccessToken();
|
2023-07-28 05:05:27 +02:00
|
|
|
if (res == null || res.authStatus != true) {
|
|
|
|
// If the access token is invalid, take user back to login
|
|
|
|
_log.fine("User token is invalid. Redirecting to login");
|
2022-07-13 14:23:48 +02:00
|
|
|
router.replaceAll([const LoginRoute()]);
|
2022-02-03 18:06:44 +02:00
|
|
|
}
|
2023-03-15 23:29:07 +02:00
|
|
|
} on ApiException catch (e) {
|
|
|
|
if (e.code == HttpStatus.badRequest &&
|
|
|
|
e.innerException is SocketException) {
|
|
|
|
// offline?
|
2023-07-28 05:05:27 +02:00
|
|
|
_log.fine(
|
|
|
|
"Unable to validate user token. User may be offline and offline browsing is allowed.",
|
|
|
|
);
|
2023-03-15 23:29:07 +02:00
|
|
|
} else {
|
|
|
|
debugPrint("Error [onNavigation] ${e.toString()}");
|
|
|
|
router.replaceAll([const LoginRoute()]);
|
2023-07-28 05:05:27 +02:00
|
|
|
return;
|
2023-03-15 23:29:07 +02:00
|
|
|
}
|
2023-07-28 05:05:27 +02:00
|
|
|
} catch (e) {
|
|
|
|
debugPrint("Error [onNavigation] ${e.toString()}");
|
|
|
|
router.replaceAll([const LoginRoute()]);
|
2022-07-13 14:23:48 +02:00
|
|
|
return;
|
2022-02-03 18:06:44 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|