mirror of
https://github.com/nextcloud/server.git
synced 2026-04-23 23:27:46 -04:00
86 lines
3.1 KiB
TypeScript
86 lines
3.1 KiB
TypeScript
/**
|
|
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
|
|
import { getBuilder } from '@nextcloud/browser-storage'
|
|
import { getGuestNickname, type NextcloudUser } from '@nextcloud/auth'
|
|
import { getUploader } from '@nextcloud/upload'
|
|
import { loadState } from '@nextcloud/initial-state'
|
|
import { showGuestUserPrompt } from '@nextcloud/dialogs'
|
|
import { t } from '@nextcloud/l10n'
|
|
|
|
import logger from './services/logger'
|
|
import { subscribe } from '@nextcloud/event-bus'
|
|
|
|
const storage = getBuilder('files_sharing').build()
|
|
|
|
// Setup file-request nickname header for the uploader
|
|
const registerFileRequestHeader = (nickname: string) => {
|
|
const uploader = getUploader()
|
|
uploader.setCustomHeader('X-NC-Nickname', encodeURIComponent(nickname))
|
|
logger.debug('Nickname header registered for uploader', { headers: uploader.customHeaders })
|
|
}
|
|
|
|
// Callback when a nickname was chosen
|
|
const onUserInfoChanged = (guest: NextcloudUser) => {
|
|
logger.debug('User info changed', { guest })
|
|
registerFileRequestHeader(guest.displayName ?? '')
|
|
}
|
|
|
|
// Monitor nickname changes
|
|
subscribe('user:info:changed', onUserInfoChanged)
|
|
|
|
window.addEventListener('DOMContentLoaded', () => {
|
|
const nickname = getGuestNickname() ?? ''
|
|
const dialogShown = storage.getItem('public-auth-prompt-shown') !== null
|
|
|
|
// Check if a nickname is mandatory
|
|
const isFileRequest = loadState('files_sharing', 'isFileRequest', false)
|
|
|
|
const owner = loadState('files_sharing', 'owner', '')
|
|
const ownerDisplayName = loadState('files_sharing', 'ownerDisplayName', '')
|
|
const label = loadState('files_sharing', 'label', '')
|
|
const filename = loadState('files_sharing', 'filename', '')
|
|
|
|
// If the owner provided a custom label, use it instead of the filename
|
|
const folder = label || filename
|
|
|
|
const options = {
|
|
nickname,
|
|
notice: t('files_sharing', 'To upload files to {folder}, you need to provide your name first.', { folder }),
|
|
subtitle: undefined as string | undefined,
|
|
title: t('files_sharing', 'Upload files to {folder}', { folder }),
|
|
}
|
|
|
|
// If the guest already has a nickname, we just make them double check
|
|
if (nickname) {
|
|
options.notice = t('files_sharing', 'Please confirm your name to upload files to {folder}', { folder })
|
|
}
|
|
|
|
// If the account owner set their name as public,
|
|
// we show it in the subtitle
|
|
if (owner) {
|
|
options.subtitle = t('files_sharing', '{ownerDisplayName} shared a folder with you.', { ownerDisplayName })
|
|
}
|
|
|
|
// If this is a file request, then we need a nickname
|
|
if (isFileRequest) {
|
|
// 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) {
|
|
logger.debug('Showing public auth prompt.', { nickname })
|
|
showGuestUserPrompt(options)
|
|
}
|
|
return
|
|
}
|
|
|
|
if (!dialogShown && !nickname) {
|
|
logger.debug('Public auth prompt not shown yet but nickname is not mandatory.', { nickname })
|
|
return
|
|
}
|
|
|
|
// Else, we just register the nickname header if any.
|
|
logger.debug('Public auth prompt already shown.', { nickname })
|
|
registerFileRequestHeader(nickname)
|
|
})
|