diff options
author | Christopher Ng <chrng8@gmail.com> | 2024-12-16 15:53:12 -0800 |
---|---|---|
committer | Christopher Ng <chrng8@gmail.com> | 2025-01-15 15:50:43 -0800 |
commit | 1a43fc57181f4ee7403a3a26d29a4e47dab96888 (patch) | |
tree | f71ce1009f1ed1e58016b87df7de85bf53bdd445 | |
parent | 0eb39d7b9c92712a8083841c227f92dad3d0c86a (diff) | |
download | nextcloud-server-1a43fc57181f4ee7403a3a26d29a4e47dab96888.tar.gz nextcloud-server-1a43fc57181f4ee7403a3a26d29a4e47dab96888.zip |
feat(sharing): Toggle custom tokens setting as admin
Signed-off-by: Christopher Ng <chrng8@gmail.com>
4 files changed, 36 insertions, 2 deletions
diff --git a/apps/files_sharing/src/services/ConfigService.ts b/apps/files_sharing/src/services/ConfigService.ts index 94db0454428..09fdca13598 100644 --- a/apps/files_sharing/src/services/ConfigService.ts +++ b/apps/files_sharing/src/services/ConfigService.ts @@ -34,7 +34,8 @@ type FileSharingCapabilities = { }, send_mail: boolean, upload: boolean, - upload_files_drop: boolean + upload_files_drop: boolean, + custom_tokens: boolean, }, resharing: boolean, user: { @@ -298,4 +299,11 @@ export default class Config { return this._capabilities?.password_policy || {} } + /** + * Returns true if custom tokens are allowed + */ + get allowCustomTokens(): boolean { + return this._capabilities?.files_sharing?.public?.custom_tokens + } + } diff --git a/apps/files_sharing/src/views/SharingDetailsTab.vue b/apps/files_sharing/src/views/SharingDetailsTab.vue index 4d46ec32796..f50a533eeeb 100644 --- a/apps/files_sharing/src/views/SharingDetailsTab.vue +++ b/apps/files_sharing/src/views/SharingDetailsTab.vue @@ -109,7 +109,7 @@ autocomplete="off" :label="t('files_sharing', 'Share label')" :value.sync="share.label" /> - <NcInputField v-if="isPublicShare && !isNewShare" + <NcInputField v-if="config.allowCustomTokens && isPublicShare && !isNewShare" autocomplete="off" :label="t('files_sharing', 'Share link token')" :helper-text="t('files_sharing', 'Set the public share link token to something easy to remember or generate a new token. It is not recommended to use a guessable token for shares which contain sensitive information.')" diff --git a/apps/settings/lib/Settings/Admin/Sharing.php b/apps/settings/lib/Settings/Admin/Sharing.php index f1c9052f4c3..e001a7d00ea 100644 --- a/apps/settings/lib/Settings/Admin/Sharing.php +++ b/apps/settings/lib/Settings/Admin/Sharing.php @@ -71,6 +71,7 @@ class Sharing implements IDelegatedSettings { 'defaultRemoteExpireDate' => $this->getHumanBooleanConfig('core', 'shareapi_default_remote_expire_date'), 'remoteExpireAfterNDays' => $this->config->getAppValue('core', 'shareapi_remote_expire_after_n_days', '7'), 'enforceRemoteExpireDate' => $this->getHumanBooleanConfig('core', 'shareapi_enforce_remote_expire_date'), + 'allowCustomTokens' => $this->shareManager->allowCustomTokens(), ]; $this->initialState->provideInitialState('sharingAppEnabled', $this->appManager->isEnabledForUser('files_sharing')); diff --git a/apps/settings/src/components/AdminSettingsSharingForm.vue b/apps/settings/src/components/AdminSettingsSharingForm.vue index 2d3269563bb..23538b44e6e 100644 --- a/apps/settings/src/components/AdminSettingsSharingForm.vue +++ b/apps/settings/src/components/AdminSettingsSharingForm.vue @@ -59,6 +59,24 @@ </label> </fieldset> + <NcCheckboxRadioSwitch type="switch" + aria-describedby="settings-sharing-custom-token-disable-hint settings-sharing-custom-token-access-hint" + :checked.sync="settings.allowCustomTokens"> + {{ t('settings', 'Allow users to set custom share link tokens') }} + </NcCheckboxRadioSwitch> + <div class="sharing__sub-section"> + <NcNoteCard id="settings-sharing-custom-token-disable-hint" + class="sharing__note" + type="info"> + {{ t('settings', 'Shares with custom tokens will continue to be accessible after this setting has been disabled') }} + </NcNoteCard> + <NcNoteCard id="settings-sharing-custom-token-access-hint" + class="sharing__note" + type="warning"> + {{ t('settings', 'Shares with guessable tokens may be accessed easily') }} + </NcNoteCard> + </div> + <label>{{ t('settings', 'Limit sharing based on groups') }}</label> <div class="sharing__sub-section"> <NcCheckboxRadioSwitch :checked.sync="settings.excludeGroups" @@ -195,6 +213,7 @@ import { NcCheckboxRadioSwitch, NcSettingsSelectGroup, + NcNoteCard, NcTextArea, NcTextField, } from '@nextcloud/vue' @@ -240,6 +259,7 @@ interface IShareSettings { defaultRemoteExpireDate: boolean remoteExpireAfterNDays: string enforceRemoteExpireDate: boolean + allowCustomTokens: boolean } export default defineComponent({ @@ -247,6 +267,7 @@ export default defineComponent({ components: { NcCheckboxRadioSwitch, NcSettingsSelectGroup, + NcNoteCard, NcTextArea, NcTextField, SelectSharingPermissions, @@ -354,6 +375,10 @@ export default defineComponent({ width: 100%; } } + + & &__note { + margin: 2px 0; + } } @media only screen and (max-width: 350px) { |