From 60f7cd85beddad40aad008548715c41f720ddb34 Mon Sep 17 00:00:00 2001 From: "mr.mojtaba" Date: Wed, 14 May 2025 11:44:46 +0330 Subject: [PATCH] fix : auth middleware --- lib/infrastructure/di/di.dart | 38 +- lib/main.dart | 10 +- .../auth/auth_with_use_and_pass/logic.dart | 69 --- .../auth/auth_with_use_and_pass/view.dart | 522 ------------------ lib/presentation/pages/splash/logic.dart | 5 +- lib/presentation/routes/app_pages.dart | 14 +- lib/presentation/routes/app_paths.dart | 2 - packages/auth/lib/auth.dart | 3 + .../auth/lib/data/common/dio_manager.dart | 2 +- packages/auth/lib/data/di/auth_di.dart | 12 +- .../lib/data/services/auth_middelware.dart | 16 +- .../data/services/token_storage_service.dart | 9 +- packages/auth/lib/hive_registrar.g.dart | 4 +- packages/auth/pubspec.yaml | 2 +- packages/core/lib/core.dart | 1 + .../local/hive_local_storage.dart | 82 +-- .../infrastructure/local/i_local_storage.dart | 2 +- packages/core/lib/injection/di.dart | 3 +- .../add_mobile_inspector/view.dart | 2 +- .../presentation/add_supervision/logic.dart | 2 +- .../presentation/add_supervision/view.dart | 2 +- .../lib/presentation/filter/logic.dart | 4 +- .../lib/presentation/filter/view.dart | 2 +- .../registration_of_violation/view.dart | 5 +- .../lib/presentation/root/logic.dart | 6 +- .../lib/presentation/routes/app_pages.dart | 36 +- packages/inspection/pubspec.lock | 7 + packages/inspection/pubspec.yaml | 6 +- pubspec.lock | 14 + pubspec.yaml | 8 + 30 files changed, 160 insertions(+), 730 deletions(-) delete mode 100644 lib/presentation/pages/auth/auth_with_use_and_pass/logic.dart delete mode 100644 lib/presentation/pages/auth/auth_with_use_and_pass/view.dart diff --git a/lib/infrastructure/di/di.dart b/lib/infrastructure/di/di.dart index b3919d0..db60b78 100644 --- a/lib/infrastructure/di/di.dart +++ b/lib/infrastructure/di/di.dart @@ -1,37 +1,13 @@ -/* -import 'package:get_it/get_it.dart'; -import 'package:hive_ce_flutter/hive_flutter.dart'; -import 'package:logger/logger.dart'; -import 'package:rasadyar_app/data/data_provider/local_storage/hive/hive_provider.dart'; -import 'package:rasadyar_app/data/data_source/local_storage/user/user_local_storage.dart'; -import 'package:rasadyar_app/data/model/user/user_model.dart'; -import 'package:rasadyar_app/domain/repository/user/user_repository.dart'; + +import 'package:rasadyar_auth/auth.dart'; +import 'package:rasadyar_core/core.dart'; final di = GetIt.instance; -void setupInjection() { - di.registerLazySingleton(() => HiveProvider(), instanceName: 'HiveProvider'); - di.registerSingleton( Logger()); +Future setupInjection() async{ + await setupAuthDI(); + await setupAllProvider(); + } -Future setupAllProvider() async { - await _setupLocalStorage(); - await di.allReady(); -} -Future _setupLocalStorage() async { - final hiveProvider = di.get(instanceName: 'HiveProvider'); - await hiveProvider.init(); - Hive.registerAdapter(UserModelAdapter()); - - await Hive.openBox(HiveBoxNames.user.name); - - //user - di.registerLazySingleton(() => UserLocalStorage()); - di.registerLazySingleton( - () => UserRepository(di.get()), - ); - - // -} -*/ diff --git a/lib/main.dart b/lib/main.dart index 148e4fe..bd6d7db 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,8 +2,11 @@ import 'package:flutter/material.dart'; import 'package:rasadyar_app/presentation/routes/app_pages.dart'; import 'package:rasadyar_core/core.dart'; -void main() async { +import 'infrastructure/di/di.dart'; + +Future main() async { WidgetsFlutterBinding.ensureInitialized(); + await setupInjection(); runApp(MyApp()); // runApp(DevicePreview(builder: (context) => ForDevicePreview(),)); @@ -41,12 +44,9 @@ class MyApp extends StatelessWidget { colorScheme: ColorScheme.fromSeed(seedColor: AppColor.blueNormal), ), initialRoute: AppPages.initRoutes, - // initialBinding: BindingsBuilder.put(() => UserService()), getPages: AppPages.pages, locale: const Locale("fa", "IR"), - supportedLocales: const [ - Locale("fa", "IR"), - ], + supportedLocales: const [Locale("fa", "IR")], localizationsDelegates: [ PersianMaterialLocalizations.delegate, PersianCupertinoLocalizations.delegate, diff --git a/lib/presentation/pages/auth/auth_with_use_and_pass/logic.dart b/lib/presentation/pages/auth/auth_with_use_and_pass/logic.dart deleted file mode 100644 index 580413d..0000000 --- a/lib/presentation/pages/auth/auth_with_use_and_pass/logic.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; -import 'package:rasadyar_core/core.dart'; - -enum AuthType { useAndPass, otp } - -enum AuthStatus { init } - -enum OtpStatus { init, sent, verified, reSend } - -class AuthWithUseAndPassLogic extends GetxController { - Rx> formKey = GlobalKey().obs; - Rx> formKeyOtp = GlobalKey().obs; - Rx> formKeySentOtp = GlobalKey().obs; - Rx phoneNumberController = TextEditingController().obs; - Rx passwordController = TextEditingController().obs; - Rx phoneOtpNumberController = - TextEditingController().obs; - Rx otpCodeController = TextEditingController().obs; - CaptchaController captchaController = CaptchaController(); - CaptchaController captchaOtpController = CaptchaController(); - - RxnString phoneNumber = RxnString(null); - RxnString password = RxnString(null); - RxBool isOnError = false.obs; - RxBool hidePassword = true.obs; - Rx authType = AuthType.useAndPass.obs; - Rx authStatus = AuthStatus.init.obs; - Rx otpStatus = OtpStatus.init.obs; - - RxInt secondsRemaining = 120.obs; - Timer? _timer; - - void startTimer() { - _timer?.cancel(); - secondsRemaining.value = 120; - - _timer = Timer.periodic(const Duration(seconds: 1), (timer) { - if (secondsRemaining.value > 0) { - secondsRemaining.value--; - } else { - timer.cancel(); - } - }); - } - - void stopTimer() { - _timer?.cancel(); - } - - String get timeFormatted { - final minutes = secondsRemaining.value ~/ 60; - final seconds = secondsRemaining.value % 60; - return '${minutes.toString().padLeft(2, '0')}:${seconds.toString().padLeft(2, '0')}'; - } - - @override - void onReady() { - // TODO: implement onReady - super.onReady(); - } - - @override - void onClose() { - _timer?.cancel(); - super.onClose(); - } -} diff --git a/lib/presentation/pages/auth/auth_with_use_and_pass/view.dart b/lib/presentation/pages/auth/auth_with_use_and_pass/view.dart deleted file mode 100644 index f6cd2d7..0000000 --- a/lib/presentation/pages/auth/auth_with_use_and_pass/view.dart +++ /dev/null @@ -1,522 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; -import 'package:rasadyar_core/core.dart'; - -import 'logic.dart'; - -class AuthWithUseAndPassPage extends GetView { - const AuthWithUseAndPassPage({super.key}); - - @override - Widget build(BuildContext context) { - return Scaffold( - body: SingleChildScrollView( - child: Column( - children: [ - SizedBox(height: 80), - logoWidget(), - ObxValue((types) { - switch (types.value) { - case AuthType.otp: - return otpForm(); - case AuthType.useAndPass: - return useAndPassFrom(); - } - }, controller.authType), - - SizedBox(height: 50), - RichText( - text: TextSpan( - children: [ - TextSpan( - text: 'مطالعه بیانیه ', - style: AppFonts.yekan14.copyWith( - color: AppColor.darkGreyDark, - ), - ), - TextSpan( - recognizer: TapGestureRecognizer()..onTap = () {}, - text: 'حریم خصوصی', - style: AppFonts.yekan14.copyWith( - color: AppColor.blueNormal, - ), - ), - ], - ), - ), - SizedBox(height: 18), - - ObxValue((types) { - return RichText( - text: TextSpan( - children: [ - TextSpan( - recognizer: - TapGestureRecognizer() - ..onTap = () { - if (controller.authType.value == AuthType.otp) { - controller.authType.value = AuthType.useAndPass; - if (controller.otpStatus.value != - OtpStatus.init) { - controller.otpStatus.value = OtpStatus.init; - } - } else { - controller.authType.value = AuthType.otp; - } - }, - text: - controller.authType.value == AuthType.otp - ? 'ورود با رمز ثابت' - : 'ورود با رمز یکبار مصرف', - - style: AppFonts.yekan14.copyWith( - color: AppColor.blueNormal, - ), - ), - ], - ), - ); - }, controller.authType), - ], - ), - ), - ); - } - - Widget useAndPassFrom() { - return ObxValue((data) { - return Padding( - padding: EdgeInsets.symmetric(horizontal: 30, vertical: 50), - child: Form( - key: data.value, - child: Column( - children: [ - ObxValue((phoneController) { - return TextFormField( - controller: controller.phoneNumberController.value, - decoration: InputDecoration( - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - gapPadding: 11, - ), - labelText: 'شماره موبایل', - labelStyle: AppFonts.yekan13, - errorStyle: AppFonts.yekan13.copyWith( - color: AppColor.redNormal, - ), - - prefixIconConstraints: BoxConstraints( - maxHeight: 40, - minHeight: 40, - maxWidth: 40, - minWidth: 40, - ), - prefixIcon: Padding( - padding: const EdgeInsets.fromLTRB(0, 8, 6, 8), - child: vecWidget(Assets.vecCallSvg), - ), - suffix: - phoneController.value.text.trim().isNotEmpty - ? clearButton(() { - phoneController.value.clear(); - phoneController.refresh(); - }) - : null, - counterText: '', - ), - keyboardType: TextInputType.numberWithOptions( - decimal: false, - signed: false, - ), - - maxLines: 1, - maxLength: 11, - onChanged: (value) { - if (controller.isOnError.value) { - controller.isOnError.value = !controller.isOnError.value; - data.value.currentState?.reset(); - - data.refresh(); - phoneController.value.text = value; - } - phoneController.refresh(); - }, - textInputAction: TextInputAction.next, - validator: (value) { - if (value == null) { - return '⚠️ شماره موبایل را وارد کنید'; - } else if (value.length < 11) { - return '⚠️ شماره موبایل باید 11 رقم باشد'; - } - return null; - }, - style: AppFonts.yekan13, - ); - }, controller.phoneNumberController), - - SizedBox(height: 26), - - ObxValue((passwordController) { - return TextFormField( - controller: passwordController.value, - obscureText: controller.hidePassword.value, - decoration: InputDecoration( - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - gapPadding: 11, - ), - labelText: 'رمز عبور', - labelStyle: AppFonts.yekan13, - errorStyle: AppFonts.yekan13.copyWith( - color: AppColor.redNormal, - ), - - prefixIconConstraints: BoxConstraints( - maxHeight: 34, - minHeight: 34, - maxWidth: 34, - minWidth: 34, - ), - prefixIcon: Padding( - padding: const EdgeInsets.fromLTRB(0, 8, 8, 8), - child: vecWidget(Assets.vecKeySvg), - ), - suffix: - passwordController.value.text.trim().isNotEmpty - ? GestureDetector( - onTap: () { - controller.hidePassword.value = - !controller.hidePassword.value; - }, - child: Icon( - controller.hidePassword.value - ? CupertinoIcons.eye - : CupertinoIcons.eye_slash, - ), - ) - : null, - counterText: '', - ), - textInputAction: TextInputAction.done, - keyboardType: TextInputType.visiblePassword, - maxLines: 1, - onChanged: (value) { - if (controller.isOnError.value) { - controller.isOnError.value = !controller.isOnError.value; - data.value.currentState?.reset(); - passwordController.value.text = value; - } - passwordController.refresh(); - }, - validator: (value) { - if (value == null || value.isEmpty) { - return '⚠️ رمز عبور را وارد کنید'; // "Please enter the password" - } - return null; - }, - style: AppFonts.yekan13, - ); - }, controller.passwordController), - SizedBox(height: 26), - - CaptchaWidget(controller: controller.captchaController), - - SizedBox(height: 23), - RElevated( - text: 'ورود', - onPressed: () async { - Jalali? picked = await showPersianDatePicker( - context: Get.context!, - - initialDate: Jalali.now(), - firstDate: Jalali(1385, 8), - lastDate: Jalali(1450, 9), - initialEntryMode: PersianDatePickerEntryMode.calendarOnly, - initialDatePickerMode: PersianDatePickerMode.year, - ); - - if (data.value.currentState?.validate() == true && - controller.captchaController.validate()) {} - }, - width: Get.width, - height: 48, - ), - ], - ), - ), - ); - }, controller.formKey); - } - - Widget otpForm() { - return ObxValue((status) { - switch (status.value) { - case OtpStatus.init: - return sendCodeForm(); - case OtpStatus.sent: - case OtpStatus.verified: - case OtpStatus.reSend: - return confirmCodeForm(); - } - }, controller.otpStatus); - } - - Widget sendCodeForm() { - return ObxValue((data) { - return Form( - key: data.value, - child: Padding( - padding: EdgeInsets.symmetric(horizontal: 30, vertical: 50), - child: Column( - children: [ - SizedBox(height: 26), - ObxValue((phoneController) { - return TextFormField( - controller: phoneController.value, - decoration: InputDecoration( - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - gapPadding: 11, - ), - labelText: 'شماره موبایل', - labelStyle: AppFonts.yekan13, - errorStyle: AppFonts.yekan13.copyWith( - color: AppColor.redNormal, - ), - prefixIconConstraints: BoxConstraints( - maxHeight: 40, - minHeight: 40, - maxWidth: 40, - minWidth: 40, - ), - prefixIcon: Padding( - padding: const EdgeInsets.fromLTRB(0, 8, 6, 8), - child: vecWidget(Assets.vecCallSvg), - ), - suffix: - phoneController.value.text.trim().isNotEmpty - ? clearButton(() { - phoneController.value.clear(); - phoneController.refresh(); - }) - : null, - counterText: '', - ), - keyboardType: TextInputType.numberWithOptions( - decimal: false, - signed: false, - ), - maxLines: 1, - maxLength: 11, - onChanged: (value) { - if (controller.isOnError.value) { - controller.isOnError.value = !controller.isOnError.value; - data.value.currentState?.reset(); - data.refresh(); - phoneController.value.text = value; - } - phoneController.refresh(); - }, - textInputAction: TextInputAction.next, - validator: (value) { - if (value == null) { - return '⚠️ شماره موبایل را وارد کنید'; - } else if (value.length < 11) { - return '⚠️ شماره موبایل باید 11 رقم باشد'; - } - return null; - }, - style: AppFonts.yekan13, - ); - }, controller.phoneOtpNumberController), - - SizedBox(height: 26), - - CaptchaWidget(controller: controller.captchaOtpController), - - SizedBox(height: 23), - RElevated( - text: 'ارسال رمز یکبار مصرف', - onPressed: () { - if (data.value.currentState?.validate() == true && - controller.captchaOtpController.validate()) { - controller.otpStatus.value = OtpStatus.sent; - controller.startTimer(); - } - }, - width: Get.width, - height: 48, - ), - ], - ), - ), - ); - }, controller.formKeyOtp); - } - - Widget confirmCodeForm() { - return ObxValue((data) { - return Form( - key: data.value, - child: Padding( - padding: EdgeInsets.symmetric(horizontal: 30, vertical: 50), - child: Column( - children: [ - SizedBox(height: 26), - - ObxValue((passwordController) { - return TextFormField( - controller: passwordController.value, - obscureText: controller.hidePassword.value, - decoration: InputDecoration( - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - gapPadding: 11, - ), - labelText: 'رمز عبور', - labelStyle: AppFonts.yekan13, - errorStyle: AppFonts.yekan13.copyWith( - color: AppColor.redNormal, - ), - - prefixIconConstraints: BoxConstraints( - maxHeight: 34, - minHeight: 34, - maxWidth: 34, - minWidth: 34, - ), - prefixIcon: Padding( - padding: const EdgeInsets.fromLTRB(0, 8, 8, 8), - child: vecWidget(Assets.vecKeySvg), - ), - suffix: - passwordController.value.text.trim().isNotEmpty - ? GestureDetector( - onTap: () { - controller.hidePassword.value = - !controller.hidePassword.value; - }, - child: Icon( - controller.hidePassword.value - ? CupertinoIcons.eye - : CupertinoIcons.eye_slash, - ), - ) - : null, - counterText: '', - ), - textInputAction: TextInputAction.done, - keyboardType: TextInputType.visiblePassword, - maxLines: 1, - onChanged: (value) { - if (controller.isOnError.value) { - controller.isOnError.value = !controller.isOnError.value; - data.value.currentState?.reset(); - passwordController.value.text = value; - } - passwordController.refresh(); - }, - validator: (value) { - if (value == null || value.isEmpty) { - return '⚠️ رمز عبور را وارد کنید'; // "Please enter the password" - } - return null; - }, - style: AppFonts.yekan13, - ); - }, controller.passwordController), - - SizedBox(height: 23), - - ObxValue((timer) { - if (timer.value == 0) { - return TextButton( - onPressed: () { - controller.otpStatus.value = OtpStatus.reSend; - controller.startTimer(); - }, - child: Text( - style: AppFonts.yekan13.copyWith( - color: AppColor.blueNormal, - ), - 'ارسال مجدد کد یکبار مصرف', - ), - ); - } else { - return Text( - 'اعتبار رمز ارسال شده ${controller.timeFormatted}', - style: AppFonts.yekan13, - ); - } - }, controller.secondsRemaining), - - RichText( - text: TextSpan( - children: [ - TextSpan( - text: ' کد ارسال شده به شماره ', - style: AppFonts.yekan14.copyWith( - color: AppColor.darkGreyDark, - ), - ), - TextSpan( - text: controller.phoneOtpNumberController.value.text, - style: AppFonts.yekan13Bold.copyWith( - color: AppColor.darkGreyDark, - ), - ), - TextSpan( - recognizer: - TapGestureRecognizer() - ..onTap = () { - controller.otpStatus.value = OtpStatus.init; - controller.captchaOtpController.clear(); - }, - text: ' ویرایش', - style: AppFonts.yekan14.copyWith( - color: AppColor.blueNormal, - ), - ), - ], - ), - ), - - SizedBox(height: 23), - RElevated( - text: 'ورود', - onPressed: () { - if (controller.formKeyOtp.value.currentState?.validate() == - true && - controller.captchaOtpController.validate()) {} - }, - width: Get.width, - height: 48, - ), - ], - ), - ), - ); - }, controller.formKeySentOtp); - } - - Widget logoWidget() { - return Column( - children: [ - Row(), - Image.asset(Assets.imagesInnerSplash, width: 120, height: 120), - Text( - 'سامانه رصدیار', - style: AppFonts.yekan16.copyWith(color: AppColor.darkGreyNormal), - ), - ], - ); - } - - Widget clearButton(VoidCallback onTap) { - return GestureDetector( - onTap: onTap, - child: Icon(CupertinoIcons.multiply_circle, size: 24), - ); - } -} diff --git a/lib/presentation/pages/splash/logic.dart b/lib/presentation/pages/splash/logic.dart index 5f98668..4dd4a4e 100644 --- a/lib/presentation/pages/splash/logic.dart +++ b/lib/presentation/pages/splash/logic.dart @@ -1,7 +1,6 @@ import 'package:flutter/animation.dart'; -import 'package:get/get.dart'; -import 'package:rasadyar_app/presentation/routes/app_pages.dart'; -import ''; +import 'package:rasadyar_core/core.dart'; +import 'package:rasadyar_inspection/inspection.dart'; class SplashLogic extends GetxController with GetTickerProviderStateMixin { late final AnimationController scaleController; diff --git a/lib/presentation/routes/app_pages.dart b/lib/presentation/routes/app_pages.dart index 4910184..61effcb 100644 --- a/lib/presentation/routes/app_pages.dart +++ b/lib/presentation/routes/app_pages.dart @@ -1,10 +1,9 @@ -import 'package:get/get.dart'; - -import 'package:rasadyar_app/presentation/pages/auth/auth_with_use_and_pass/logic.dart'; -import 'package:rasadyar_app/presentation/pages/auth/auth_with_use_and_pass/view.dart'; import 'package:rasadyar_app/presentation/pages/splash/logic.dart'; import 'package:rasadyar_app/presentation/pages/splash/view.dart'; import 'package:rasadyar_app/presentation/pages/system_design/system_design.dart'; +import 'package:rasadyar_auth/presentation/routes/pages.dart'; +import 'package:rasadyar_core/core.dart'; +import 'package:rasadyar_inspection/inspection.dart'; part 'app_paths.dart'; @@ -21,12 +20,9 @@ sealed class AppPages { page: () => SplashPage(), binding: BindingsBuilder.put(() => SplashLogic()), ), - GetPage( - name: AppPaths.authWithUserAndPass, - page: () => AuthWithUseAndPassPage(), - binding: BindingsBuilder.put(() => AuthWithUseAndPassLogic()), - ), ...InspectionPages.pages, + ...AuthPages.pages, + ]; } diff --git a/lib/presentation/routes/app_paths.dart b/lib/presentation/routes/app_paths.dart index f6fde78..cd31b8f 100644 --- a/lib/presentation/routes/app_paths.dart +++ b/lib/presentation/routes/app_paths.dart @@ -4,7 +4,5 @@ sealed class AppPaths { AppPaths._(); static const String splash = '/splash'; - static const String authWithUserAndPass = '/authWithUserAndPass'; - static const String authWithOtp = '/authWithOtp'; static const String systemDesignPage = '/systemDesignPage'; } diff --git a/packages/auth/lib/auth.dart b/packages/auth/lib/auth.dart index 34f09d1..8007b45 100644 --- a/packages/auth/lib/auth.dart +++ b/packages/auth/lib/auth.dart @@ -3,3 +3,6 @@ /// More dartdocs go here. library; +export 'data/services/auth_middelware.dart'; +export 'data/services/auth_service.dart'; +export 'data/di/auth_di.dart'; diff --git a/packages/auth/lib/data/common/dio_manager.dart b/packages/auth/lib/data/common/dio_manager.dart index 9be65ca..37f46ee 100644 --- a/packages/auth/lib/data/common/dio_manager.dart +++ b/packages/auth/lib/data/common/dio_manager.dart @@ -1,4 +1,4 @@ -import 'package:auths/data/repositories/auth_repository_imp.dart'; +import 'package:rasadyar_auth/data/repositories/auth_repository_imp.dart'; import 'package:rasadyar_core/core.dart'; import '../di/auth_di.dart'; diff --git a/packages/auth/lib/data/di/auth_di.dart b/packages/auth/lib/data/di/auth_di.dart index 06bf88d..3451b86 100644 --- a/packages/auth/lib/data/di/auth_di.dart +++ b/packages/auth/lib/data/di/auth_di.dart @@ -1,6 +1,7 @@ -import 'package:auths/data/common/constant.dart'; -import 'package:auths/data/repositories/auth_repository_imp.dart'; -import 'package:auths/data/services/auth_service.dart'; +import 'package:rasadyar_auth/data/common/constant.dart'; +import 'package:rasadyar_auth/data/repositories/auth_repository_imp.dart'; +import 'package:rasadyar_auth/data/services/auth_service.dart'; +import 'package:rasadyar_auth/data/services/token_storage_service.dart'; import 'package:rasadyar_core/core.dart'; import '../common/dio_manager.dart'; @@ -17,7 +18,8 @@ Future setupAuthDI() async { () => AuthRepositoryImpl(dioRemote), ); diAuth.registerLazySingleton(() => AuthService()); - + diAuth.registerLazySingleton(() => TokenStorageService()); + //hive - //await diAuth.registerCachedFactoryAsync(() async=>await ,) + //await diAuth.registerCachedFactoryAsync(() async=>await ,) } diff --git a/packages/auth/lib/data/services/auth_middelware.dart b/packages/auth/lib/data/services/auth_middelware.dart index bf63f2e..e34c326 100644 --- a/packages/auth/lib/data/services/auth_middelware.dart +++ b/packages/auth/lib/data/services/auth_middelware.dart @@ -1,16 +1,22 @@ import 'package:flutter/material.dart'; +import 'package:rasadyar_auth/data/di/auth_di.dart'; +import 'package:rasadyar_auth/data/services/token_storage_service.dart'; import 'package:rasadyar_core/core.dart'; import '../../presentation/routes/pages.dart'; -class AuthMiddleware extends GetMiddleware{ +class AuthMiddleware extends GetMiddleware { + var tokenService = diAuth.get(); + @override RouteSettings? redirect(String? route) { - if(route == AuthPaths.auth) { - return const RouteSettings(name: AuthPaths.moduleList); + eLog('redirect'); + final refreshToken = tokenService.getRefreshToken(); + final accessToken = tokenService.getAccessToken(); + + if (refreshToken == null || accessToken == null) { + return RouteSettings(name: AuthPaths.moduleList); } return super.redirect(route); } - - } diff --git a/packages/auth/lib/data/services/token_storage_service.dart b/packages/auth/lib/data/services/token_storage_service.dart index 82e9fa1..0f0eed6 100644 --- a/packages/auth/lib/data/services/token_storage_service.dart +++ b/packages/auth/lib/data/services/token_storage_service.dart @@ -43,11 +43,10 @@ class TokenStorageService extends GetxService { value: token, ); - Future getAccessToken() async => - await _localStorage.read(boxName: _boxName, key: _accessTokenKey); - - Future getRefreshToken() async => - await _localStorage.read(boxName: _boxName, key: _refreshTokenKey); + String? getAccessToken() => + _localStorage.read(boxName: _boxName, key: _accessTokenKey); + String? getRefreshToken() => + _localStorage.read(boxName: _boxName, key: _refreshTokenKey); Future deleteTokens() async => await _localStorage.clear(_boxName); diff --git a/packages/auth/lib/hive_registrar.g.dart b/packages/auth/lib/hive_registrar.g.dart index d19b903..d174454 100644 --- a/packages/auth/lib/hive_registrar.g.dart +++ b/packages/auth/lib/hive_registrar.g.dart @@ -2,8 +2,8 @@ // Do not modify // Check in to version control -import 'package:hive_ce/hive.dart'; -import 'package:auths/data/models/local/user_local/user_local_model.dart'; +import 'package:rasadyar_auth/data/models/local/user_local/user_local_model.dart'; +import 'package:rasadyar_core/core.dart'; extension HiveRegistrar on HiveInterface { void registerAdapters() { diff --git a/packages/auth/pubspec.yaml b/packages/auth/pubspec.yaml index 1e261ac..aa2237c 100644 --- a/packages/auth/pubspec.yaml +++ b/packages/auth/pubspec.yaml @@ -1,4 +1,4 @@ -name: auths +name: rasadyar_auth description: "A new Flutter project." version: 0.0.1 publish_to: 'none' diff --git a/packages/core/lib/core.dart b/packages/core/lib/core.dart index 36d756e..4e48c2f 100644 --- a/packages/core/lib/core.dart +++ b/packages/core/lib/core.dart @@ -13,6 +13,7 @@ export 'package:geolocator/geolocator.dart'; export 'package:get/get.dart'; //di export 'package:get_it/get_it.dart'; +export 'injection/di.dart'; //local storage export 'package:hive_ce_flutter/hive_flutter.dart'; diff --git a/packages/core/lib/infrastructure/local/hive_local_storage.dart b/packages/core/lib/infrastructure/local/hive_local_storage.dart index e88baa6..53b7b55 100644 --- a/packages/core/lib/infrastructure/local/hive_local_storage.dart +++ b/packages/core/lib/infrastructure/local/hive_local_storage.dart @@ -1,5 +1,5 @@ import 'package:flutter/foundation.dart'; -import 'package:hive_ce_flutter/hive_flutter.dart'; +import 'package:rasadyar_core/core.dart'; import 'i_local_storage.dart'; @@ -33,36 +33,42 @@ class HiveLocalStorage implements ILocalStorage { } @override - Future read({required String boxName,required String key}) async { - Box? box = await getBox(boxName); - return box.get(key) as T?; - } - - - - @override - Future add({required String boxName,required dynamic value}) async { - Box? box = await getBox(boxName); - await box.add(value); - } - - @override - Future addAll({required String boxName,required Iterable values}) async { - Box? box = await getBox(boxName); - await box.addAll(values); - } - - Future> getBox(String boxName) async { - final box = _boxes[boxName]; - if (box is Box) { - return box; - } else { - throw Exception('Box $boxName is not of expected type $T'); + T? read({required String boxName, required String key}) { + try { + Box? box = getBox(boxName); + return box?.get(key) as T?; + } on Exception catch (e) { + eLog(e); + return null; } } @override - Future clear(String boxName) async{ + Future add({required String boxName, required dynamic value}) async { + Box? box = getBox(boxName); + await box?.add(value); + } + + @override + Future addAll({ + required String boxName, + required Iterable values, + }) async { + Box? box = getBox(boxName); + await box?.addAll(values); + } + + Box? getBox(String boxName) { + final box = _boxes[boxName]; + if (box is Box) { + return box; + } else { + throw Exception('Box $boxName is not of exist'); + } + } + + @override + Future clear(String boxName) async { await _boxes[boxName]?.clear(); } @@ -74,8 +80,8 @@ class HiveLocalStorage implements ILocalStorage { required String boxName, required String key, }) async { - Box? box = await getBox(boxName); - await box.delete(key); + Box? box = getBox(boxName); + await box?.delete(key); } @override @@ -83,15 +89,15 @@ class HiveLocalStorage implements ILocalStorage { required String boxName, required String key, required value, - }) async{ - Box? box = await getBox(boxName); - await box.put(key, value); + }) async { + Box? box = getBox(boxName); + await box?.put(key, value); } @override - Future saveAll({required String boxName, required Map entries}) async{ - Box? box = await getBox(boxName); - await box.putAll(entries); + Future saveAll({required String boxName, required Map entries}) async { + Box? box = getBox(boxName); + await box?.putAll(entries); } @override @@ -99,8 +105,8 @@ class HiveLocalStorage implements ILocalStorage { required String boxName, required int index, required value, - }) async{ - Box? box = await getBox(boxName); - await box.putAt(index, value); + }) async { + Box? box = getBox(boxName); + await box?.putAt(index, value); } } diff --git a/packages/core/lib/infrastructure/local/i_local_storage.dart b/packages/core/lib/infrastructure/local/i_local_storage.dart index ae011ea..7cb4f49 100644 --- a/packages/core/lib/infrastructure/local/i_local_storage.dart +++ b/packages/core/lib/infrastructure/local/i_local_storage.dart @@ -13,7 +13,7 @@ abstract class ILocalStorage { String? collection, }); - Future read({required String boxName, required String key}); + T? read({required String boxName, required String key}); Future deleteValue({required String boxName, required String key}); diff --git a/packages/core/lib/injection/di.dart b/packages/core/lib/injection/di.dart index f6c0b73..95949c8 100644 --- a/packages/core/lib/injection/di.dart +++ b/packages/core/lib/injection/di.dart @@ -7,6 +7,7 @@ final diCore = GetIt.instance; Future setupAllProvider() async { await _setUpLogger(); await _setupLocalStorage(); + await _setupRemote(); await diCore.allReady(); } @@ -21,5 +22,5 @@ Future _setupLocalStorage() async { Future _setupRemote() async { - diCore.registerSingleton(HiveLocalStorage()); +// diCore.registerSingleton(HiveLocalStorage()); } diff --git a/packages/inspection/lib/presentation/add_mobile_inspector/view.dart b/packages/inspection/lib/presentation/add_mobile_inspector/view.dart index d6b1a0d..75bf4d1 100644 --- a/packages/inspection/lib/presentation/add_mobile_inspector/view.dart +++ b/packages/inspection/lib/presentation/add_mobile_inspector/view.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:inspection/presentation/routes/app_routes.dart'; import 'package:rasadyar_core/core.dart'; import 'package:rasadyar_core/presentation/widget/buttons/fab.dart'; +import 'package:rasadyar_inspection/presentation/routes/app_routes.dart'; import 'logic.dart'; diff --git a/packages/inspection/lib/presentation/add_supervision/logic.dart b/packages/inspection/lib/presentation/add_supervision/logic.dart index 4aee4ec..4f308bb 100644 --- a/packages/inspection/lib/presentation/add_supervision/logic.dart +++ b/packages/inspection/lib/presentation/add_supervision/logic.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:inspection/presentation/routes/app_routes.dart'; +import 'package:rasadyar_inspection/presentation/routes/app_routes.dart'; import 'package:rasadyar_core/core.dart'; class AddSupervisionLogic extends GetxController { diff --git a/packages/inspection/lib/presentation/add_supervision/view.dart b/packages/inspection/lib/presentation/add_supervision/view.dart index eb989cb..8be8f92 100644 --- a/packages/inspection/lib/presentation/add_supervision/view.dart +++ b/packages/inspection/lib/presentation/add_supervision/view.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:inspection/inspection.dart'; import 'package:rasadyar_core/core.dart'; +import 'package:rasadyar_inspection/presentation/routes/app_routes.dart'; import 'logic.dart'; diff --git a/packages/inspection/lib/presentation/filter/logic.dart b/packages/inspection/lib/presentation/filter/logic.dart index a8610fd..5caf8ed 100644 --- a/packages/inspection/lib/presentation/filter/logic.dart +++ b/packages/inspection/lib/presentation/filter/logic.dart @@ -1,9 +1,9 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:inspection/data/utils/marker_generator.dart'; -import 'package:inspection/presentation/filter/view.dart'; import 'package:rasadyar_core/core.dart'; +import 'package:rasadyar_inspection/data/utils/marker_generator.dart'; +import 'package:rasadyar_inspection/presentation/filter/view.dart'; class InspectorFilterLogic extends GetxController with GetTickerProviderStateMixin { diff --git a/packages/inspection/lib/presentation/filter/view.dart b/packages/inspection/lib/presentation/filter/view.dart index ca710bd..c8b2271 100644 --- a/packages/inspection/lib/presentation/filter/view.dart +++ b/packages/inspection/lib/presentation/filter/view.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:inspection/presentation/routes/app_routes.dart'; +import 'package:rasadyar_inspection/presentation/routes/app_routes.dart'; import 'package:rasadyar_core/core.dart'; import 'package:rasadyar_core/presentation/widget/buttons/fab.dart'; diff --git a/packages/inspection/lib/presentation/registration_of_violation/view.dart b/packages/inspection/lib/presentation/registration_of_violation/view.dart index d823a60..b74ee54 100644 --- a/packages/inspection/lib/presentation/registration_of_violation/view.dart +++ b/packages/inspection/lib/presentation/registration_of_violation/view.dart @@ -1,9 +1,10 @@ import 'package:flutter/material.dart'; -import 'package:inspection/presentation/registration_of_violation/logic.dart'; -import 'package:inspection/presentation/routes/app_routes.dart'; +import 'package:rasadyar_inspection/presentation/routes/app_routes.dart'; import 'package:rasadyar_core/core.dart'; import 'package:rasadyar_core/presentation/widget/buttons/fab.dart'; +import 'logic.dart'; + class RegistrationOfViolationPage extends GetView { const RegistrationOfViolationPage({super.key}); diff --git a/packages/inspection/lib/presentation/root/logic.dart b/packages/inspection/lib/presentation/root/logic.dart index 85ad494..e95a9b3 100644 --- a/packages/inspection/lib/presentation/root/logic.dart +++ b/packages/inspection/lib/presentation/root/logic.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:inspection/presentation/action/view.dart'; -import 'package:inspection/presentation/filter/view.dart'; -import 'package:inspection/presentation/profile/view.dart'; import 'package:rasadyar_core/core.dart'; +import 'package:rasadyar_inspection/presentation/action/view.dart'; +import 'package:rasadyar_inspection/presentation/filter/view.dart'; +import 'package:rasadyar_inspection/presentation/profile/view.dart'; enum ErrorLocationType { serviceDisabled, permissionDenied, none } diff --git a/packages/inspection/lib/presentation/routes/app_pages.dart b/packages/inspection/lib/presentation/routes/app_pages.dart index aeb25c4..69ac156 100644 --- a/packages/inspection/lib/presentation/routes/app_pages.dart +++ b/packages/inspection/lib/presentation/routes/app_pages.dart @@ -1,21 +1,22 @@ +import 'package:rasadyar_auth/auth.dart'; import 'package:rasadyar_core/core.dart'; -import 'package:inspection/presentation/action/logic.dart'; -import 'package:inspection/presentation/add_mobile_inspector/logic.dart'; -import 'package:inspection/presentation/add_mobile_inspector/view.dart'; -import 'package:inspection/presentation/add_supervision/logic.dart'; -import 'package:inspection/presentation/add_supervision/view.dart'; -import 'package:inspection/presentation/display_information/logic.dart'; -import 'package:inspection/presentation/display_information/view.dart'; -import 'package:inspection/presentation/filter/logic.dart'; -import 'package:inspection/presentation/location_details/logic.dart'; -import 'package:inspection/presentation/location_details/view.dart'; -import 'package:inspection/presentation/profile/logic.dart'; -import 'package:inspection/presentation/profile/view.dart'; -import 'package:inspection/presentation/registration_of_violation/logic.dart'; -import 'package:inspection/presentation/registration_of_violation/view.dart'; -import 'package:inspection/presentation/root/logic.dart'; -import 'package:inspection/presentation/root/view.dart'; -import 'package:inspection/presentation/routes/app_routes.dart'; +import 'package:rasadyar_inspection/presentation/action/logic.dart'; +import 'package:rasadyar_inspection/presentation/add_mobile_inspector/logic.dart'; +import 'package:rasadyar_inspection/presentation/add_mobile_inspector/view.dart'; +import 'package:rasadyar_inspection/presentation/add_supervision/logic.dart'; +import 'package:rasadyar_inspection/presentation/add_supervision/view.dart'; +import 'package:rasadyar_inspection/presentation/display_information/logic.dart'; +import 'package:rasadyar_inspection/presentation/display_information/view.dart'; +import 'package:rasadyar_inspection/presentation/filter/logic.dart'; +import 'package:rasadyar_inspection/presentation/location_details/logic.dart'; +import 'package:rasadyar_inspection/presentation/location_details/view.dart'; +import 'package:rasadyar_inspection/presentation/profile/logic.dart'; +import 'package:rasadyar_inspection/presentation/profile/view.dart'; +import 'package:rasadyar_inspection/presentation/registration_of_violation/logic.dart'; +import 'package:rasadyar_inspection/presentation/registration_of_violation/view.dart'; +import 'package:rasadyar_inspection/presentation/root/logic.dart'; +import 'package:rasadyar_inspection/presentation/root/view.dart'; +import 'package:rasadyar_inspection/presentation/routes/app_routes.dart'; sealed class InspectionPages { InspectionPages._(); @@ -24,6 +25,7 @@ sealed class InspectionPages { GetPage( name: InspectionRoutes.inspection, page: () => RootPage(), + middlewares: [AuthMiddleware()], binding: BindingsBuilder(() { Get.put(RootLogic()); Get.put(InspectorFilterLogic()); diff --git a/packages/inspection/pubspec.lock b/packages/inspection/pubspec.lock index 2a641bd..793f1ae 100644 --- a/packages/inspection/pubspec.lock +++ b/packages/inspection/pubspec.lock @@ -600,6 +600,13 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" + rasadyar_auth: + dependency: "direct main" + description: + path: "../auth" + relative: true + source: path + version: "0.0.1" rasadyar_core: dependency: "direct main" description: diff --git a/packages/inspection/pubspec.yaml b/packages/inspection/pubspec.yaml index bb987bc..474c698 100644 --- a/packages/inspection/pubspec.yaml +++ b/packages/inspection/pubspec.yaml @@ -1,4 +1,4 @@ -name: inspection +name: rasadyar_inspection description: "inspection module for rasadyar" publish_to: 'none' version: 1.0.1 @@ -10,4 +10,6 @@ dependencies: flutter: sdk: flutter rasadyar_core: - path: ../core \ No newline at end of file + path: ../core + rasadyar_auth: + path: ../auth \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index bf4cc5d..82b7839 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -917,6 +917,13 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.0" + rasadyar_auth: + dependency: "direct main" + description: + path: "packages/auth" + relative: true + source: path + version: "0.0.1" rasadyar_core: dependency: "direct main" description: @@ -924,6 +931,13 @@ packages: relative: true source: path version: "1.0.0+1" + rasadyar_inspection: + dependency: "direct main" + description: + path: "packages/inspection" + relative: true + source: path + version: "1.0.1" rxdart: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index f8d6884..95fc0f1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -14,9 +14,17 @@ dependencies: cupertino_icons: ^1.0.8 + #rasadyar packages rasadyar_core: path: ./packages/core + rasadyar_inspection: + path: ./packages/inspection + + rasadyar_auth: + path: ./packages/auth + + ##code generation freezed_annotation: ^3.0.0