From 14bbec5fa79dca66c6773083c5e0c0c3b3836d70 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon <blizzz@arthur-schiwon.de>
Date: Tue, 15 Dec 2020 00:02:43 +0100
Subject: [PATCH] enables the file name check also to match name of mountpoints

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
---
 apps/workflowengine/lib/Check/FileName.php | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/apps/workflowengine/lib/Check/FileName.php b/apps/workflowengine/lib/Check/FileName.php
index 9f2a78aef62..893a9a72605 100644
--- a/apps/workflowengine/lib/Check/FileName.php
+++ b/apps/workflowengine/lib/Check/FileName.php
@@ -24,6 +24,7 @@ declare(strict_types=1);
 namespace OCA\WorkflowEngine\Check;
 
 use OCA\WorkflowEngine\Entity\File;
+use OCP\Files\Mount\IMountManager;
 use OCP\IL10N;
 use OCP\IRequest;
 use OCP\WorkflowEngine\IFileCheck;
@@ -33,21 +34,38 @@ class FileName extends AbstractStringCheck implements IFileCheck {
 
 	/** @var IRequest */
 	protected $request;
+	/** @var IMountManager */
+	private $mountManager;
 
 	/**
 	 * @param IL10N $l
 	 * @param IRequest $request
 	 */
-	public function __construct(IL10N $l, IRequest $request) {
+	public function __construct(IL10N $l, IRequest $request, IMountManager $mountManager) {
 		parent::__construct($l);
 		$this->request = $request;
+		$this->mountManager = $mountManager;
 	}
 
 	/**
 	 * @return string
 	 */
 	protected function getActualValue(): string {
-		return $this->path === null ? '' : basename($this->path);
+		$fileName = $this->path === null ? '' : basename($this->path);
+		if ($fileName === '' && !$this->storage->isLocal()) {
+			// Return the mountpoint name of external storages that are not mounted as user home
+			$mountPoints = $this->mountManager->findByStorageId($this->storage->getId());
+			if (empty($mountPoints) || $mountPoints[0]->getMountType() !== 'external') {
+				return $fileName;
+			}
+			$mountPointPath = rtrim($mountPoints[0]->getMountPoint(), '/');
+			$mountPointPieces = explode('/', $mountPointPath);
+			$mountPointName = array_pop($mountPointPieces);
+			if (!empty($mountPointName) && $mountPointName !== 'files' && count($mountPointPieces) !== 2) {
+				return $mountPointName;
+			}
+		}
+		return $fileName;
 	}
 
 	/**
-- 
GitLab