Skip to content

Commit 2e94b3d

Browse files
icewind1991juliusknorr
authored andcommitted
dont offer to edit external config settings if we can't edit them
Signed-off-by: Robin Appelman <robin@icewind.nl>
1 parent 86e6f07 commit 2e94b3d

8 files changed

Lines changed: 81 additions & 30 deletions

apps/files_external/js/statusmanager.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@ OCA.Files_External.StatusManager = {
9494
id: mountData.id,
9595
error: statusMessage,
9696
userProvided: response.userProvided,
97-
authMechanism: response.authMechanism
97+
authMechanism: response.authMechanism,
98+
canEdit: response.can_edit,
9899
};
99100
}
100101
afterCallback(mountData, self.mountStatus[mountData.mount_point]);
@@ -182,12 +183,14 @@ OCA.Files_External.StatusManager = {
182183
if (mountData.userProvided || mountData.authMechanism === 'password::global::user') {
183184
// personal mount whit credentials problems
184185
this.showCredentialsDialog(name, mountData);
185-
} else {
186+
} else if (mountData.canEdit) {
186187
OC.dialogs.confirm(t('files_external', 'There was an error with message: ') + mountData.error + '. Do you want to review mount point config in admin settings page?', t('files_external', 'External mount error'), function (e) {
187188
if (e === true) {
188189
OC.redirect(OC.generateUrl('/settings/admin/externalstorages'));
189190
}
190191
});
192+
} else {
193+
OC.dialogs.info(t('files_external', 'There was an error with message: ') + mountData.error + '. Please contact your system administrator.', t('files_external', 'External mount error'), () => {});
191194
}
192195
} else {
193196
OC.dialogs.confirm(t('files_external', 'There was an error with message: ') + mountData.error + '. Do you want to review mount point config in personal settings page?', t('files_external', 'External mount error'), function (e) {

apps/files_external/lib/Controller/GlobalStoragesController.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,11 @@
3232
use OCA\Files_External\Service\GlobalStoragesService;
3333
use OCP\AppFramework\Http;
3434
use OCP\AppFramework\Http\DataResponse;
35+
use OCP\IGroupManager;
3536
use OCP\IL10N;
3637
use OCP\ILogger;
3738
use OCP\IRequest;
39+
use OCP\IUserSession;
3840

3941
/**
4042
* Global storages controller
@@ -48,20 +50,26 @@ class GlobalStoragesController extends StoragesController {
4850
* @param IL10N $l10n l10n service
4951
* @param GlobalStoragesService $globalStoragesService storage service
5052
* @param ILogger $logger
53+
* @param IUserSession $userSession
54+
* @param IGroupManager $groupManager
5155
*/
5256
public function __construct(
5357
$AppName,
5458
IRequest $request,
5559
IL10N $l10n,
5660
GlobalStoragesService $globalStoragesService,
57-
ILogger $logger
61+
ILogger $logger,
62+
IUserSession $userSession,
63+
IGroupManager $groupManager
5864
) {
5965
parent::__construct(
6066
$AppName,
6167
$request,
6268
$l10n,
6369
$globalStoragesService,
64-
$logger
70+
$logger,
71+
$userSession,
72+
$groupManager
6573
);
6674
}
6775

apps/files_external/lib/Controller/StoragesController.php

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,11 @@
4040
use OCP\AppFramework\Http;
4141
use OCP\AppFramework\Http\DataResponse;
4242
use OCP\Files\StorageNotAvailableException;
43+
use OCP\IGroupManager;
4344
use OCP\IL10N;
4445
use OCP\ILogger;
4546
use OCP\IRequest;
47+
use OCP\IUserSession;
4648

4749
/**
4850
* Base class for storages controllers
@@ -68,6 +70,16 @@ abstract class StoragesController extends Controller {
6870
*/
6971
protected $logger;
7072

73+
/**
74+
* @var IUserSession
75+
*/
76+
protected $userSession;
77+
78+
/**
79+
* @var IGroupManager
80+
*/
81+
protected $groupManager;
82+
7183
/**
7284
* Creates a new storages controller.
7385
*
@@ -82,12 +94,16 @@ public function __construct(
8294
IRequest $request,
8395
IL10N $l10n,
8496
StoragesService $storagesService,
85-
ILogger $logger
97+
ILogger $logger,
98+
IUserSession $userSession,
99+
IGroupManager $groupManager
86100
) {
87101
parent::__construct($AppName, $request);
88102
$this->l10n = $l10n;
89103
$this->service = $storagesService;
90104
$this->logger = $logger;
105+
$this->userSession = $userSession;
106+
$this->groupManager = $groupManager;
91107
}
92108

93109
/**
@@ -337,8 +353,12 @@ public function show($id, $testOnly = true) {
337353
);
338354
}
339355

356+
$data = $this->formatStorageForUI($storage)->jsonSerialize();
357+
$isAdmin = $this->groupManager->isAdmin($this->userSession->getUser()->getUID());
358+
$data['can_edit'] = $storage->getType() === StorageConfig::MOUNT_TYPE_PERSONAl || $isAdmin;
359+
340360
return new DataResponse(
341-
$this->formatStorageForUI($storage),
361+
$data,
342362
Http::STATUS_OK
343363
);
344364
}

apps/files_external/lib/Controller/UserGlobalStoragesController.php

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
use OCA\Files_External\Service\UserGlobalStoragesService;
3838
use OCP\AppFramework\Http;
3939
use OCP\AppFramework\Http\DataResponse;
40+
use OCP\IGroupManager;
4041
use OCP\IL10N;
4142
use OCP\ILogger;
4243
use OCP\IRequest;
@@ -46,36 +47,35 @@
4647
* User global storages controller
4748
*/
4849
class UserGlobalStoragesController extends StoragesController {
49-
/**
50-
* @var IUserSession
51-
*/
52-
private $userSession;
53-
5450
/**
5551
* Creates a new user global storages controller.
5652
*
5753
* @param string $AppName application name
5854
* @param IRequest $request request object
5955
* @param IL10N $l10n l10n service
6056
* @param UserGlobalStoragesService $userGlobalStoragesService storage service
57+
* @param ILogger $logger
6158
* @param IUserSession $userSession
59+
* @param IGroupManager $groupManager
6260
*/
6361
public function __construct(
6462
$AppName,
6563
IRequest $request,
6664
IL10N $l10n,
6765
UserGlobalStoragesService $userGlobalStoragesService,
66+
ILogger $logger,
6867
IUserSession $userSession,
69-
ILogger $logger
68+
IGroupManager $groupManager
7069
) {
7170
parent::__construct(
7271
$AppName,
7372
$request,
7473
$l10n,
7574
$userGlobalStoragesService,
76-
$logger
75+
$logger,
76+
$userSession,
77+
$groupManager
7778
);
78-
$this->userSession = $userSession;
7979
}
8080

8181
/**
@@ -133,8 +133,12 @@ public function show($id, $testOnly = true) {
133133

134134
$this->sanitizeStorage($storage);
135135

136+
$data = $this->formatStorageForUI($storage)->jsonSerialize();
137+
$isAdmin = $this->groupManager->isAdmin($this->userSession->getUser()->getUID());
138+
$data['can_edit'] = $storage->getType() === StorageConfig::MOUNT_TYPE_PERSONAl || $isAdmin;
139+
136140
return new DataResponse(
137-
$this->formatStorageForUI($storage),
141+
$data,
138142
Http::STATUS_OK
139143
);
140144
}

apps/files_external/lib/Controller/UserStoragesController.php

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
use OCA\Files_External\Service\UserStoragesService;
3636
use OCP\AppFramework\Http;
3737
use OCP\AppFramework\Http\DataResponse;
38+
use OCP\IGroupManager;
3839
use OCP\IL10N;
3940
use OCP\ILogger;
4041
use OCP\IRequest;
@@ -44,37 +45,35 @@
4445
* User storages controller
4546
*/
4647
class UserStoragesController extends StoragesController {
47-
/**
48-
* @var IUserSession
49-
*/
50-
private $userSession;
51-
5248
/**
5349
* Creates a new user storages controller.
5450
*
5551
* @param string $AppName application name
5652
* @param IRequest $request request object
5753
* @param IL10N $l10n l10n service
5854
* @param UserStoragesService $userStoragesService storage service
59-
* @param IUserSession $userSession
6055
* @param ILogger $logger
56+
* @param IUserSession $userSession
57+
* @param IGroupManager $groupManager
6158
*/
6259
public function __construct(
6360
$AppName,
6461
IRequest $request,
6562
IL10N $l10n,
6663
UserStoragesService $userStoragesService,
64+
ILogger $logger,
6765
IUserSession $userSession,
68-
ILogger $logger
66+
IGroupManager $groupManager
6967
) {
7068
parent::__construct(
7169
$AppName,
7270
$request,
7371
$l10n,
7472
$userStoragesService,
75-
$logger
73+
$logger,
74+
$userSession,
75+
$groupManager
7676
);
77-
$this->userSession = $userSession;
7877
}
7978

8079
protected function manipulateStorageConfig(StorageConfig $storage) {

apps/files_external/tests/Controller/GlobalStoragesControllerTest.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
use OCA\Files_External\Controller\GlobalStoragesController;
3030
use OCA\Files_External\Service\BackendService;
31+
use OCP\IGroupManager;
3132
use OCP\IL10N;
3233
use OCP\ILogger;
3334
use OCP\IRequest;
@@ -47,7 +48,9 @@ protected function setUp(): void {
4748
$this->createMock(IRequest::class),
4849
$this->createMock(IL10N::class),
4950
$this->service,
50-
$this->createMock(ILogger::class)
51+
$this->createMock(ILogger::class),
52+
$this->userSession,
53+
$this->createMock(IGroupManager::class)
5154
);
5255
}
5356
}

apps/files_external/tests/Controller/StoragesControllerTest.php

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,12 @@
3131
use OCA\Files_External\Controller\GlobalStoragesController;
3232
use OCA\Files_External\Lib\Auth\AuthMechanism;
3333
use OCA\Files_External\Lib\Backend\Backend;
34-
3534
use OCA\Files_External\Lib\StorageConfig;
3635
use OCA\Files_External\NotFoundException;
3736
use OCA\Files_External\Service\GlobalStoragesService;
3837
use OCP\AppFramework\Http;
38+
use OCP\IUser;
39+
use OCP\IUserSession;
3940

4041
abstract class StoragesControllerTest extends \Test\TestCase {
4142

@@ -49,7 +50,16 @@ abstract class StoragesControllerTest extends \Test\TestCase {
4950
*/
5051
protected $service;
5152

53+
/** @var IUserSession */
54+
protected $userSession;
55+
5256
protected function setUp(): void {
57+
$user = $this->createMock(IUser::class);
58+
$user->method('getUID')
59+
->willReturn('test');
60+
$this->userSession = $this->createMock(IUserSession::class);
61+
$this->userSession->method('getUser')
62+
->willReturn($user);
5363
\OCA\Files_External\MountConfig::$skipTest = true;
5464
}
5565

@@ -337,8 +347,11 @@ public function testGetStorage() {
337347
->willReturn($storageConfig);
338348
$response = $this->controller->show(1);
339349

350+
$expected = $storageConfig->jsonSerialize();
351+
$expected['can_edit'] = false;
352+
340353
$this->assertEquals(Http::STATUS_OK, $response->getStatus());
341-
$this->assertEquals($storageConfig, $response->getData());
354+
$this->assertEquals($expected, $response->getData());
342355
}
343356

344357
public function validateStorageProvider() {

apps/files_external/tests/Controller/UserStoragesControllerTest.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@
3131
use OCA\Files_External\Lib\StorageConfig;
3232
use OCA\Files_External\Service\BackendService;
3333
use OCP\AppFramework\Http;
34+
use OCP\IGroupManager;
3435
use OCP\IL10N;
3536
use OCP\ILogger;
3637
use OCP\IRequest;
37-
use OCP\IUserSession;
3838

3939
class UserStoragesControllerTest extends StoragesControllerTest {
4040

@@ -57,8 +57,9 @@ protected function setUp(): void {
5757
$this->createMock(IRequest::class),
5858
$this->createMock(IL10N::class),
5959
$this->service,
60-
$this->createMock(IUserSession::class),
61-
$this->createMock(ILogger::class)
60+
$this->createMock(ILogger::class),
61+
$this->userSession,
62+
$this->createMock(IGroupManager::class)
6263
);
6364
}
6465

0 commit comments

Comments
 (0)