Browse Source

Fixed admin is forced to change password on mobile app (#287)

* Fixed issues

* Upversion and add changed log
Alex 3 years ago
parent
commit
992f792c0a

+ 2 - 0
mobile/android/fastlane/metadata/android/en-US/changelogs/22.txt

@@ -0,0 +1,2 @@
+* Fixed admin is forced to change password upon logging in on mobile app
+* Fixed change password form validation

+ 1 - 1
mobile/ios/fastlane/Fastfile

@@ -19,7 +19,7 @@ platform :ios do
   desc "iOS Beta"
   lane :beta do
     increment_version_number(
-      version_number: "1.14.0"
+      version_number: "1.15.0"
     )
     increment_build_number(
       build_number: latest_testflight_build_number + 1,

+ 34 - 20
mobile/lib/modules/login/ui/change_password_form.dart

@@ -18,6 +18,7 @@ class ChangePasswordForm extends HookConsumerWidget {
     final confirmPasswordController =
         useTextEditingController.fromValue(TextEditingValue.empty);
     final authState = ref.watch(authenticationProvider);
+    final formKey = GlobalKey<FormState>();
 
     return Center(
       child: ConstrainedBox(
@@ -47,15 +48,24 @@ class ChangePasswordForm extends HookConsumerWidget {
                   ),
                 ),
               ),
-              PasswordInput(controller: passwordController),
-              ConfirmPasswordInput(
-                originalController: passwordController,
-                confirmController: confirmPasswordController,
-              ),
-              Align(
-                alignment: Alignment.center,
-                child: ChangePasswordButton(
-                    passwordController: passwordController),
+              Form(
+                key: formKey,
+                child: Column(
+                  children: [
+                    PasswordInput(controller: passwordController),
+                    Padding(
+                      padding: const EdgeInsets.symmetric(vertical: 16.0),
+                      child: ConfirmPasswordInput(
+                        originalController: passwordController,
+                        confirmController: confirmPasswordController,
+                      ),
+                    ),
+                    ChangePasswordButton(
+                      passwordController: passwordController,
+                      formKey: formKey,
+                    ),
+                  ],
+                ),
               )
             ],
           ),
@@ -119,10 +129,12 @@ class ConfirmPasswordInput extends StatelessWidget {
 
 class ChangePasswordButton extends ConsumerWidget {
   final TextEditingController passwordController;
+  final GlobalKey<FormState> formKey;
 
   const ChangePasswordButton({
     Key? key,
     required this.passwordController,
+    required this.formKey,
   }) : super(key: key);
 
   @override
@@ -136,19 +148,21 @@ class ChangePasswordButton extends ConsumerWidget {
           padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 25),
         ),
         onPressed: () async {
-          var isSuccess = await ref
-              .watch(authenticationProvider.notifier)
-              .changePassword(passwordController.value.text);
+          if (formKey.currentState!.validate()) {
+            var isSuccess = await ref
+                .watch(authenticationProvider.notifier)
+                .changePassword(passwordController.value.text);
 
-          if (isSuccess) {
-            bool res =
-                await ref.watch(authenticationProvider.notifier).logout();
+            if (isSuccess) {
+              bool res =
+                  await ref.watch(authenticationProvider.notifier).logout();
 
-            if (res) {
-              ref.watch(backupProvider.notifier).cancelBackup();
-              ref.watch(assetProvider.notifier).clearAllAsset();
-              ref.watch(websocketProvider.notifier).disconnect();
-              AutoRouter.of(context).replace(const LoginRoute());
+              if (res) {
+                ref.watch(backupProvider.notifier).cancelBackup();
+                ref.watch(assetProvider.notifier).clearAllAsset();
+                ref.watch(websocketProvider.notifier).disconnect();
+                AutoRouter.of(context).replace(const LoginRoute());
+              }
             }
           }
         },

+ 2 - 1
mobile/lib/modules/login/ui/login_form.dart

@@ -219,7 +219,8 @@ class LoginButton extends ConsumerWidget {
           if (isAuthenticated) {
             // Resume backup (if enable) then navigate
 
-            if (ref.watch(authenticationProvider).shouldChangePassword) {
+            if (ref.watch(authenticationProvider).shouldChangePassword &&
+                !ref.watch(authenticationProvider).isAdmin) {
               AutoRouter.of(context).push(const ChangePasswordRoute());
             } else {
               ref.watch(backupProvider.notifier).resumeBackup();

+ 1 - 1
mobile/pubspec.yaml

@@ -2,7 +2,7 @@ name: immich_mobile
 description: Immich - selfhosted backup media file on mobile phone
 
 publish_to: "none"
-version: 1.14.0+21
+version: 1.15.0+22
 
 environment:
   sdk: ">=2.17.0 <3.0.0"