diff options
Diffstat (limited to 'apps/files_sharing/src/public-file-request.ts')
-rw-r--r-- | apps/files_sharing/src/public-file-request.ts | 57 |
1 files changed, 45 insertions, 12 deletions
diff --git a/apps/files_sharing/src/public-file-request.ts b/apps/files_sharing/src/public-file-request.ts index 763c4f60624..92db2440525 100644 --- a/apps/files_sharing/src/public-file-request.ts +++ b/apps/files_sharing/src/public-file-request.ts @@ -3,21 +3,54 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ +import { getGuestNickname, setGuestNickname } from '@nextcloud/auth' import { spawnDialog } from '@nextcloud/dialogs' +import { getUploader } from '@nextcloud/upload' import { defineAsyncComponent } from 'vue' import logger from './services/logger' +import { getBuilder } from '@nextcloud/browser-storage' -const nick = localStorage.getItem('nick') -const publicAuthPromptShown = localStorage.getItem('publicAuthPromptShown') +const storage = getBuilder('files_sharing').build() -// If we don't have a nickname or the public auth prompt hasn't been shown yet, show it -// We still show the prompt if the user has a nickname to double check -if (!nick || !publicAuthPromptShown) { - spawnDialog( - defineAsyncComponent(() => import('./views/PublicAuthPrompt.vue')), - {}, - () => localStorage.setItem('publicAuthPromptShown', 'true'), - ) -} else { - logger.debug(`Public auth prompt already shown. Current nickname is '${nick}'`) +/** + * Setup file-request nickname header for the uploader + * @param nickname The nickname + */ +function registerFileRequestHeader(nickname: string) { + const uploader = getUploader() + uploader.setCustomHeader('X-NC-Nickname', nickname) + logger.debug('Nickname header registered for uploader', { headers: uploader.customHeaders }) +} + +/** + * Callback when a nickname was chosen + * @param nickname The chosen nickname + */ +function onSetNickname(nickname: string): void { + // Set the nickname + setGuestNickname(nickname) + // Set the dialog as shown + storage.setItem('public-auth-prompt-shown', 'true') + // Register header for uploader + registerFileRequestHeader(nickname) } + +window.addEventListener('DOMContentLoaded', () => { + const nickname = getGuestNickname() ?? '' + const dialogShown = storage.getItem('public-auth-prompt-shown') !== null + + // If we don't have a nickname or the public auth prompt hasn't been shown yet, show it + // We still show the prompt if the user has a nickname to double check + if (!nickname || !dialogShown) { + spawnDialog( + defineAsyncComponent(() => import('./views/PublicAuthPrompt.vue')), + { + nickname, + }, + onSetNickname as (...rest: unknown[]) => void, + ) + } else { + logger.debug('Public auth prompt already shown.', { nickname }) + registerFileRequestHeader(nickname) + } +}) |