aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_sharing/src/public-file-request.ts
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files_sharing/src/public-file-request.ts')
-rw-r--r--apps/files_sharing/src/public-file-request.ts57
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)
+ }
+})