]> source.dussan.org Git - nextcloud-server.git/commitdiff
strip whitespace from the beginning and end of the display name to avoid empty displa...
authorBjoern Schiessle <schiessle@owncloud.com>
Wed, 15 Oct 2014 12:05:18 +0000 (14:05 +0200)
committerBjoern Schiessle <schiessle@owncloud.com>
Wed, 15 Oct 2014 12:54:35 +0000 (14:54 +0200)
lib/private/user/user.php
tests/lib/user/user.php

index 993fb4c0c64531bc26e2af3cf45b8050bac2bd8a..452261a75ffbec78b114a288e555c1c667773eaa 100644 (file)
@@ -89,8 +89,17 @@ class User implements IUser {
         */
        public function getDisplayName() {
                if (!isset($this->displayName)) {
+                       $displayName = '';
                        if ($this->backend and $this->backend->implementsActions(OC_USER_BACKEND_GET_DISPLAYNAME)) {
-                               $this->displayName = $this->backend->getDisplayName($this->uid);
+                               // get display name and strip whitespace from the beginning and end of it
+                               $backendDisplayName = $this->backend->getDisplayName($this->uid);
+                               if (is_string($backendDisplayName)) {
+                                       $displayName = trim($backendDisplayName);
+                               }
+                       }
+
+                       if (!empty($displayName)) {
+                               $this->displayName = $displayName;
                        } else {
                                $this->displayName = $this->uid;
                        }
@@ -105,7 +114,8 @@ class User implements IUser {
         * @return bool
         */
        public function setDisplayName($displayName) {
-               if ($this->canChangeDisplayName()) {
+               $displayName = trim($displayName);
+               if ($this->canChangeDisplayName() && !empty($displayName)) {
                        $this->displayName = $displayName;
                        $result = $this->backend->setDisplayName($this->uid, $displayName);
                        return $result !== false;
index 3f90432c6b0f92662fa4389913c94006ba5f153d..7a1db861c982dbe08a7553cd1d64cbbeb2b5d96f 100644 (file)
@@ -32,6 +32,28 @@ class User extends \PHPUnit_Framework_TestCase {
                $this->assertEquals('Foo', $user->getDisplayName());
        }
 
+       /**
+        * if the display name contain whitespaces only, we expect the uid as result
+        */
+       public function testDisplayNameEmpty() {
+               /**
+                * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+                */
+               $backend = $this->getMock('\OC_User_Backend');
+               $backend->expects($this->once())
+                       ->method('getDisplayName')
+                       ->with($this->equalTo('foo'))
+                       ->will($this->returnValue('  '));
+
+               $backend->expects($this->any())
+                       ->method('implementsActions')
+                       ->with($this->equalTo(\OC_USER_BACKEND_GET_DISPLAYNAME))
+                       ->will($this->returnValue(true));
+
+               $user = new \OC\User\User('foo', $backend);
+               $this->assertEquals('foo', $user->getDisplayName());
+       }
+
        public function testDisplayNameNotSupported() {
                /**
                 * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
@@ -305,6 +327,30 @@ class User extends \PHPUnit_Framework_TestCase {
                $this->assertEquals('Foo',$user->getDisplayName());
        }
 
+       /**
+        * don't allow display names containing whitespaces only
+        */
+       public function testSetDisplayNameEmpty() {
+               /**
+                * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
+                */
+               $backend = $this->getMock('\OC_User_Database');
+
+               $backend->expects($this->any())
+                       ->method('implementsActions')
+                       ->will($this->returnCallback(function ($actions) {
+                               if ($actions === \OC_USER_BACKEND_SET_DISPLAYNAME) {
+                                       return true;
+                               } else {
+                                       return false;
+                               }
+                       }));
+
+               $user = new \OC\User\User('foo', $backend);
+               $this->assertFalse($user->setDisplayName(' '));
+               $this->assertEquals('foo',$user->getDisplayName());
+       }
+
        public function testSetDisplayNameNotSupported() {
                /**
                 * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend