Passed
Push — master ( f2885c...024fc2 )
by Morris
11:42 queued 10s
created
lib/private/Contacts/ContactsMenu/ActionProviderStore.php 1 patch
Indentation   +75 added lines, -75 removed lines patch added patch discarded remove patch
@@ -35,80 +35,80 @@
 block discarded – undo
35 35
 
36 36
 class ActionProviderStore {
37 37
 
38
-	/** @var IServerContainer */
39
-	private $serverContainer;
40
-
41
-	/** @var AppManager */
42
-	private $appManager;
43
-
44
-	/** @var ILogger */
45
-	private $logger;
46
-
47
-	/**
48
-	 * @param IServerContainer $serverContainer
49
-	 * @param AppManager $appManager
50
-	 * @param ILogger $logger
51
-	 */
52
-	public function __construct(IServerContainer $serverContainer, AppManager $appManager, ILogger $logger) {
53
-		$this->serverContainer = $serverContainer;
54
-		$this->appManager = $appManager;
55
-		$this->logger = $logger;
56
-	}
57
-
58
-	/**
59
-	 * @param IUser $user
60
-	 * @return IProvider[]
61
-	 * @throws Exception
62
-	 */
63
-	public function getProviders(IUser $user) {
64
-		$appClasses = $this->getAppProviderClasses($user);
65
-		$providerClasses = $this->getServerProviderClasses();
66
-		$allClasses = array_merge($providerClasses, $appClasses);
67
-		$providers = [];
68
-
69
-		foreach ($allClasses as $class) {
70
-			try {
71
-				$providers[] = $this->serverContainer->query($class);
72
-			} catch (QueryException $ex) {
73
-				$this->logger->logException($ex, [
74
-					'message' => "Could not load contacts menu action provider $class",
75
-					'app' => 'core',
76
-				]);
77
-				throw new Exception("Could not load contacts menu action provider");
78
-			}
79
-		}
80
-
81
-		return $providers;
82
-	}
83
-
84
-	/**
85
-	 * @return string[]
86
-	 */
87
-	private function getServerProviderClasses() {
88
-		return [
89
-			EMailProvider::class,
90
-		];
91
-	}
92
-
93
-	/**
94
-	 * @param IUser $user
95
-	 * @return string[]
96
-	 */
97
-	private function getAppProviderClasses(IUser $user) {
98
-		return array_reduce($this->appManager->getEnabledAppsForUser($user), function($all, $appId) {
99
-			$info = $this->appManager->getAppInfo($appId);
100
-
101
-			if (!isset($info['contactsmenu']) || !isset($info['contactsmenu'])) {
102
-				// Nothing to add
103
-				return $all;
104
-			}
105
-
106
-			$providers = array_reduce($info['contactsmenu'], function($all, $provider) {
107
-				return array_merge($all, [$provider]);
108
-			}, []);
109
-
110
-			return array_merge($all, $providers);
111
-		}, []);
112
-	}
38
+    /** @var IServerContainer */
39
+    private $serverContainer;
40
+
41
+    /** @var AppManager */
42
+    private $appManager;
43
+
44
+    /** @var ILogger */
45
+    private $logger;
46
+
47
+    /**
48
+     * @param IServerContainer $serverContainer
49
+     * @param AppManager $appManager
50
+     * @param ILogger $logger
51
+     */
52
+    public function __construct(IServerContainer $serverContainer, AppManager $appManager, ILogger $logger) {
53
+        $this->serverContainer = $serverContainer;
54
+        $this->appManager = $appManager;
55
+        $this->logger = $logger;
56
+    }
57
+
58
+    /**
59
+     * @param IUser $user
60
+     * @return IProvider[]
61
+     * @throws Exception
62
+     */
63
+    public function getProviders(IUser $user) {
64
+        $appClasses = $this->getAppProviderClasses($user);
65
+        $providerClasses = $this->getServerProviderClasses();
66
+        $allClasses = array_merge($providerClasses, $appClasses);
67
+        $providers = [];
68
+
69
+        foreach ($allClasses as $class) {
70
+            try {
71
+                $providers[] = $this->serverContainer->query($class);
72
+            } catch (QueryException $ex) {
73
+                $this->logger->logException($ex, [
74
+                    'message' => "Could not load contacts menu action provider $class",
75
+                    'app' => 'core',
76
+                ]);
77
+                throw new Exception("Could not load contacts menu action provider");
78
+            }
79
+        }
80
+
81
+        return $providers;
82
+    }
83
+
84
+    /**
85
+     * @return string[]
86
+     */
87
+    private function getServerProviderClasses() {
88
+        return [
89
+            EMailProvider::class,
90
+        ];
91
+    }
92
+
93
+    /**
94
+     * @param IUser $user
95
+     * @return string[]
96
+     */
97
+    private function getAppProviderClasses(IUser $user) {
98
+        return array_reduce($this->appManager->getEnabledAppsForUser($user), function($all, $appId) {
99
+            $info = $this->appManager->getAppInfo($appId);
100
+
101
+            if (!isset($info['contactsmenu']) || !isset($info['contactsmenu'])) {
102
+                // Nothing to add
103
+                return $all;
104
+            }
105
+
106
+            $providers = array_reduce($info['contactsmenu'], function($all, $provider) {
107
+                return array_merge($all, [$provider]);
108
+            }, []);
109
+
110
+            return array_merge($all, $providers);
111
+        }, []);
112
+    }
113 113
 
114 114
 }
Please login to merge, or discard this patch.
lib/private/Lockdown/LockdownManager.php 1 patch
Indentation   +43 added lines, -43 removed lines patch added patch discarded remove patch
@@ -24,56 +24,56 @@
 block discarded – undo
24 24
 use OCP\Lockdown\ILockdownManager;
25 25
 
26 26
 class LockdownManager implements ILockdownManager {
27
-	/** @var ISession */
28
-	private $sessionCallback;
27
+    /** @var ISession */
28
+    private $sessionCallback;
29 29
 
30
-	private $enabled = false;
30
+    private $enabled = false;
31 31
 
32
-	/** @var array|null */
33
-	private $scope;
32
+    /** @var array|null */
33
+    private $scope;
34 34
 
35
-	/**
36
-	 * LockdownManager constructor.
37
-	 *
38
-	 * @param callable $sessionCallback we need to inject the session lazily to avoid dependency loops
39
-	 */
40
-	public function __construct(callable $sessionCallback) {
41
-		$this->sessionCallback = $sessionCallback;
42
-	}
35
+    /**
36
+     * LockdownManager constructor.
37
+     *
38
+     * @param callable $sessionCallback we need to inject the session lazily to avoid dependency loops
39
+     */
40
+    public function __construct(callable $sessionCallback) {
41
+        $this->sessionCallback = $sessionCallback;
42
+    }
43 43
 
44 44
 
45
-	public function enable() {
46
-		$this->enabled = true;
47
-	}
45
+    public function enable() {
46
+        $this->enabled = true;
47
+    }
48 48
 
49
-	/**
50
-	 * @return ISession
51
-	 */
52
-	private function getSession() {
53
-		$callback = $this->sessionCallback;
54
-		return $callback();
55
-	}
49
+    /**
50
+     * @return ISession
51
+     */
52
+    private function getSession() {
53
+        $callback = $this->sessionCallback;
54
+        return $callback();
55
+    }
56 56
 
57
-	private function getScopeAsArray() {
58
-		if (!$this->scope) {
59
-			$session = $this->getSession();
60
-			$sessionScope = $session->get('token_scope');
61
-			if ($sessionScope) {
62
-				$this->scope = $sessionScope;
63
-			}
64
-		}
65
-		return $this->scope;
66
-	}
57
+    private function getScopeAsArray() {
58
+        if (!$this->scope) {
59
+            $session = $this->getSession();
60
+            $sessionScope = $session->get('token_scope');
61
+            if ($sessionScope) {
62
+                $this->scope = $sessionScope;
63
+            }
64
+        }
65
+        return $this->scope;
66
+    }
67 67
 
68
-	public function setToken(IToken $token) {
69
-		$this->scope = $token->getScopeAsArray();
70
-		$session = $this->getSession();
71
-		$session->set('token_scope', $this->scope);
72
-		$this->enable();
73
-	}
68
+    public function setToken(IToken $token) {
69
+        $this->scope = $token->getScopeAsArray();
70
+        $session = $this->getSession();
71
+        $session->set('token_scope', $this->scope);
72
+        $this->enable();
73
+    }
74 74
 
75
-	public function canAccessFilesystem() {
76
-		$scope = $this->getScopeAsArray();
77
-		return !$scope || $scope['filesystem'];
78
-	}
75
+    public function canAccessFilesystem() {
76
+        $scope = $this->getScopeAsArray();
77
+        return !$scope || $scope['filesystem'];
78
+    }
79 79
 }
Please login to merge, or discard this patch.
apps/user_ldap/appinfo/routes.php 1 patch
Indentation   +19 added lines, -19 removed lines patch added patch discarded remove patch
@@ -23,36 +23,36 @@
 block discarded – undo
23 23
 
24 24
 /** @var $this \OCP\Route\IRouter */
25 25
 $this->create('user_ldap_ajax_clearMappings', 'ajax/clearMappings.php')
26
-	->actionInclude('user_ldap/ajax/clearMappings.php');
26
+    ->actionInclude('user_ldap/ajax/clearMappings.php');
27 27
 $this->create('user_ldap_ajax_deleteConfiguration', 'ajax/deleteConfiguration.php')
28
-	->actionInclude('user_ldap/ajax/deleteConfiguration.php');
28
+    ->actionInclude('user_ldap/ajax/deleteConfiguration.php');
29 29
 $this->create('user_ldap_ajax_getConfiguration', 'ajax/getConfiguration.php')
30
-	->actionInclude('user_ldap/ajax/getConfiguration.php');
30
+    ->actionInclude('user_ldap/ajax/getConfiguration.php');
31 31
 $this->create('user_ldap_ajax_getNewServerConfigPrefix', 'ajax/getNewServerConfigPrefix.php')
32
-	->actionInclude('user_ldap/ajax/getNewServerConfigPrefix.php');
32
+    ->actionInclude('user_ldap/ajax/getNewServerConfigPrefix.php');
33 33
 $this->create('user_ldap_ajax_setConfiguration', 'ajax/setConfiguration.php')
34
-	->actionInclude('user_ldap/ajax/setConfiguration.php');
34
+    ->actionInclude('user_ldap/ajax/setConfiguration.php');
35 35
 $this->create('user_ldap_ajax_testConfiguration', 'ajax/testConfiguration.php')
36
-	->actionInclude('user_ldap/ajax/testConfiguration.php');
36
+    ->actionInclude('user_ldap/ajax/testConfiguration.php');
37 37
 $this->create('user_ldap_ajax_wizard', 'ajax/wizard.php')
38
-	->actionInclude('user_ldap/ajax/wizard.php');
38
+    ->actionInclude('user_ldap/ajax/wizard.php');
39 39
 
40 40
 $application = new \OCP\AppFramework\App('user_ldap');
41 41
 $application->registerRoutes($this, [
42
-	'ocs' => [
43
-		['name' => 'ConfigAPI#create', 'url' => '/api/v1/config', 'verb' => 'POST'],
44
-		['name' => 'ConfigAPI#show',   'url' => '/api/v1/config/{configID}', 'verb' => 'GET'],
45
-		['name' => 'ConfigAPI#modify', 'url' => '/api/v1/config/{configID}', 'verb' => 'PUT'],
46
-		['name' => 'ConfigAPI#delete', 'url' => '/api/v1/config/{configID}', 'verb' => 'DELETE'],
47
-	]
42
+    'ocs' => [
43
+        ['name' => 'ConfigAPI#create', 'url' => '/api/v1/config', 'verb' => 'POST'],
44
+        ['name' => 'ConfigAPI#show',   'url' => '/api/v1/config/{configID}', 'verb' => 'GET'],
45
+        ['name' => 'ConfigAPI#modify', 'url' => '/api/v1/config/{configID}', 'verb' => 'PUT'],
46
+        ['name' => 'ConfigAPI#delete', 'url' => '/api/v1/config/{configID}', 'verb' => 'DELETE'],
47
+    ]
48 48
 ]);
49 49
 
50 50
 $application = new OCA\User_LDAP\AppInfo\Application();
51 51
 $application->registerRoutes($this, [
52
-	'routes' => [
53
-		['name' => 'renewPassword#tryRenewPassword', 'url' => '/renewpassword', 'verb' => 'POST'],
54
-		['name' => 'renewPassword#showRenewPasswordForm', 'url' => '/renewpassword/{user}', 'verb' => 'GET'],
55
-		['name' => 'renewPassword#cancel', 'url' => '/renewpassword/cancel', 'verb' => 'GET'],
56
-		['name' => 'renewPassword#showLoginFormInvalidPassword', 'url' => '/renewpassword/invalidlogin/{user}', 'verb' => 'GET'],
57
-	]
52
+    'routes' => [
53
+        ['name' => 'renewPassword#tryRenewPassword', 'url' => '/renewpassword', 'verb' => 'POST'],
54
+        ['name' => 'renewPassword#showRenewPasswordForm', 'url' => '/renewpassword/{user}', 'verb' => 'GET'],
55
+        ['name' => 'renewPassword#cancel', 'url' => '/renewpassword/cancel', 'verb' => 'GET'],
56
+        ['name' => 'renewPassword#showLoginFormInvalidPassword', 'url' => '/renewpassword/invalidlogin/{user}', 'verb' => 'GET'],
57
+    ]
58 58
 ]);
Please login to merge, or discard this patch.
apps/dav/lib/CalDAV/PublicCalendarObject.php 1 patch
Indentation   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -23,11 +23,11 @@
 block discarded – undo
23 23
 
24 24
 class PublicCalendarObject extends CalendarObject {
25 25
 
26
-	/**
27
-	 * public calendars are always shared
28
-	 * @return bool
29
-	 */
30
-	protected function isShared() {
31
-		return true;
32
-	}
26
+    /**
27
+     * public calendars are always shared
28
+     * @return bool
29
+     */
30
+    protected function isShared() {
31
+        return true;
32
+    }
33 33
 }
34 34
\ No newline at end of file
Please login to merge, or discard this patch.
apps/dav/lib/CalDAV/PublicCalendar.php 1 patch
Indentation   +54 added lines, -54 removed lines patch added patch discarded remove patch
@@ -25,63 +25,63 @@
 block discarded – undo
25 25
 
26 26
 class PublicCalendar extends Calendar {
27 27
 
28
-	/**
29
-	 * @param string $name
30
-	 * @throws NotFound
31
-	 * @return PublicCalendarObject
32
-	 */
33
-	public function getChild($name) {
34
-		$obj = $this->caldavBackend->getCalendarObject($this->calendarInfo['id'], $name);
28
+    /**
29
+     * @param string $name
30
+     * @throws NotFound
31
+     * @return PublicCalendarObject
32
+     */
33
+    public function getChild($name) {
34
+        $obj = $this->caldavBackend->getCalendarObject($this->calendarInfo['id'], $name);
35 35
 
36
-		if (!$obj) {
37
-			throw new NotFound('Calendar object not found');
38
-		}
39
-		if ($obj['classification'] === CalDavBackend::CLASSIFICATION_PRIVATE) {
40
-			throw new NotFound('Calendar object not found');
41
-		}
42
-		$obj['acl'] = $this->getChildACL();
36
+        if (!$obj) {
37
+            throw new NotFound('Calendar object not found');
38
+        }
39
+        if ($obj['classification'] === CalDavBackend::CLASSIFICATION_PRIVATE) {
40
+            throw new NotFound('Calendar object not found');
41
+        }
42
+        $obj['acl'] = $this->getChildACL();
43 43
 
44
-		return new PublicCalendarObject($this->caldavBackend, $this->calendarInfo, $obj);
45
-	}
44
+        return new PublicCalendarObject($this->caldavBackend, $this->calendarInfo, $obj);
45
+    }
46 46
 
47
-	/**
48
-	 * @return PublicCalendarObject[]
49
-	 */
50
-	public function getChildren() {
51
-		$objs = $this->caldavBackend->getCalendarObjects($this->calendarInfo['id']);
52
-		$children = [];
53
-		foreach ($objs as $obj) {
54
-			if ($obj['classification'] === CalDavBackend::CLASSIFICATION_PRIVATE) {
55
-				continue;
56
-			}
57
-			$obj['acl'] = $this->getChildACL();
58
-			$children[] = new PublicCalendarObject($this->caldavBackend, $this->calendarInfo, $obj);
59
-		}
60
-		return $children;
61
-	}
47
+    /**
48
+     * @return PublicCalendarObject[]
49
+     */
50
+    public function getChildren() {
51
+        $objs = $this->caldavBackend->getCalendarObjects($this->calendarInfo['id']);
52
+        $children = [];
53
+        foreach ($objs as $obj) {
54
+            if ($obj['classification'] === CalDavBackend::CLASSIFICATION_PRIVATE) {
55
+                continue;
56
+            }
57
+            $obj['acl'] = $this->getChildACL();
58
+            $children[] = new PublicCalendarObject($this->caldavBackend, $this->calendarInfo, $obj);
59
+        }
60
+        return $children;
61
+    }
62 62
 
63
-	/**
64
-	 * @param string[] $paths
65
-	 * @return PublicCalendarObject[]
66
-	 */
67
-	public function getMultipleChildren(array $paths) {
68
-		$objs = $this->caldavBackend->getMultipleCalendarObjects($this->calendarInfo['id'], $paths);
69
-		$children = [];
70
-		foreach ($objs as $obj) {
71
-			if ($obj['classification'] === CalDavBackend::CLASSIFICATION_PRIVATE) {
72
-				continue;
73
-			}
74
-			$obj['acl'] = $this->getChildACL();
75
-			$children[] = new PublicCalendarObject($this->caldavBackend, $this->calendarInfo, $obj);
76
-		}
77
-		return $children;
78
-	}
63
+    /**
64
+     * @param string[] $paths
65
+     * @return PublicCalendarObject[]
66
+     */
67
+    public function getMultipleChildren(array $paths) {
68
+        $objs = $this->caldavBackend->getMultipleCalendarObjects($this->calendarInfo['id'], $paths);
69
+        $children = [];
70
+        foreach ($objs as $obj) {
71
+            if ($obj['classification'] === CalDavBackend::CLASSIFICATION_PRIVATE) {
72
+                continue;
73
+            }
74
+            $obj['acl'] = $this->getChildACL();
75
+            $children[] = new PublicCalendarObject($this->caldavBackend, $this->calendarInfo, $obj);
76
+        }
77
+        return $children;
78
+    }
79 79
 
80
-	/**
81
-	 * public calendars are always shared
82
-	 * @return bool
83
-	 */
84
-	protected function isShared() {
85
-		return true;
86
-	}
80
+    /**
81
+     * public calendars are always shared
82
+     * @return bool
83
+     */
84
+    protected function isShared() {
85
+        return true;
86
+    }
87 87
 }
88 88
\ No newline at end of file
Please login to merge, or discard this patch.
lib/public/Contacts/ContactsMenu/IProvider.php 1 patch
Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -29,10 +29,10 @@
 block discarded – undo
29 29
  */
30 30
 interface IProvider {
31 31
 
32
-	/**
33
-	 * @since 12.0
34
-	 * @param IEntry $entry
35
-	 * @return void
36
-	 */
37
-	public function process(IEntry $entry);
32
+    /**
33
+     * @since 12.0
34
+     * @param IEntry $entry
35
+     * @return void
36
+     */
37
+    public function process(IEntry $entry);
38 38
 }
Please login to merge, or discard this patch.
lib/public/Share/IShareHelper.php 1 patch
Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -32,10 +32,10 @@
 block discarded – undo
32 32
  */
33 33
 interface IShareHelper {
34 34
 
35
-	/**
36
-	 * @param Node $node
37
-	 * @return array [ users => [Mapping $uid => $pathForUser], remotes => [Mapping $cloudId => $pathToMountRoot]]
38
-	 * @since 12
39
-	 */
40
-	public function getPathsForAccessList(Node $node);
35
+    /**
36
+     * @param Node $node
37
+     * @return array [ users => [Mapping $uid => $pathForUser], remotes => [Mapping $cloudId => $pathToMountRoot]]
38
+     * @since 12
39
+     */
40
+    public function getPathsForAccessList(Node $node);
41 41
 }
Please login to merge, or discard this patch.
apps/sharebymail/lib/Capabilities.php 1 patch
Indentation   +20 added lines, -20 removed lines patch added patch discarded remove patch
@@ -27,24 +27,24 @@
 block discarded – undo
27 27
 
28 28
 class Capabilities implements ICapability {
29 29
 
30
-	/**
31
-	 * Function an app uses to return the capabilities
32
-	 *
33
-	 * @return array Array containing the apps capabilities
34
-	 * @since 8.2.0
35
-	 */
36
-	public function getCapabilities() {
37
-		return [
38
-			'files_sharing' =>
39
-				[
40
-					'sharebymail' =>
41
-						[
42
-							'enabled' => true,
43
-							'upload_files_drop' => ['enabled' => true],
44
-							'password' => ['enabled' => true],
45
-							'expire_date' => ['enabled' => true]
46
-						]
47
-				]
48
-		];
49
-	}
30
+    /**
31
+     * Function an app uses to return the capabilities
32
+     *
33
+     * @return array Array containing the apps capabilities
34
+     * @since 8.2.0
35
+     */
36
+    public function getCapabilities() {
37
+        return [
38
+            'files_sharing' =>
39
+                [
40
+                    'sharebymail' =>
41
+                        [
42
+                            'enabled' => true,
43
+                            'upload_files_drop' => ['enabled' => true],
44
+                            'password' => ['enabled' => true],
45
+                            'expire_date' => ['enabled' => true]
46
+                        ]
47
+                ]
48
+        ];
49
+    }
50 50
 }
Please login to merge, or discard this patch.
lib/private/Encryption/File.php 1 patch
Indentation   +90 added lines, -90 removed lines patch added patch discarded remove patch
@@ -31,95 +31,95 @@
 block discarded – undo
31 31
 
32 32
 class File implements \OCP\Encryption\IFile {
33 33
 
34
-	/** @var Util */
35
-	protected $util;
36
-
37
-	/** @var IRootFolder */
38
-	private $rootFolder;
39
-
40
-	/** @var IManager */
41
-	private $shareManager;
42
-
43
-	/**
44
-	 * cache results of already checked folders
45
-	 *
46
-	 * @var array
47
-	 */
48
-	protected $cache;
49
-
50
-	public function __construct(Util $util,
51
-								IRootFolder $rootFolder,
52
-								IManager $shareManager) {
53
-		$this->util = $util;
54
-		$this->cache = new CappedMemoryCache();
55
-		$this->rootFolder = $rootFolder;
56
-		$this->shareManager = $shareManager;
57
-	}
58
-
59
-
60
-	/**
61
-	 * get list of users with access to the file
62
-	 *
63
-	 * @param string $path to the file
64
-	 * @return array  ['users' => $uniqueUserIds, 'public' => $public]
65
-	 */
66
-	public function getAccessList($path) {
67
-
68
-		// Make sure that a share key is generated for the owner too
69
-		list($owner, $ownerPath) = $this->util->getUidAndFilename($path);
70
-
71
-		// always add owner to the list of users with access to the file
72
-		$userIds = array($owner);
73
-
74
-		if (!$this->util->isFile($owner . '/' . $ownerPath)) {
75
-			return array('users' => $userIds, 'public' => false);
76
-		}
77
-
78
-		$ownerPath = substr($ownerPath, strlen('/files'));
79
-		$userFolder = $this->rootFolder->getUserFolder($owner);
80
-		try {
81
-			$file = $userFolder->get($ownerPath);
82
-		} catch (NotFoundException $e) {
83
-			$file = null;
84
-		}
85
-		$ownerPath = $this->util->stripPartialFileExtension($ownerPath);
86
-
87
-		// first get the shares for the parent and cache the result so that we don't
88
-		// need to check all parents for every file
89
-		$parent = dirname($ownerPath);
90
-		$parentNode = $userFolder->get($parent);
91
-		if (isset($this->cache[$parent])) {
92
-			$resultForParents = $this->cache[$parent];
93
-		} else {
94
-			$resultForParents = $this->shareManager->getAccessList($parentNode);
95
-			$this->cache[$parent] = $resultForParents;
96
-		}
97
-		$userIds = array_merge($userIds, $resultForParents['users']);
98
-		$public = $resultForParents['public'] || $resultForParents['remote'];
99
-
100
-
101
-		// Find out who, if anyone, is sharing the file
102
-		if ($file !== null) {
103
-			$resultForFile = $this->shareManager->getAccessList($file, false);
104
-			$userIds = array_merge($userIds, $resultForFile['users']);
105
-			$public = $resultForFile['public'] || $resultForFile['remote'] || $public;
106
-		}
107
-
108
-		// check if it is a group mount
109
-		if (\OCP\App::isEnabled("files_external")) {
110
-			$mounts = \OC_Mount_Config::getSystemMountPoints();
111
-			foreach ($mounts as $mount) {
112
-				if ($mount['mountpoint'] == substr($ownerPath, 1, strlen($mount['mountpoint']))) {
113
-					$mountedFor = $this->util->getUserWithAccessToMountPoint($mount['applicable']['users'], $mount['applicable']['groups']);
114
-					$userIds = array_merge($userIds, $mountedFor);
115
-				}
116
-			}
117
-		}
118
-
119
-		// Remove duplicate UIDs
120
-		$uniqueUserIds = array_unique($userIds);
121
-
122
-		return array('users' => $uniqueUserIds, 'public' => $public);
123
-	}
34
+    /** @var Util */
35
+    protected $util;
36
+
37
+    /** @var IRootFolder */
38
+    private $rootFolder;
39
+
40
+    /** @var IManager */
41
+    private $shareManager;
42
+
43
+    /**
44
+     * cache results of already checked folders
45
+     *
46
+     * @var array
47
+     */
48
+    protected $cache;
49
+
50
+    public function __construct(Util $util,
51
+                                IRootFolder $rootFolder,
52
+                                IManager $shareManager) {
53
+        $this->util = $util;
54
+        $this->cache = new CappedMemoryCache();
55
+        $this->rootFolder = $rootFolder;
56
+        $this->shareManager = $shareManager;
57
+    }
58
+
59
+
60
+    /**
61
+     * get list of users with access to the file
62
+     *
63
+     * @param string $path to the file
64
+     * @return array  ['users' => $uniqueUserIds, 'public' => $public]
65
+     */
66
+    public function getAccessList($path) {
67
+
68
+        // Make sure that a share key is generated for the owner too
69
+        list($owner, $ownerPath) = $this->util->getUidAndFilename($path);
70
+
71
+        // always add owner to the list of users with access to the file
72
+        $userIds = array($owner);
73
+
74
+        if (!$this->util->isFile($owner . '/' . $ownerPath)) {
75
+            return array('users' => $userIds, 'public' => false);
76
+        }
77
+
78
+        $ownerPath = substr($ownerPath, strlen('/files'));
79
+        $userFolder = $this->rootFolder->getUserFolder($owner);
80
+        try {
81
+            $file = $userFolder->get($ownerPath);
82
+        } catch (NotFoundException $e) {
83
+            $file = null;
84
+        }
85
+        $ownerPath = $this->util->stripPartialFileExtension($ownerPath);
86
+
87
+        // first get the shares for the parent and cache the result so that we don't
88
+        // need to check all parents for every file
89
+        $parent = dirname($ownerPath);
90
+        $parentNode = $userFolder->get($parent);
91
+        if (isset($this->cache[$parent])) {
92
+            $resultForParents = $this->cache[$parent];
93
+        } else {
94
+            $resultForParents = $this->shareManager->getAccessList($parentNode);
95
+            $this->cache[$parent] = $resultForParents;
96
+        }
97
+        $userIds = array_merge($userIds, $resultForParents['users']);
98
+        $public = $resultForParents['public'] || $resultForParents['remote'];
99
+
100
+
101
+        // Find out who, if anyone, is sharing the file
102
+        if ($file !== null) {
103
+            $resultForFile = $this->shareManager->getAccessList($file, false);
104
+            $userIds = array_merge($userIds, $resultForFile['users']);
105
+            $public = $resultForFile['public'] || $resultForFile['remote'] || $public;
106
+        }
107
+
108
+        // check if it is a group mount
109
+        if (\OCP\App::isEnabled("files_external")) {
110
+            $mounts = \OC_Mount_Config::getSystemMountPoints();
111
+            foreach ($mounts as $mount) {
112
+                if ($mount['mountpoint'] == substr($ownerPath, 1, strlen($mount['mountpoint']))) {
113
+                    $mountedFor = $this->util->getUserWithAccessToMountPoint($mount['applicable']['users'], $mount['applicable']['groups']);
114
+                    $userIds = array_merge($userIds, $mountedFor);
115
+                }
116
+            }
117
+        }
118
+
119
+        // Remove duplicate UIDs
120
+        $uniqueUserIds = array_unique($userIds);
121
+
122
+        return array('users' => $uniqueUserIds, 'public' => $public);
123
+    }
124 124
 
125 125
 }
Please login to merge, or discard this patch.