Merge pull request #57571 from nextcloud/refactor/public-share-auth

refactor(core): migrate public share authentication to Vue
This commit is contained in:
Ferdinand Thiessen 2026-01-16 00:21:19 +01:00 committed by GitHub
commit 2a385fd5b8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 592 additions and 183 deletions

View file

@ -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: {

View file

@ -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>

View file

@ -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;
}

View file

@ -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)
}
})

View 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')

View 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>

View file

@ -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>

View file

@ -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>

View file

@ -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) {

View file

@ -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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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
View 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

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
core-public_share_auth.js.license