mirror of
https://github.com/nextcloud/server.git
synced 2026-06-16 20:19:48 -04:00
Merge pull request #50749 from nextcloud/backport/49493/stable29
[stable29] feat: Use inline password confirmation in external storage settings
This commit is contained in:
commit
5373a2fa80
114 changed files with 2033 additions and 1834 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -105,7 +105,7 @@ class AjaxController extends Controller {
|
|||
* @return bool
|
||||
*/
|
||||
#[NoAdminRequired]
|
||||
#[PasswordConfirmationRequired]
|
||||
#[PasswordConfirmationRequired(strict: true)]
|
||||
public function saveGlobalCredentials($uid, $user, $password) {
|
||||
$currentUser = $this->userSession->getUser();
|
||||
if ($currentUser === null) {
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ class GlobalStoragesController extends StoragesController {
|
|||
*
|
||||
* @return DataResponse
|
||||
*/
|
||||
#[PasswordConfirmationRequired]
|
||||
#[PasswordConfirmationRequired(strict: true)]
|
||||
public function create(
|
||||
$mountPoint,
|
||||
$backend,
|
||||
|
|
@ -157,7 +157,7 @@ class GlobalStoragesController extends StoragesController {
|
|||
*
|
||||
* @return DataResponse
|
||||
*/
|
||||
#[PasswordConfirmationRequired]
|
||||
#[PasswordConfirmationRequired(strict: true)]
|
||||
public function update(
|
||||
$id,
|
||||
$mountPoint,
|
||||
|
|
|
|||
|
|
@ -323,7 +323,7 @@ abstract class StoragesController extends Controller {
|
|||
*
|
||||
* @return DataResponse
|
||||
*/
|
||||
#[PasswordConfirmationRequired]
|
||||
#[PasswordConfirmationRequired(strict: true)]
|
||||
public function destroy(int $id) {
|
||||
try {
|
||||
$this->service->removeStorage($id);
|
||||
|
|
|
|||
|
|
@ -159,7 +159,7 @@ class UserGlobalStoragesController extends StoragesController {
|
|||
* @return DataResponse
|
||||
*/
|
||||
#[NoAdminRequired]
|
||||
#[PasswordConfirmationRequired]
|
||||
#[PasswordConfirmationRequired(strict: true)]
|
||||
public function update(
|
||||
$id,
|
||||
$backendOptions,
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@ class UserStoragesController extends StoragesController {
|
|||
* @return DataResponse
|
||||
*/
|
||||
#[NoAdminRequired]
|
||||
#[PasswordConfirmationRequired]
|
||||
#[PasswordConfirmationRequired(strict: true)]
|
||||
public function create(
|
||||
$mountPoint,
|
||||
$backend,
|
||||
|
|
@ -180,7 +180,7 @@ class UserStoragesController extends StoragesController {
|
|||
* @return DataResponse
|
||||
*/
|
||||
#[NoAdminRequired]
|
||||
#[PasswordConfirmationRequired]
|
||||
#[PasswordConfirmationRequired(strict: true)]
|
||||
public function update(
|
||||
$id,
|
||||
$mountPoint,
|
||||
|
|
@ -232,7 +232,7 @@ class UserStoragesController extends StoragesController {
|
|||
* {@inheritdoc}
|
||||
*/
|
||||
#[NoAdminRequired]
|
||||
#[PasswordConfirmationRequired]
|
||||
#[PasswordConfirmationRequired(strict: true)]
|
||||
public function destroy(int $id) {
|
||||
return parent::destroy($id);
|
||||
}
|
||||
|
|
|
|||
1572
apps/files_external/src/settings.js
Normal file
1572
apps/files_external/src/settings.js
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -16,10 +16,8 @@ $l->t("Never");
|
|||
$l->t("Once every direct access");
|
||||
$l->t('Read only');
|
||||
|
||||
script('files_external', [
|
||||
'settings',
|
||||
'templates'
|
||||
]);
|
||||
\OCP\Util::addScript('files_external', 'settings');
|
||||
\OCP\Util::addScript('files_external', 'templates');
|
||||
style('files_external', 'settings');
|
||||
|
||||
// load custom JS
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ trait ExternalStorage {
|
|||
* @param TableNode $fields
|
||||
*/
|
||||
public function loggedInUserCreatesExternalGlobalStorage(TableNode $fields): void {
|
||||
$this->sendJsonWithRequestToken('POST', '/index.php/apps/files_external/globalstorages', $fields);
|
||||
$this->sendJsonWithRequestTokenAndBasicAuth('POST', '/index.php/apps/files_external/globalstorages', $fields);
|
||||
$this->theHTTPStatusCodeShouldBe('201');
|
||||
|
||||
$this->lastExternalStorageData = json_decode($this->response->getBody(), $asAssociativeArray = true);
|
||||
|
|
@ -62,7 +62,7 @@ trait ExternalStorage {
|
|||
* @param TableNode $fields
|
||||
*/
|
||||
public function loggedInUserUpdatesLastExternalUserglobalStorage(TableNode $fields): void {
|
||||
$this->sendJsonWithRequestToken('PUT', '/index.php/apps/files_external/userglobalstorages/' . $this->lastExternalStorageData['id'], $fields);
|
||||
$this->sendJsonWithRequestTokenAndBasicAuth('PUT', '/index.php/apps/files_external/userglobalstorages/' . $this->lastExternalStorageData['id'], $fields);
|
||||
$this->theHTTPStatusCodeShouldBe('200');
|
||||
|
||||
$this->lastExternalStorageData = json_decode($this->response->getBody(), $asAssociativeArray = true);
|
||||
|
|
@ -100,4 +100,23 @@ trait ExternalStorage {
|
|||
];
|
||||
$this->sendingAToWithRequesttoken($method, $url, $body);
|
||||
}
|
||||
|
||||
private function sendJsonWithRequestTokenAndBasicAuth(string $method, string $url, TableNode $fields): void {
|
||||
$isFirstField = true;
|
||||
$fieldsAsJsonString = '{';
|
||||
foreach ($fields->getRowsHash() as $key => $value) {
|
||||
$fieldsAsJsonString .= ($isFirstField ? '' : ',') . '"' . $key . '":' . $value;
|
||||
$isFirstField = false;
|
||||
}
|
||||
$fieldsAsJsonString .= '}';
|
||||
|
||||
$body = [
|
||||
'headers' => [
|
||||
'Content-Type' => 'application/json',
|
||||
'Authorization' => 'Basic ' . base64_encode('admin:admin'),
|
||||
],
|
||||
'body' => $fieldsAsJsonString,
|
||||
];
|
||||
$this->sendingAToWithRequesttoken($method, $url, $body);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,14 +14,14 @@ Feature: external-storage
|
|||
And As an "user1"
|
||||
And accepting last share
|
||||
When creating a share with
|
||||
| path | foo |
|
||||
| shareType | 3 |
|
||||
| path | foo |
|
||||
| shareType | 3 |
|
||||
Then the OCS status code should be "100"
|
||||
And the HTTP status code should be "200"
|
||||
And Share fields of last share match with
|
||||
| id | A_NUMBER |
|
||||
| url | AN_URL |
|
||||
| token | A_TOKEN |
|
||||
| id | A_NUMBER |
|
||||
| url | AN_URL |
|
||||
| token | A_TOKEN |
|
||||
| mimetype | httpd/unix-directory |
|
||||
|
||||
Scenario: Shares don't overwrite external storage
|
||||
|
|
@ -66,9 +66,9 @@ Feature: external-storage
|
|||
Scenario: Save an external storage with password provided by user
|
||||
Given Logging in using web as "admin"
|
||||
And logged in user creates external global storage
|
||||
| mountPoint | "ExternalStorageTest" |
|
||||
| backend | "owncloud" |
|
||||
| authMechanism | "password::userprovided" |
|
||||
| mountPoint | "ExternalStorageTest" |
|
||||
| backend | "owncloud" |
|
||||
| authMechanism | "password::userprovided" |
|
||||
| backendOptions | {"host":"http://localhost:8080","secure":false} |
|
||||
And fields of last external storage match with
|
||||
| status | 2 |
|
||||
|
|
@ -80,9 +80,9 @@ Feature: external-storage
|
|||
Scenario: Save an external storage again with an unmodified password provided by user
|
||||
Given Logging in using web as "admin"
|
||||
And logged in user creates external global storage
|
||||
| mountPoint | "ExternalStorageTest" |
|
||||
| backend | "owncloud" |
|
||||
| authMechanism | "password::userprovided" |
|
||||
| mountPoint | "ExternalStorageTest" |
|
||||
| backend | "owncloud" |
|
||||
| authMechanism | "password::userprovided" |
|
||||
| backendOptions | {"host":"http://localhost:8080","secure":false} |
|
||||
And fields of last external storage match with
|
||||
| status | 2 |
|
||||
|
|
@ -96,9 +96,9 @@ Feature: external-storage
|
|||
Scenario: Save an external storage with global credentials provided by user
|
||||
Given Logging in using web as "admin"
|
||||
And logged in user creates external global storage
|
||||
| mountPoint | "ExternalStorageTest" |
|
||||
| backend | "owncloud" |
|
||||
| authMechanism | "password::global::user" |
|
||||
| mountPoint | "ExternalStorageTest" |
|
||||
| backend | "owncloud" |
|
||||
| authMechanism | "password::global::user" |
|
||||
| backendOptions | {"host":"http://localhost:8080","secure":false} |
|
||||
And fields of last external storage match with
|
||||
| status | 2 |
|
||||
|
|
@ -110,9 +110,9 @@ Feature: external-storage
|
|||
Scenario: Save an external storage again with unmodified global credentials provided by user
|
||||
Given Logging in using web as "admin"
|
||||
And logged in user creates external global storage
|
||||
| mountPoint | "ExternalStorageTest" |
|
||||
| backend | "owncloud" |
|
||||
| authMechanism | "password::global::user" |
|
||||
| mountPoint | "ExternalStorageTest" |
|
||||
| backend | "owncloud" |
|
||||
| authMechanism | "password::global::user" |
|
||||
| backendOptions | {"host":"http://localhost:8080","secure":false} |
|
||||
And fields of last external storage match with
|
||||
| status | 2 |
|
||||
|
|
|
|||
2
dist/1902-1902.js
vendored
2
dist/1902-1902.js
vendored
File diff suppressed because one or more lines are too long
1
dist/1902-1902.js.map
vendored
1
dist/1902-1902.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/2400-2400.js
vendored
4
dist/2400-2400.js
vendored
File diff suppressed because one or more lines are too long
2
dist/2400-2400.js.map
vendored
2
dist/2400-2400.js.map
vendored
File diff suppressed because one or more lines are too long
2
dist/267-267.js
vendored
Normal file
2
dist/267-267.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
dist/267-267.js.map
vendored
Normal file
1
dist/267-267.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
2
dist/3916-3916.js
vendored
Normal file
2
dist/3916-3916.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
dist/3916-3916.js.map
vendored
Normal file
1
dist/3916-3916.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
2
dist/717-717.js
vendored
Normal file
2
dist/717-717.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
dist/717-717.js.map
vendored
Normal file
1
dist/717-717.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
4
dist/8066-8066.js
vendored
4
dist/8066-8066.js
vendored
|
|
@ -1,2 +1,2 @@
|
|||
"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[8066],{48066:(e,c,l)=>{l.d(c,{FilePickerVue:()=>n});const n=(0,l(85471).$V)((()=>Promise.all([l.e(4208),l.e(1902)]).then(l.bind(l,64267))))}}]);
|
||||
//# sourceMappingURL=8066-8066.js.map?v=f1f0a3884f0b92377e6a
|
||||
"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[8066],{48066:(e,c,l)=>{l.d(c,{FilePickerVue:()=>n});const n=(0,l(85471).$V)((()=>Promise.all([l.e(4208),l.e(267),l.e(3916)]).then(l.bind(l,64267))))}}]);
|
||||
//# sourceMappingURL=8066-8066.js.map?v=9369cd9b99b2eb542565
|
||||
2
dist/8066-8066.js.map
vendored
2
dist/8066-8066.js.map
vendored
|
|
@ -1 +1 @@
|
|||
{"version":3,"file":"8066-8066.js?v=f1f0a3884f0b92377e6a","mappings":"oIACA,MAAMA,GAAgB,E,SAAA,KAAqB,IAAM,0D","sources":["webpack:///nextcloud/node_modules/@nextcloud/dialogs/dist/chunks/index-Kg2hZgGF.mjs"],"sourcesContent":["import { defineAsyncComponent } from \"vue\";\nconst FilePickerVue = defineAsyncComponent(() => import(\"./FilePicker-ajWx2Snh.mjs\"));\nexport {\n FilePickerVue\n};\n"],"names":["FilePickerVue"],"sourceRoot":""}
|
||||
{"version":3,"file":"8066-8066.js?v=9369cd9b99b2eb542565","mappings":"oIACA,MAAMA,GAAgB,E,SAAA,KAAqB,IAAM,mE","sources":["webpack:///nextcloud/node_modules/@nextcloud/dialogs/dist/chunks/index-Kg2hZgGF.mjs"],"sourcesContent":["import { defineAsyncComponent } from \"vue\";\nconst FilePickerVue = defineAsyncComponent(() => import(\"./FilePicker-ajWx2Snh.mjs\"));\nexport {\n FilePickerVue\n};\n"],"names":["FilePickerVue"],"sourceRoot":""}
|
||||
2
dist/8645-8645.js
vendored
Normal file
2
dist/8645-8645.js
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[8645],{8645:(e,c,l)=>{l.d(c,{FilePickerVue:()=>n});const n=(0,l(85471).$V)((()=>Promise.all([l.e(4208),l.e(267),l.e(717)]).then(l.bind(l,80717))))}}]);
|
||||
//# sourceMappingURL=8645-8645.js.map?v=c63ca687371a1a78dda9
|
||||
1
dist/8645-8645.js.map
vendored
Normal file
1
dist/8645-8645.js.map
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"8645-8645.js?v=c63ca687371a1a78dda9","mappings":"mIACA,MAAMA,GAAgB,E,SAAA,KAAqB,IAAM,kE","sources":["webpack:///nextcloud/node_modules/@nextcloud/password-confirmation/node_modules/@nextcloud/dialogs/dist/chunks/index-Ly0obkwS.mjs"],"sourcesContent":["import { defineAsyncComponent } from \"vue\";\nconst FilePickerVue = defineAsyncComponent(() => import(\"./FilePicker-CSmrMOEO.mjs\"));\nexport {\n FilePickerVue\n};\n"],"names":["FilePickerVue"],"sourceRoot":""}
|
||||
4
dist/comments-comments-app.js
vendored
4
dist/comments-comments-app.js
vendored
File diff suppressed because one or more lines are too long
2
dist/comments-comments-app.js.map
vendored
2
dist/comments-comments-app.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/comments-comments-tab.js
vendored
4
dist/comments-comments-tab.js
vendored
File diff suppressed because one or more lines are too long
2
dist/comments-comments-tab.js.map
vendored
2
dist/comments-comments-tab.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/core-common.js
vendored
4
dist/core-common.js
vendored
File diff suppressed because one or more lines are too long
10
dist/core-common.js.LICENSE.txt
vendored
10
dist/core-common.js.LICENSE.txt
vendored
|
|
@ -11,6 +11,16 @@
|
|||
* @license MIT
|
||||
*/
|
||||
|
||||
/*!
|
||||
* SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/*!
|
||||
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/*!
|
||||
* The buffer module from node.js, for the browser.
|
||||
*
|
||||
|
|
|
|||
2
dist/core-common.js.map
vendored
2
dist/core-common.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/core-legacy-unified-search.js
vendored
4
dist/core-legacy-unified-search.js
vendored
File diff suppressed because one or more lines are too long
2
dist/core-legacy-unified-search.js.map
vendored
2
dist/core-legacy-unified-search.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/core-login.js
vendored
4
dist/core-login.js
vendored
File diff suppressed because one or more lines are too long
2
dist/core-login.js.map
vendored
2
dist/core-login.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/core-main.js
vendored
4
dist/core-main.js
vendored
File diff suppressed because one or more lines are too long
2
dist/core-main.js.map
vendored
2
dist/core-main.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/core-profile.js
vendored
4
dist/core-profile.js
vendored
File diff suppressed because one or more lines are too long
2
dist/core-profile.js.map
vendored
2
dist/core-profile.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/dav-settings-personal-availability.js
vendored
4
dist/dav-settings-personal-availability.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
4
dist/files-init.js
vendored
4
dist/files-init.js
vendored
File diff suppressed because one or more lines are too long
2
dist/files-init.js.map
vendored
2
dist/files-init.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/files-main.js
vendored
4
dist/files-main.js
vendored
File diff suppressed because one or more lines are too long
2
dist/files-main.js.map
vendored
2
dist/files-main.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/files-personal-settings.js
vendored
4
dist/files-personal-settings.js
vendored
File diff suppressed because one or more lines are too long
2
dist/files-personal-settings.js.map
vendored
2
dist/files-personal-settings.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/files-reference-files.js
vendored
4
dist/files-reference-files.js
vendored
File diff suppressed because one or more lines are too long
2
dist/files-reference-files.js.map
vendored
2
dist/files-reference-files.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/files-search.js
vendored
4
dist/files-search.js
vendored
File diff suppressed because one or more lines are too long
2
dist/files-search.js.map
vendored
2
dist/files-search.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/files-sidebar.js
vendored
4
dist/files-sidebar.js
vendored
File diff suppressed because one or more lines are too long
2
dist/files-sidebar.js.map
vendored
2
dist/files-sidebar.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/files_external-init.js
vendored
4
dist/files_external-init.js
vendored
File diff suppressed because one or more lines are too long
2
dist/files_external-init.js.map
vendored
2
dist/files_external-init.js.map
vendored
File diff suppressed because one or more lines are too long
2
dist/files_external-settings.js
vendored
Normal file
2
dist/files_external-settings.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
dist/files_external-settings.js.map
vendored
Normal file
1
dist/files_external-settings.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
4
dist/files_reminders-init.js
vendored
4
dist/files_reminders-init.js
vendored
File diff suppressed because one or more lines are too long
2
dist/files_reminders-init.js.map
vendored
2
dist/files_reminders-init.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/files_sharing-files_sharing_tab.js
vendored
4
dist/files_sharing-files_sharing_tab.js
vendored
File diff suppressed because one or more lines are too long
2
dist/files_sharing-files_sharing_tab.js.map
vendored
2
dist/files_sharing-files_sharing_tab.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/files_sharing-personal-settings.js
vendored
4
dist/files_sharing-personal-settings.js
vendored
File diff suppressed because one or more lines are too long
2
dist/files_sharing-personal-settings.js.map
vendored
2
dist/files_sharing-personal-settings.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/files_versions-files_versions.js
vendored
4
dist/files_versions-files_versions.js
vendored
File diff suppressed because one or more lines are too long
2
dist/files_versions-files_versions.js.map
vendored
2
dist/files_versions-files_versions.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/settings-declarative-settings-forms.js
vendored
4
dist/settings-declarative-settings-forms.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
4
dist/settings-vue-settings-admin-security.js
vendored
4
dist/settings-vue-settings-admin-security.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
4
dist/settings-vue-settings-admin-sharing.js
vendored
4
dist/settings-vue-settings-admin-sharing.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
4
dist/settings-vue-settings-personal-info.js
vendored
4
dist/settings-vue-settings-personal-info.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
4
dist/systemtags-admin.js
vendored
4
dist/systemtags-admin.js
vendored
File diff suppressed because one or more lines are too long
2
dist/systemtags-admin.js.map
vendored
2
dist/systemtags-admin.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/theming-admin-theming.js
vendored
4
dist/theming-admin-theming.js
vendored
File diff suppressed because one or more lines are too long
2
dist/theming-admin-theming.js.map
vendored
2
dist/theming-admin-theming.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/theming-personal-theming.js
vendored
4
dist/theming-personal-theming.js
vendored
File diff suppressed because one or more lines are too long
2
dist/theming-personal-theming.js.map
vendored
2
dist/theming-personal-theming.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/twofactor_backupcodes-settings.js
vendored
4
dist/twofactor_backupcodes-settings.js
vendored
File diff suppressed because one or more lines are too long
2
dist/twofactor_backupcodes-settings.js.map
vendored
2
dist/twofactor_backupcodes-settings.js.map
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue