mirror of
https://github.com/nextcloud/server.git
synced 2026-06-09 08:44:07 -04:00
Merge pull request #57571 from nextcloud/refactor/public-share-auth
refactor(core): migrate public share authentication to Vue
This commit is contained in:
commit
2a385fd5b8
16 changed files with 592 additions and 183 deletions
|
|
@ -27,6 +27,7 @@ module.exports = {
|
|||
'unsupported-browser': path.join(__dirname, 'core/src', 'unsupported-browser.js'),
|
||||
'unsupported-browser-redirect': path.join(__dirname, 'core/src', 'unsupported-browser-redirect.js'),
|
||||
public: path.join(__dirname, 'core/src', 'public.ts'),
|
||||
public_share_auth: path.join(__dirname, 'core/src', 'public-share-auth.ts'),
|
||||
'twofactor-request-token': path.join(__dirname, 'core/src', 'twofactor-request-token.ts'),
|
||||
},
|
||||
dashboard: {
|
||||
|
|
|
|||
|
|
@ -3268,6 +3268,12 @@
|
|||
<code><![CDATA[listen]]></code>
|
||||
</DeprecatedMethod>
|
||||
</file>
|
||||
<file src="core/templates/publicshareauth.php">
|
||||
<DeprecatedMethod>
|
||||
<code><![CDATA[provideInitialState]]></code>
|
||||
<code><![CDATA[provideInitialState]]></code>
|
||||
</DeprecatedMethod>
|
||||
</file>
|
||||
<file src="lib/base.php">
|
||||
<InvalidArgument>
|
||||
<code><![CDATA[$restrictions]]></code>
|
||||
|
|
|
|||
|
|
@ -1,40 +0,0 @@
|
|||
/*!
|
||||
* SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
form fieldset {
|
||||
display: flex !important;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
form fieldset > p {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#email,
|
||||
#password {
|
||||
margin: 5px 0;
|
||||
padding-right: 45px;
|
||||
height: 45px;
|
||||
box-sizing: border-box;
|
||||
flex: 1 1 auto;
|
||||
width: 100% !important;
|
||||
min-width: 0; /* FF hack for to override default value */
|
||||
}
|
||||
|
||||
#password-input-form input[type='submit'],
|
||||
#email-input-form input[type='submit'],
|
||||
#email-input-form input[type='submit'].icon-confirm,
|
||||
#password-input-form input[type='submit'].icon-confirm {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
right: -5px;
|
||||
width: 45px !important;
|
||||
height: 45px;
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
.warning > .warning {
|
||||
/* Do not use a top margin for warning messages in the warning container. */
|
||||
margin-top: 0;
|
||||
}
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
function showEmailAddressPromptForm() {
|
||||
// Shows email prompt
|
||||
const emailInput = document.getElementById('email-input-form')
|
||||
emailInput.style.display = 'block'
|
||||
|
||||
// Shows back button
|
||||
const backButton = document.getElementById('request-password-back-button')
|
||||
backButton.style.display = 'block'
|
||||
|
||||
// Hides password prompt and 'request password' button
|
||||
const passwordRequestButton = document.getElementById('request-password-button-not-talk')
|
||||
const passwordInput = document.getElementById('password-input-form')
|
||||
passwordRequestButton.style.display = 'none'
|
||||
passwordInput.style.display = 'none'
|
||||
|
||||
// Hides identification result messages, if any
|
||||
const identificationResultSuccess = document.getElementById('identification-success')
|
||||
const identificationResultFailure = document.getElementById('identification-failure')
|
||||
if (identificationResultSuccess) {
|
||||
identificationResultSuccess.style.display = 'none'
|
||||
}
|
||||
if (identificationResultFailure) {
|
||||
identificationResultFailure.style.display = 'none'
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// Enables password submit button only when user has typed something in the password field
|
||||
const passwordInput = document.getElementById('password')
|
||||
const passwordButton = document.getElementById('password-submit')
|
||||
let eventListener = function() {
|
||||
passwordButton.disabled = passwordInput.value.length === 0
|
||||
}
|
||||
passwordInput.addEventListener('click', eventListener)
|
||||
passwordInput.addEventListener('keyup', eventListener)
|
||||
passwordInput.addEventListener('change', eventListener)
|
||||
|
||||
// Enables email request button only when user has typed something in the email field
|
||||
const emailInput = document.getElementById('email')
|
||||
const emailButton = document.getElementById('password-request')
|
||||
eventListener = function() {
|
||||
emailButton.disabled = emailInput.value.length === 0
|
||||
}
|
||||
emailInput.addEventListener('click', eventListener)
|
||||
emailInput.addEventListener('keyup', eventListener)
|
||||
emailInput.addEventListener('change', eventListener)
|
||||
|
||||
// Adds functionality to the request password button
|
||||
const passwordRequestButton = document.getElementById('request-password-button-not-talk')
|
||||
if (passwordRequestButton) {
|
||||
passwordRequestButton.addEventListener('click', showEmailAddressPromptForm)
|
||||
}
|
||||
})
|
||||
14
core/src/public-share-auth.ts
Normal file
14
core/src/public-share-auth.ts
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
/*!
|
||||
* SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import { getCSPNonce } from '@nextcloud/auth'
|
||||
import Vue from 'vue'
|
||||
import PublicShareAuth from './views/PublicShareAuth.vue'
|
||||
|
||||
__webpack_nonce__ = getCSPNonce()
|
||||
|
||||
const View = Vue.extend(PublicShareAuth)
|
||||
const app = new View()
|
||||
app.$mount('#core-public-share-auth')
|
||||
133
core/src/views/PublicShareAuth.vue
Normal file
133
core/src/views/PublicShareAuth.vue
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
<!--
|
||||
- SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
|
||||
- SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
-->
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { ShareType } from '@nextcloud/sharing'
|
||||
|
||||
import { getRequestToken } from '@nextcloud/auth'
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
import { t } from '@nextcloud/l10n'
|
||||
import { getSharingToken } from '@nextcloud/sharing/public'
|
||||
import { NcTextField } from '@nextcloud/vue'
|
||||
import { getCurrentInstance, onMounted, ref } from 'vue'
|
||||
import NcButton from '@nextcloud/vue/components/NcButton'
|
||||
import NcFormBox from '@nextcloud/vue/components/NcFormBox'
|
||||
import NcGuestContent from '@nextcloud/vue/components/NcGuestContent'
|
||||
import NcNoteCard from '@nextcloud/vue/components/NcNoteCard'
|
||||
import NcPasswordField from '@nextcloud/vue/components/NcPasswordField'
|
||||
|
||||
const publicShareAuth = loadState<{
|
||||
canResendPassword: boolean
|
||||
shareType: ShareType
|
||||
identityOk?: boolean | null
|
||||
invalidPassword?: boolean
|
||||
}>('core', 'publicShareAuth')
|
||||
|
||||
const requestToken = getRequestToken()
|
||||
const sharingToken = getSharingToken()
|
||||
const { shareType, invalidPassword, canResendPassword } = publicShareAuth
|
||||
|
||||
const hasIdentityCheck = typeof publicShareAuth.identityOk === 'boolean'
|
||||
const showIdentityCheck = ref(typeof publicShareAuth.identityOk === 'boolean')
|
||||
const password = ref('')
|
||||
const email = ref('')
|
||||
|
||||
// TODO: Remove when using Vue 3
|
||||
onMounted(() => {
|
||||
const instance = getCurrentInstance()
|
||||
if (instance) {
|
||||
// @ts-expect-error Vue internals
|
||||
(instance.proxy.$el as HTMLElement)?.classList.add('guest-box')
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<NcGuestContent :class="$style.publicShareAuth">
|
||||
<h2>{{ t('core', 'This share is password-protected') }}</h2>
|
||||
<form
|
||||
v-show="!showIdentityCheck"
|
||||
:class="$style.publicShareAuth__form"
|
||||
method="POST">
|
||||
<NcNoteCard v-if="invalidPassword" type="error">
|
||||
{{ t('core', 'The password is wrong or expired. Please try again or request a new one.') }}
|
||||
</NcNoteCard>
|
||||
|
||||
<NcPasswordField
|
||||
v-model="password"
|
||||
:label="t('core', 'Password')"
|
||||
autofocus
|
||||
autocomplete="new-password"
|
||||
autocapitalize="off"
|
||||
spellcheck="false"
|
||||
name="password" />
|
||||
|
||||
<input type="hidden" name="requesttoken" :value="requestToken">
|
||||
<input type="hidden" name="sharingToken" :value="sharingToken">
|
||||
<input type="hidden" name="sharingType" :value="shareType">
|
||||
|
||||
<NcButton type="submit" variant="primary" wide>
|
||||
{{ t('core', 'Submit') }}
|
||||
</NcButton>
|
||||
</form>
|
||||
|
||||
<form
|
||||
v-if="showIdentityCheck"
|
||||
:class="$style.publicShareAuth__form"
|
||||
method="POST">
|
||||
<NcNoteCard v-if="!hasIdentityCheck" type="info">
|
||||
{{ t('core', 'Please type in your email address to request a temporary password') }}
|
||||
</NcNoteCard>
|
||||
|
||||
<NcNoteCard v-else :type="publicShareAuth.identityOk ? 'success' : 'error'">
|
||||
{{ publicShareAuth.identityOk ? t('core', 'Password sent!') : t('core', 'You are not authorized to request a password for this share') }}
|
||||
</NcNoteCard>
|
||||
|
||||
<NcTextField
|
||||
v-model="email"
|
||||
type="email"
|
||||
name="identityToken"
|
||||
:label="t('core', 'Email address')" />
|
||||
<input type="hidden" name="requesttoken" :value="requestToken">
|
||||
<input type="hidden" name="sharingToken" :value="sharingToken">
|
||||
<input type="hidden" name="sharingType" :value="shareType">
|
||||
<input type="hidden" name="passwordRequest" value="">
|
||||
|
||||
<NcFormBox row>
|
||||
<NcButton wide @click="showIdentityCheck = false">
|
||||
{{ t('core', 'Back') }}
|
||||
</NcButton>
|
||||
<NcButton type="submit" variant="primary" wide>
|
||||
{{ t('core', 'Request password') }}
|
||||
</NcButton>
|
||||
</NcFormBox>
|
||||
</form>
|
||||
|
||||
<!-- request password button -->
|
||||
<NcButton
|
||||
v-if="canResendPassword && !showIdentityCheck"
|
||||
:class="$style.publicShareAuth__forgotPasswordButton"
|
||||
wide
|
||||
@click="showIdentityCheck = true">
|
||||
{{ t('core', 'Forgot password') }}
|
||||
</NcButton>
|
||||
</NcGuestContent>
|
||||
</template>
|
||||
|
||||
<style module>
|
||||
.publicShareAuth {
|
||||
max-width: 400px !important;
|
||||
}
|
||||
|
||||
.publicShareAuth__form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: calc(2 * var(--default-grid-baseline));
|
||||
}
|
||||
|
||||
.publicShareAuth__forgotPasswordButton {
|
||||
margin-top: calc(3 * var(--default-grid-baseline));
|
||||
}
|
||||
</style>
|
||||
|
|
@ -49,7 +49,7 @@ p($theme->getTitle());
|
|||
</div>
|
||||
</header>
|
||||
<?php endif; ?>
|
||||
<div>
|
||||
<div class="guest-content">
|
||||
<h1 class="hidden-visually">
|
||||
<?php p($theme->getName()); ?>
|
||||
</h1>
|
||||
|
|
|
|||
|
|
@ -4,84 +4,19 @@
|
|||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
/** @var array $_ */
|
||||
/** @var \OCP\IL10N $l */
|
||||
/** @var array{share: \OCP\Share\IShare, identityOk?: bool, wrongpw?: bool} $_ */
|
||||
|
||||
\OCP\Util::addStyle('core', 'guest');
|
||||
\OCP\Util::addStyle('core', 'publicshareauth');
|
||||
\OCP\Util::addScript('core', 'publicshareauth');
|
||||
\OCP\Util::addScript('core', 'public_share_auth');
|
||||
|
||||
$initialState = \OCP\Server::get(\OCP\IInitialStateService::class);
|
||||
$initialState->provideInitialState('files_sharing', 'sharingToken', $_['share']->getToken());
|
||||
$initialState->provideInitialState('core', 'publicShareAuth', [
|
||||
'identityOk' => $_['identityOk'] ?? null,
|
||||
'shareType' => $_['share']->getShareType(),
|
||||
'invalidPassword' => $_['wrongpw'] ?? null,
|
||||
'canResendPassword' => $_['share']->getShareType() === \OCP\Share\IShare::TYPE_EMAIL && !$_['share']->getSendPasswordByTalk(),
|
||||
]);
|
||||
?>
|
||||
|
||||
<div class="guest-box">
|
||||
<!-- password prompt form. It should be hidden when we show the email prompt form -->
|
||||
<?php if (!isset($_['identityOk'])): ?>
|
||||
<form method="post" id="password-input-form">
|
||||
<?php else: ?>
|
||||
<form method="post" id="password-input-form" style="display:none;">
|
||||
<?php endif; ?>
|
||||
<fieldset class="warning">
|
||||
<?php if (!isset($_['wrongpw'])): ?>
|
||||
<div class="warning-info"><?php p($l->t('This share is password-protected')); ?></div>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($_['wrongpw'])): ?>
|
||||
<div class="warning wrongPasswordMsg"><?php p($l->t('The password is wrong or expired. Please try again or request a new one.')); ?></div>
|
||||
<?php endif; ?>
|
||||
<p>
|
||||
<label for="password" class="infield"><?php p($l->t('Password')); ?></label>
|
||||
<input type="hidden" id="requesttoken" name="requesttoken" value="<?php p($_['requesttoken']) ?>" />
|
||||
<input type="password" name="password" id="password"
|
||||
placeholder="<?php p($l->t('Password')); ?>" value=""
|
||||
autocomplete="new-password" autocapitalize="off" spellcheck="false"
|
||||
autofocus />
|
||||
<input type="hidden" name="sharingToken" value="<?php p($_['share']->getToken()) ?>" id="sharingToken">
|
||||
<input type="hidden" name="sharingType" value="<?php p($_['share']->getShareType()) ?>" id="sharingType">
|
||||
<input type="submit" id="password-submit"
|
||||
class="svg icon-confirm input-button-inline" value="" disabled="disabled" />
|
||||
</p>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
<!-- email prompt form. It should initially be hidden -->
|
||||
<?php if (isset($_['identityOk'])): ?>
|
||||
<form method="post" id="email-input-form">
|
||||
<?php else: ?>
|
||||
<form method="post" id="email-input-form" style="display:none;">
|
||||
<?php endif; ?>
|
||||
<fieldset class="warning">
|
||||
<div class="warning-info" id="email-prompt"><?php p($l->t('Please type in your email address to request a temporary password')); ?></div>
|
||||
<p>
|
||||
<input type="email" id="email" name="identityToken" placeholder="<?php p($l->t('Email address')); ?>" />
|
||||
<input type="submit" id="password-request" name="passwordRequest" class="svg icon-confirm input-button-inline" value="" disabled="disabled"/>
|
||||
<input type="hidden" id="requesttoken" name="requesttoken" value="<?php p($_['requesttoken']) ?>" />
|
||||
<input type="hidden" name="sharingToken" value="<?php p($_['share']->getToken()) ?>" id="sharingToken">
|
||||
<input type="hidden" name="sharingType" value="<?php p($_['share']->getShareType()) ?>" id="sharingType">
|
||||
</p>
|
||||
<?php if (isset($_['identityOk'])): ?>
|
||||
<?php if ($_['identityOk']): ?>
|
||||
<div class="warning-info" id="identification-success"><?php p($l->t('Password sent!')); ?></div>
|
||||
<?php else: ?>
|
||||
<div class="warning" id="identification-failure"><?php p($l->t('You are not authorized to request a password for this share')); ?></div>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
<!-- request password button -->
|
||||
<?php if (!isset($_['identityOk']) && $_['share']->getShareType() === $_['share']::TYPE_EMAIL && !$_['share']->getSendPasswordByTalk()): ?>
|
||||
<a id="request-password-button-not-talk"><?php p($l->t('Forgot password?')); ?></a>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- back to showShare button -->
|
||||
<form method="get">
|
||||
<fieldset>
|
||||
<a
|
||||
href=""
|
||||
id="request-password-back-button"
|
||||
<?php if (isset($_['identityOk'])): ?>
|
||||
style="display:block;">
|
||||
<?php else: ?>
|
||||
style="display:none;">
|
||||
<?php endif; ?>
|
||||
<?php p($l->t('Back')); ?></a>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
<div id="core-public-share-auth" class="guest-box" ></div>
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ const defaultShareContext: ShareContext = {
|
|||
*
|
||||
* @param context The current share context (defaults to `defaultShareContext` if not provided).
|
||||
* @return The share URL.
|
||||
* @throws Error if the share context has no URL.
|
||||
* @throws {Error} if the share context has no URL.
|
||||
*/
|
||||
export function getShareUrl(context: ShareContext = defaultShareContext): string {
|
||||
if (!context.url) {
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ Cypress.env('baseUrl', url)
|
|||
|
||||
/**
|
||||
* Enable or disable a user
|
||||
* TODO: standardize in @nextcloud/e2e-test-server
|
||||
* TODO: standardize in `@nextcloud/e2e-test-server`
|
||||
*
|
||||
* @param {User} user the user to dis- / enable
|
||||
* @param {boolean} enable True if the user should be enable, false to disable
|
||||
|
|
@ -45,7 +45,7 @@ Cypress.Commands.add('enableUser', (user: User, enable = true) => {
|
|||
|
||||
/**
|
||||
* cy.uploadedFile - uploads a file from the fixtures folder
|
||||
* TODO: standardize in @nextcloud/e2e-test-server
|
||||
* TODO: standardize in `@nextcloud/e2e-test-server`
|
||||
*
|
||||
* @param {User} user the owner of the file, e.g. admin
|
||||
* @param {string} fixture the fixture file name, e.g. image1.jpg
|
||||
|
|
@ -142,7 +142,7 @@ Cypress.Commands.add('rm', (user: User, target: string) => {
|
|||
|
||||
/**
|
||||
* cy.uploadedContent - uploads a raw content
|
||||
* TODO: standardize in @nextcloud/e2e-test-server
|
||||
* TODO: standardize in `@nextcloud/e2e-test-server`
|
||||
*
|
||||
* @param {User} user the owner of the file, e.g. admin
|
||||
* @param {Blob} blob the content to upload
|
||||
|
|
|
|||
4
dist/core-common.js
vendored
4
dist/core-common.js
vendored
File diff suppressed because one or more lines are too long
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
2
dist/core-public_share_auth.js
vendored
Normal file
2
dist/core-public_share_auth.js
vendored
Normal file
File diff suppressed because one or more lines are too long
413
dist/core-public_share_auth.js.license
vendored
Normal file
413
dist/core-public_share_auth.js.license
vendored
Normal file
|
|
@ -0,0 +1,413 @@
|
|||
SPDX-License-Identifier: MIT
|
||||
SPDX-License-Identifier: ISC
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
SPDX-License-Identifier: BSD-3-Clause
|
||||
SPDX-License-Identifier: BSD-2-Clause
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
SPDX-License-Identifier: (MPL-2.0 OR Apache-2.0)
|
||||
SPDX-FileCopyrightText: xiemengxiong
|
||||
SPDX-FileCopyrightText: xiaokai <kexiaokai@gmail.com>
|
||||
SPDX-FileCopyrightText: rhysd <lin90162@yahoo.co.jp>
|
||||
SPDX-FileCopyrightText: p-queue developers
|
||||
SPDX-FileCopyrightText: omahlama
|
||||
SPDX-FileCopyrightText: inline-style-parser developers
|
||||
SPDX-FileCopyrightText: escape-html developers
|
||||
SPDX-FileCopyrightText: debounce developers
|
||||
SPDX-FileCopyrightText: atomiks
|
||||
SPDX-FileCopyrightText: Tobias Koppers @sokra
|
||||
SPDX-FileCopyrightText: Titus Wormer <tituswormer@gmail.com> (https://wooorm.com)
|
||||
SPDX-FileCopyrightText: Thorsten Lünborg
|
||||
SPDX-FileCopyrightText: T. Jameson Little <t.jameson.little@gmail.com>
|
||||
SPDX-FileCopyrightText: Stefan Thomas <justmoon@members.fsf.org> (http://www.justmoon.net)
|
||||
SPDX-FileCopyrightText: Sindre Sorhus
|
||||
SPDX-FileCopyrightText: Roman Shtylman <shtylman@gmail.com>
|
||||
SPDX-FileCopyrightText: Richie Bendall
|
||||
SPDX-FileCopyrightText: Paul Vorbach <paul@vorba.ch> (http://paul.vorba.ch)
|
||||
SPDX-FileCopyrightText: Paul Vorbach <paul@vorb.de> (http://vorb.de)
|
||||
SPDX-FileCopyrightText: OpenJS Foundation and other contributors
|
||||
SPDX-FileCopyrightText: Nick Frasser (https://nfrasser.com)
|
||||
SPDX-FileCopyrightText: Nextcloud GmbH and Nextcloud contributors
|
||||
SPDX-FileCopyrightText: Max <max@nextcloud.com>
|
||||
SPDX-FileCopyrightText: Matt Zabriskie
|
||||
SPDX-FileCopyrightText: Mark <mark@remarkablemark.org>
|
||||
SPDX-FileCopyrightText: Mapbox
|
||||
SPDX-FileCopyrightText: Jordan Humphreys <jordan@zurb.com>
|
||||
SPDX-FileCopyrightText: Jeff Sagal <sagalbot@gmail.com>
|
||||
SPDX-FileCopyrightText: Jacob Clevenger<https://github.com/wheatjs>
|
||||
SPDX-FileCopyrightText: Hiroki Osame
|
||||
SPDX-FileCopyrightText: Guillaume Chau <guillaume.b.chau@gmail.com>
|
||||
SPDX-FileCopyrightText: GitHub Inc.
|
||||
SPDX-FileCopyrightText: Feross Aboukhadijeh
|
||||
SPDX-FileCopyrightText: Evan You
|
||||
SPDX-FileCopyrightText: Eugene Sharygin <eush77@gmail.com>
|
||||
SPDX-FileCopyrightText: Eric Norris (https://github.com/ericnorris)
|
||||
SPDX-FileCopyrightText: Dr.-Ing. Mario Heiderich, Cure53 <mario@cure53.de> (https://cure53.de/)
|
||||
SPDX-FileCopyrightText: David Clark
|
||||
SPDX-FileCopyrightText: Christoph Wurst
|
||||
SPDX-FileCopyrightText: Borys Serebrov
|
||||
SPDX-FileCopyrightText: Arnout Kazemier
|
||||
SPDX-FileCopyrightText: Antoni Andre <antoniandre.web@gmail.com>
|
||||
SPDX-FileCopyrightText: Anthony Fu <https://github.com/antfu>
|
||||
SPDX-FileCopyrightText: Anthony Fu <anthonyfu117@hotmail.com>
|
||||
SPDX-FileCopyrightText: Andrea Giammarchi
|
||||
|
||||
|
||||
This file is generated from multiple sources. Included packages:
|
||||
- @floating-ui/core
|
||||
- version: 1.7.3
|
||||
- license: MIT
|
||||
- @floating-ui/dom
|
||||
- version: 1.7.4
|
||||
- license: MIT
|
||||
- @floating-ui/utils
|
||||
- version: 0.2.10
|
||||
- license: MIT
|
||||
- @linusborg/vue-simple-portal
|
||||
- version: 0.1.5
|
||||
- license: Apache-2.0
|
||||
- unist-util-is
|
||||
- version: 3.0.0
|
||||
- license: MIT
|
||||
- unist-util-visit-parents
|
||||
- version: 2.1.2
|
||||
- license: MIT
|
||||
- unist-util-visit
|
||||
- version: 1.4.1
|
||||
- license: MIT
|
||||
- @mapbox/hast-util-table-cell-style
|
||||
- version: 0.2.1
|
||||
- license: BSD-2-Clause
|
||||
- @nextcloud/auth
|
||||
- version: 2.5.3
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/axios
|
||||
- version: 2.5.2
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/browser-storage
|
||||
- version: 0.5.0
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/capabilities
|
||||
- version: 1.2.1
|
||||
- license: GPL-3.0-or-later
|
||||
- semver
|
||||
- version: 7.7.2
|
||||
- license: ISC
|
||||
- @nextcloud/event-bus
|
||||
- version: 3.3.3
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/initial-state
|
||||
- version: 3.0.0
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/l10n
|
||||
- version: 3.4.1
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/logger
|
||||
- version: 3.0.3
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/router
|
||||
- version: 3.1.0
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/sharing
|
||||
- version: 0.3.0
|
||||
- license: GPL-3.0-or-later
|
||||
- @nextcloud/vue-select
|
||||
- version: 3.26.0
|
||||
- license: MIT
|
||||
- @nextcloud/initial-state
|
||||
- version: 2.2.0
|
||||
- license: GPL-3.0-or-later
|
||||
- debounce
|
||||
- version: 2.2.0
|
||||
- license: MIT
|
||||
- eventemitter3
|
||||
- version: 5.0.1
|
||||
- license: MIT
|
||||
- p-queue
|
||||
- version: 8.1.1
|
||||
- license: MIT
|
||||
- @nextcloud/vue
|
||||
- version: 8.35.0
|
||||
- license: AGPL-3.0-or-later
|
||||
- @ungap/structured-clone
|
||||
- version: 1.3.0
|
||||
- license: ISC
|
||||
- @vueuse/components
|
||||
- version: 11.3.0
|
||||
- license: MIT
|
||||
- @vueuse/core
|
||||
- version: 11.3.0
|
||||
- license: MIT
|
||||
- @vueuse/shared
|
||||
- version: 11.3.0
|
||||
- license: MIT
|
||||
- axios
|
||||
- version: 1.12.2
|
||||
- license: MIT
|
||||
- base64-js
|
||||
- version: 1.5.1
|
||||
- license: MIT
|
||||
- blurhash
|
||||
- version: 2.0.5
|
||||
- license: MIT
|
||||
- char-regex
|
||||
- version: 2.0.2
|
||||
- license: MIT
|
||||
- charenc
|
||||
- version: 0.0.2
|
||||
- license: BSD-3-Clause
|
||||
- comma-separated-tokens
|
||||
- version: 2.0.3
|
||||
- license: MIT
|
||||
- crypt
|
||||
- version: 0.0.2
|
||||
- license: BSD-3-Clause
|
||||
- css-loader
|
||||
- version: 7.1.2
|
||||
- license: MIT
|
||||
- date-format-parse
|
||||
- version: 0.2.7
|
||||
- license: MIT
|
||||
- decode-named-character-reference
|
||||
- version: 1.2.0
|
||||
- license: MIT
|
||||
- devlop
|
||||
- version: 1.1.0
|
||||
- license: MIT
|
||||
- dompurify
|
||||
- version: 3.3.1
|
||||
- license: (MPL-2.0 OR Apache-2.0)
|
||||
- emoji-mart-vue-fast
|
||||
- version: 15.0.5
|
||||
- license: BSD-3-Clause
|
||||
- escape-html
|
||||
- version: 1.0.3
|
||||
- license: MIT
|
||||
- extend
|
||||
- version: 3.0.2
|
||||
- license: MIT
|
||||
- floating-vue
|
||||
- version: 1.0.0-beta.19
|
||||
- license: MIT
|
||||
- focus-trap
|
||||
- version: 7.6.6
|
||||
- license: MIT
|
||||
- hast-to-hyperscript
|
||||
- version: 10.0.3
|
||||
- license: MIT
|
||||
- hast-util-is-element
|
||||
- version: 3.0.0
|
||||
- license: MIT
|
||||
- hast-util-whitespace
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
- ieee754
|
||||
- version: 1.2.1
|
||||
- license: BSD-3-Clause
|
||||
- inline-style-parser
|
||||
- version: 0.1.1
|
||||
- license: MIT
|
||||
- is-absolute-url
|
||||
- version: 4.0.1
|
||||
- license: MIT
|
||||
- is-buffer
|
||||
- version: 1.1.6
|
||||
- license: MIT
|
||||
- jquery
|
||||
- version: 3.7.1
|
||||
- license: MIT
|
||||
- linkifyjs
|
||||
- version: 4.3.2
|
||||
- license: MIT
|
||||
- md5
|
||||
- version: 2.3.0
|
||||
- license: BSD-3-Clause
|
||||
- mdast-squeeze-paragraphs
|
||||
- version: 6.0.0
|
||||
- license: MIT
|
||||
- escape-string-regexp
|
||||
- version: 5.0.0
|
||||
- license: MIT
|
||||
- mdast-util-find-and-replace
|
||||
- version: 3.0.2
|
||||
- license: MIT
|
||||
- mdast-util-from-markdown
|
||||
- version: 2.0.2
|
||||
- license: MIT
|
||||
- mdast-util-newline-to-break
|
||||
- version: 2.0.0
|
||||
- license: MIT
|
||||
- mdast-util-to-hast
|
||||
- version: 13.2.1
|
||||
- license: MIT
|
||||
- mdast-util-to-string
|
||||
- version: 4.0.0
|
||||
- license: MIT
|
||||
- micromark-core-commonmark
|
||||
- version: 2.0.3
|
||||
- license: MIT
|
||||
- micromark-factory-destination
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
- micromark-factory-label
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
- micromark-factory-space
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
- micromark-factory-title
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
- micromark-factory-whitespace
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
- micromark-util-character
|
||||
- version: 2.1.1
|
||||
- license: MIT
|
||||
- micromark-util-chunked
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
- micromark-util-classify-character
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
- micromark-util-combine-extensions
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
- micromark-util-decode-numeric-character-reference
|
||||
- version: 2.0.2
|
||||
- license: MIT
|
||||
- micromark-util-decode-string
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
- micromark-util-encode
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
- micromark-util-html-tag-name
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
- micromark-util-normalize-identifier
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
- micromark-util-resolve-all
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
- micromark-util-sanitize-uri
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
- micromark-util-subtokenize
|
||||
- version: 2.1.0
|
||||
- license: MIT
|
||||
- micromark
|
||||
- version: 4.0.2
|
||||
- license: MIT
|
||||
- buffer
|
||||
- version: 6.0.3
|
||||
- license: MIT
|
||||
- process
|
||||
- version: 0.11.10
|
||||
- license: MIT
|
||||
- property-information
|
||||
- version: 6.5.0
|
||||
- license: MIT
|
||||
- rehype-external-links
|
||||
- version: 3.0.0
|
||||
- license: MIT
|
||||
- rehype-react
|
||||
- version: 7.2.0
|
||||
- license: MIT
|
||||
- remark-breaks
|
||||
- version: 4.0.0
|
||||
- license: MIT
|
||||
- remark-parse
|
||||
- version: 11.0.0
|
||||
- license: MIT
|
||||
- remark-rehype
|
||||
- version: 11.1.2
|
||||
- license: MIT
|
||||
- remark-unlink-protocols
|
||||
- version: 1.0.0
|
||||
- license: MIT
|
||||
- space-separated-tokens
|
||||
- version: 2.0.2
|
||||
- license: MIT
|
||||
- splitpanes
|
||||
- version: 2.4.1
|
||||
- license: MIT
|
||||
- strip-ansi
|
||||
- version: 7.1.2
|
||||
- license: MIT
|
||||
- striptags
|
||||
- version: 3.2.0
|
||||
- license: MIT
|
||||
- style-loader
|
||||
- version: 4.0.0
|
||||
- license: MIT
|
||||
- style-to-object
|
||||
- version: 0.4.4
|
||||
- license: MIT
|
||||
- tabbable
|
||||
- version: 6.3.0
|
||||
- license: MIT
|
||||
- tributejs
|
||||
- version: 5.1.3
|
||||
- license: MIT
|
||||
- trim-lines
|
||||
- version: 3.0.1
|
||||
- license: MIT
|
||||
- trough
|
||||
- version: 2.2.0
|
||||
- license: MIT
|
||||
- unified
|
||||
- version: 11.0.5
|
||||
- license: MIT
|
||||
- unist-builder
|
||||
- version: 4.0.0
|
||||
- license: MIT
|
||||
- unist-util-is
|
||||
- version: 6.0.0
|
||||
- license: MIT
|
||||
- unist-util-position
|
||||
- version: 5.0.0
|
||||
- license: MIT
|
||||
- unist-util-stringify-position
|
||||
- version: 4.0.0
|
||||
- license: MIT
|
||||
- unist-util-visit-parents
|
||||
- version: 6.0.1
|
||||
- license: MIT
|
||||
- unist-util-visit
|
||||
- version: 5.0.0
|
||||
- license: MIT
|
||||
- vfile-message
|
||||
- version: 4.0.3
|
||||
- license: MIT
|
||||
- vfile
|
||||
- version: 6.0.3
|
||||
- license: MIT
|
||||
- vue-color
|
||||
- version: 2.8.2
|
||||
- license: MIT
|
||||
- vue-demi
|
||||
- version: 0.14.10
|
||||
- license: MIT
|
||||
- vue-frag
|
||||
- version: 1.4.3
|
||||
- license: MIT
|
||||
- vue-loader
|
||||
- version: 15.11.1
|
||||
- license: MIT
|
||||
- vue-router
|
||||
- version: 3.6.5
|
||||
- license: MIT
|
||||
- vue
|
||||
- version: 2.7.16
|
||||
- license: MIT
|
||||
- web-namespaces
|
||||
- version: 2.0.1
|
||||
- license: MIT
|
||||
- webpack
|
||||
- version: 5.104.1
|
||||
- license: MIT
|
||||
- nextcloud
|
||||
- version: 1.0.0
|
||||
- license: AGPL-3.0-or-later
|
||||
1
dist/core-public_share_auth.js.map
vendored
Normal file
1
dist/core-public_share_auth.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
1
dist/core-public_share_auth.js.map.license
vendored
Symbolic link
1
dist/core-public_share_auth.js.map.license
vendored
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
core-public_share_auth.js.license
|
||||
Loading…
Reference in a new issue