]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add machine readable error messages to OC\JSON
authorRobin Appelman <icewind@owncloud.com>
Fri, 4 Jul 2014 12:08:48 +0000 (14:08 +0200)
committerThomas Müller <thomas.mueller@tmit.eu>
Fri, 4 Jul 2014 14:20:27 +0000 (16:20 +0200)
Reload the files app in case of authentication errors, expired tokens or disabled app

Reloading will triger the full server side handeling of those errors

formatting

fix missing semicolon + some jshint warnings

apps/files/js/filelist.js
apps/files/tests/js/filelistSpec.js
lib/private/json.php

index 400e3e28f001e411a7471bfad0bf6f335dd31502..80b30968effa946f454eedb9a308a6ecfb7bc381 100644 (file)
                        this.hideMask();
 
                        if (!result || result.status === 'error') {
+                               // if the error is not related to folder we're trying to load, reload the page to handle logout etc
+                               if (result.data.error === 'authentication_error' ||
+                                       result.data.error === 'token_expired' ||
+                                       result.data.error === 'application_not_enabled'
+                               ) {
+                                       OC.redirect(OC.generateUrl('apps/files'));
+                               }
                                OC.Notification.show(result.data.message);
                                return false;
                        }
                        }
 
                        this.setFiles(result.data.files);
-                       return true
+                       return true;
                },
 
                updateStorageStatistics: function(force) {
                                numMatch=base.match(/\((\d+)\)/);
                                var num=2;
                                if (numMatch && numMatch.length>0) {
-                                       num=parseInt(numMatch[numMatch.length-1])+1;
+                                       num=parseInt(numMatch[numMatch.length-1], 10)+1;
                                        base=base.split('(');
                                        base.pop();
                                        base=$.trim(base.join('('));
index 713cd5468d8a913038607f3a075e3357d44a0d76..ae22ae0123e55932be00b99102057cc72a0ab247 100644 (file)
@@ -1933,4 +1933,30 @@ describe('OCA.Files.FileList tests', function() {
                        });
                });
        });
+       describe('Handeling errors', function () {
+               beforeEach(function () {
+                       redirectStub = sinon.stub(OC, 'redirect');
+
+                       fileList = new OCA.Files.FileList($('#app-content-files'));
+               });
+               afterEach(function () {
+                       fileList = undefined;
+
+                       redirectStub.restore();
+               });
+               it('reloads the page on authentication errors', function () {
+                       fileList.reload();
+                       fakeServer.requests[0].respond(
+                               200,
+                               { 'Content-Type': 'application/json' },
+                               JSON.stringify({
+                                       status: 'error',
+                                       data: {
+                                               'error': 'authentication_error'
+                                       }
+                               })
+                       );
+                       expect(redirectStub.calledWith(OC.generateUrl('apps/files'))).toEqual(true);
+               });
+       });
 });
index 4634d7adfea821c4272be70cd737b297869327c6..da38654997f2eabfd13045c4bd304607069f3755 100644 (file)
@@ -26,7 +26,7 @@ class OC_JSON{
        public static function checkAppEnabled($app) {
                if( !OC_App::isEnabled($app)) {
                        $l = OC_L10N::get('lib');
-                       self::error(array( 'data' => array( 'message' => $l->t('Application is not enabled') )));
+                       self::error(array( 'data' => array( 'message' => $l->t('Application is not enabled'), 'error' => 'application_not_enabled' )));
                        exit();
                }
        }
@@ -37,7 +37,7 @@ class OC_JSON{
        public static function checkLoggedIn() {
                if( !OC_User::isLoggedIn()) {
                        $l = OC_L10N::get('lib');
-                       self::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
+                       self::error(array( 'data' => array( 'message' => $l->t('Authentication error'), 'error' => 'authentication_error' )));
                        exit();
                }
        }
@@ -48,7 +48,7 @@ class OC_JSON{
        public static function callCheck() {
                if( !OC_Util::isCallRegistered()) {
                        $l = OC_L10N::get('lib');
-                       self::error(array( 'data' => array( 'message' => $l->t('Token expired. Please reload page.') )));
+                       self::error(array( 'data' => array( 'message' => $l->t('Token expired. Please reload page.'), 'error' => 'token_expired' )));
                        exit();
                }
        }
@@ -59,7 +59,7 @@ class OC_JSON{
        public static function checkAdminUser() {
                if( !OC_User::isAdminUser(OC_User::getUser())) {
                        $l = OC_L10N::get('lib');
-                       self::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
+                       self::error(array( 'data' => array( 'message' => $l->t('Authentication error'), 'error' => 'authentication_error' )));
                        exit();
                }
        }
@@ -71,7 +71,7 @@ class OC_JSON{
        public static function checkUserExists($user) {
                if (!OCP\User::userExists($user)) {
                        $l = OC_L10N::get('lib');
-                       OCP\JSON::error(array('data' => array('message' => $l->t('Unknown user'))));
+                       OCP\JSON::error(array('data' => array('message' => $l->t('Unknown user'), 'error' => 'unknown_user' )));
                        exit;
                }
        }
@@ -84,7 +84,7 @@ class OC_JSON{
        public static function checkSubAdminUser() {
                if(!OC_SubAdmin::isSubAdmin(OC_User::getUser())) {
                        $l = OC_L10N::get('lib');
-                       self::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
+                       self::error(array( 'data' => array( 'message' => $l->t('Authentication error'), 'error' => 'authentication_error' )));
                        exit();
                }
        }