[Pkg-owncloud-commits] [owncloud] 17/70: Add machine readable error messages to OC\JSON

David Prévot taffit at moszumanska.debian.org
Mon Jul 14 17:38:03 UTC 2014


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository owncloud.

commit b429a716603d2d9fa60a442cde1f43d684e2afb2
Author: Robin Appelman <icewind at owncloud.com>
Date:   Fri Jul 4 14:08:48 2014 +0200

    Add machine readable error messages to OC\JSON
    
    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           | 11 +++++++++--
 apps/files/tests/js/filelistSpec.js | 26 ++++++++++++++++++++++++++
 lib/private/json.php                | 12 ++++++------
 3 files changed, 41 insertions(+), 8 deletions(-)

diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 9c6d31e..3e31165 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -947,6 +947,13 @@
 			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;
 			}
@@ -970,7 +977,7 @@
 			}
 
 			this.setFiles(result.data.files);
-			return true
+			return true;
 		},
 
 		updateStorageStatistics: function(force) {
@@ -1568,7 +1575,7 @@
 				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('('));
diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js
index 713cd54..ae22ae0 100644
--- a/apps/files/tests/js/filelistSpec.js
+++ b/apps/files/tests/js/filelistSpec.js
@@ -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);
+		});
+	});
 });
diff --git a/lib/private/json.php b/lib/private/json.php
index 4634d7a..da38654 100644
--- a/lib/private/json.php
+++ b/lib/private/json.php
@@ -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();
 		}
 	}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git



More information about the Pkg-owncloud-commits mailing list