Merge pull request #56570 from nextcloud/artonge/debt/migrate_user_ldap_vu3

refactor(user_ldap): Migrate to Vue3
This commit is contained in:
Ferdinand Thiessen 2025-11-25 15:17:48 +01:00 committed by GitHub
commit 74351255db
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
262 changed files with 1240 additions and 1688 deletions

View file

@ -45,8 +45,10 @@ use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;
class Application extends App implements IBootstrap {
public const APP_ID = 'user_ldap';
public function __construct() {
parent::__construct('user_ldap');
parent::__construct(self::APP_ID);
$container = $this->getContainer();
/**

View file

@ -6,6 +6,7 @@
*/
namespace OCA\User_LDAP\Settings;
use OCA\User_LDAP\AppInfo\Application;
use OCA\User_LDAP\Configuration;
use OCA\User_LDAP\Helper;
use OCP\AppFramework\Http\TemplateResponse;
@ -59,7 +60,9 @@ class Admin implements IDelegatedSettings {
$this->initialState->provideInitialState('ldapConfigs', $ldapConfigs);
$this->initialState->provideInitialState('ldapModuleInstalled', function_exists('ldap_connect'));
return new TemplateResponse('user_ldap', 'settings', $parameters);
\OCP\Util::addStyle(Application::APP_ID, 'settings-admin');
\OCP\Util::addScript(Application::APP_ID, 'settings-admin');
return new TemplateResponse(Application::APP_ID, 'settings', $parameters);
}
public function getSection(): string {

View file

@ -9,29 +9,29 @@
<NcTextField
autocomplete="off"
:label=" t('user_ldap', 'Backup (Replica) Host')"
:label="t('user_ldap', 'Backup (Replica) Host')"
:value="ldapConfigProxy.ldapBackupHost"
:helper-text="t('user_ldap', 'Give an optional backup host. It must be a replica of the main LDAP/AD server.')"
@change.native="(event) => ldapConfigProxy.ldapBackupHost = event.target.value" />
@change="(event) => ldapConfigProxy.ldapBackupHost = event.target.value" />
<NcTextField
type="number"
:value="ldapConfigProxy.ldapBackupPort"
:label="t('user_ldap', 'Backup (Replica) Port') "
@change.native="(event) => ldapConfigProxy.ldapBackupPort = event.target.value" />
:label="t('user_ldap', 'Backup (Replica) Port')"
@change="(event) => ldapConfigProxy.ldapBackupPort = event.target.value" />
<NcCheckboxRadioSwitch
:checked="ldapConfigProxy.ldapOverrideMainServer === '1'"
:model-value="ldapConfigProxy.ldapOverrideMainServer === '1'"
type="switch"
:aria-label="t('user_ldap', 'Only connect to the replica server.')"
@update:checked="ldapConfigProxy.ldapOverrideMainServer = $event ? '1' : '0'">
@update:model-value="ldapConfigProxy.ldapOverrideMainServer = $event ? '1' : '0'">
{{ t('user_ldap', 'Disable Main Server') }}
</NcCheckboxRadioSwitch>
<NcCheckboxRadioSwitch
:checked="ldapConfigProxy.turnOffCertCheck === '1'"
:model-value="ldapConfigProxy.turnOffCertCheck === '1'"
:aria-label="t('user_ldap', 'Not recommended, use it for testing only! If connection only works with this option, import the LDAP server\'s SSL certificate in your {instanceName} server.', { instanceName })"
@update:checked="ldapConfigProxy.turnOffCertCheck = $event ? '1' : '0'">
@update:model-value="ldapConfigProxy.turnOffCertCheck = $event ? '1' : '0'">
{{ t('user_ldap', 'Turn off SSL certificate validation.') }}
</NcCheckboxRadioSwitch>
@ -40,7 +40,7 @@
:label="t('user_ldap', 'Cache Time-To-Live')"
:value="ldapConfigProxy.ldapCacheTTL"
:helper-text="t('user_ldap', 'in seconds. A change empties the cache.')"
@change.native="(event) => ldapConfigProxy.ldapCacheTTL = event.target.value" />
@change="(event) => ldapConfigProxy.ldapCacheTTL = event.target.value" />
</details>
<details name="ldap-wizard__advanced__section" class="ldap-wizard__advanced__section">
@ -51,31 +51,31 @@
:value="ldapConfigProxy.ldapUserDisplayName"
:label="t('user_ldap', 'User Display Name Field')"
:helper-text="t('user_ldap', 'The LDAP attribute to use to generate the user\'s display name.')"
@change.native="(event) => ldapConfigProxy.ldapUserDisplayName = event.target.value" />
@change="(event) => ldapConfigProxy.ldapUserDisplayName = event.target.value" />
<NcTextField
autocomplete="off"
:value="ldapConfigProxy.ldapUserDisplayName2"
:label="t('user_ldap', '2nd User Display Name Field')"
:helper-text="t('user_ldap', 'Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«.')"
@change.native="(event) => ldapConfigProxy.ldapUserDisplayName2 = event.target.value" />
@change="(event) => ldapConfigProxy.ldapUserDisplayName2 = event.target.value" />
<NcTextArea
:value="ldapConfigProxy.ldapBaseUsers"
:model-value="ldapConfigProxy.ldapBaseUsers"
:placeholder="t('user_ldap', 'One User Base DN per line')"
:label="t('user_ldap', 'Base User Tree')"
@change.native="(event) => ldapConfigProxy.ldapBaseUsers = event.target.value" />
@change="(event) => ldapConfigProxy.ldapBaseUsers = event.target.value" />
<NcTextArea
:value="ldapConfigProxy.ldapAttributesForUserSearch"
:model-value="ldapConfigProxy.ldapAttributesForUserSearch"
:placeholder="t('user_ldap', 'Optional; one attribute per line')"
:label="t('user_ldap', 'User Search Attributes')"
@change.native="(event) => ldapConfigProxy.ldapAttributesForUserSearch = event.target.value" />
@change="(event) => ldapConfigProxy.ldapAttributesForUserSearch = event.target.value" />
<NcCheckboxRadioSwitch
:checked="ldapConfigProxy.markRemnantsAsDisabled === '1'"
:model-value="ldapConfigProxy.markRemnantsAsDisabled === '1'"
:aria-label="t('user_ldap', 'When switched on, users imported from LDAP which are then missing will be disabled')"
@update:checked="ldapConfigProxy.markRemnantsAsDisabled = $event ? '1' : '0'">
@update:model-value="ldapConfigProxy.markRemnantsAsDisabled = $event ? '1' : '0'">
{{ t('user_ldap', 'Disable users missing from LDAP') }}
</NcCheckboxRadioSwitch>
@ -84,19 +84,19 @@
:value="ldapConfigProxy.ldapGroupDisplayName"
:label="t('user_ldap', 'Group Display Name Field')"
:title="t('user_ldap', 'The LDAP attribute to use to generate the groups\'s display name.')"
@change.native="(event) => ldapConfigProxy.ldapGroupDisplayName = event.target.value" />
@change="(event) => ldapConfigProxy.ldapGroupDisplayName = event.target.value" />
<NcTextArea
:value="ldapConfigProxy.ldapBaseGroups"
:model-value="ldapConfigProxy.ldapBaseGroups"
:placeholder="t('user_ldap', 'One Group Base DN per line')"
:label="t('user_ldap', 'Base Group Tree')"
@change.native="(event) => ldapConfigProxy.ldapBaseGroups = event.target.value" />
@change="(event) => ldapConfigProxy.ldapBaseGroups = event.target.value" />
<NcTextArea
:value="ldapConfigProxy.ldapAttributesForGroupSearch"
:model-value="ldapConfigProxy.ldapAttributesForGroupSearch"
:placeholder="t('user_ldap', 'Optional; one attribute per line')"
:label="t('user_ldap', 'Group Search Attributes')"
@change.native="(event) => ldapConfigProxy.ldapAttributesForGroupSearch = event.target.value" />
@change="(event) => ldapConfigProxy.ldapAttributesForGroupSearch = event.target.value" />
<NcSelect
v-model="ldapConfigProxy.ldapGroupMemberAssocAttr"
@ -115,12 +115,12 @@
:label="t('user_ldap', 'Dynamic Group Member URL')"
:value="ldapConfigProxy.ldapDynamicGroupMemberURL"
:helper-text="t('user_ldap', 'The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)')"
@change.native="(event) => ldapConfigProxy.ldapDynamicGroupMemberURL = event.target.value" />
@change="(event) => ldapConfigProxy.ldapDynamicGroupMemberURL = event.target.value" />
<NcCheckboxRadioSwitch
:checked="ldapConfigProxy.ldapNestedGroups === '1'"
:model-value="ldapConfigProxy.ldapNestedGroups === '1'"
:aria-label="t('user_ldap', 'When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)')"
@update:checked="ldapConfigProxy.ldapNestedGroups = $event ? '1' : '0'">
@update:model-value="ldapConfigProxy.ldapNestedGroups = $event ? '1' : '0'">
{{ t('user_ldap', 'Nested Groups') }}
</NcCheckboxRadioSwitch>
@ -129,12 +129,12 @@
:label="t('user_ldap', 'Paging chunksize')"
:value="ldapConfigProxy.ldapPagingSize"
:helper-text="t('user_ldap', 'Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)')"
@change.native="(event) => ldapConfigProxy.ldapPagingSize = event.target.value" />
@change="(event) => ldapConfigProxy.ldapPagingSize = event.target.value" />
<NcCheckboxRadioSwitch
:checked="ldapConfigProxy.turnOnPasswordChange === '1'"
:model-value="ldapConfigProxy.turnOnPasswordChange === '1'"
:aria-label="t('user_ldap', 'Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server.')"
@update:checked="ldapConfigProxy.turnOnPasswordChange = $event ? '1' : '0'">
@update:model-value="ldapConfigProxy.turnOnPasswordChange = $event ? '1' : '0'">
{{ t('user_ldap', 'Enable LDAP password changes per user') }}
</NcCheckboxRadioSwitch>
<span class="tablecell">
@ -146,7 +146,7 @@
:label="t('user_ldap', 'Default password policy DN')"
:value="ldapConfigProxy.ldapDefaultPPolicyDN"
:helper-text="t('user_ldap', 'The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling.')"
@change.native="(event) => ldapConfigProxy.ldapDefaultPPolicyDN = event.target.value" />
@change="(event) => ldapConfigProxy.ldapDefaultPPolicyDN = event.target.value" />
</details>
<details name="ldap-wizard__advanced__section" class="ldap-wizard__advanced__section">
@ -157,35 +157,35 @@
:value="ldapConfigProxy.ldapQuotaAttribute"
:label="t('user_ldap', 'Quota Field')"
:helper-text="t('user_ldap', 'Leave empty for user\'s default quota. Otherwise, specify an LDAP/AD attribute.')"
@change.native="(event) => ldapConfigProxy.ldapQuotaAttribute = event.target.value" />
@change="(event) => ldapConfigProxy.ldapQuotaAttribute = event.target.value" />
<NcTextField
autocomplete="off"
:value="ldapConfigProxy.ldapQuotaDefault"
:label="t('user_ldap', 'Quota Default')"
:helper-text="t('user_ldap', 'Override default quota for LDAP users who do not have a quota set in the Quota Field.')"
@change.native="(event) => ldapConfigProxy.ldapQuotaDefault = event.target.value" />
@change="(event) => ldapConfigProxy.ldapQuotaDefault = event.target.value" />
<NcTextField
autocomplete="off"
:value="ldapConfigProxy.ldapEmailAttribute"
:label="t('user_ldap', 'Email Field')"
:helper-text="t('user_ldap', 'Set the user\'s email from their LDAP attribute. Leave it empty for default behaviour.')"
@change.native="(event) => ldapConfigProxy.ldapEmailAttribute = event.target.value" />
@change="(event) => ldapConfigProxy.ldapEmailAttribute = event.target.value" />
<NcTextField
autocomplete="off"
:label="t('user_ldap', 'User Home Folder Naming Rule')"
:value="ldapConfigProxy.homeFolderNamingRule"
:helper-text="t('user_ldap', 'Leave empty for username (default). Otherwise, specify an LDAP/AD attribute.')"
@change.native="(event) => ldapConfigProxy.homeFolderNamingRule = event.target.value" />
@change="(event) => ldapConfigProxy.homeFolderNamingRule = event.target.value" />
<NcTextField
autocomplete="off"
:label="t('user_ldap', '`$home` Placeholder Field')"
:value="ldapConfigProxy.ldapExtStorageHomeAttribute"
:helper-text="t('user_ldap', '$home in an external storage configuration will be replaced with the value of the specified attribute')"
@change.native="(event) => ldapConfigProxy.ldapExtStorageHomeAttribute = event.target.value" />
@change="(event) => ldapConfigProxy.ldapExtStorageHomeAttribute = event.target.value" />
</details>
<details name="ldap-wizard__advanced__section" class="ldap-wizard__advanced__section">
@ -196,70 +196,70 @@
:label="t('user_ldap', 'Phone Field')"
:value="ldapConfigProxy.ldapAttributePhone"
:helper-text="t('user_ldap', 'User profile Phone will be set from the specified attribute')"
@change.native="(event) => ldapConfigProxy.ldapAttributePhone = event.target.value" />
@change="(event) => ldapConfigProxy.ldapAttributePhone = event.target.value" />
<NcTextField
autocomplete="off"
:label="t('user_ldap', 'Website Field')"
:value="ldapConfigProxy.ldapAttributeWebsite"
:helper-text="t('user_ldap', 'User profile Website will be set from the specified attribute')"
@change.native="(event) => ldapConfigProxy.ldapAttributeWebsite = event.target.value" />
@change="(event) => ldapConfigProxy.ldapAttributeWebsite = event.target.value" />
<NcTextField
autocomplete="off"
:label="t('user_ldap', 'Address Field')"
:value="ldapConfigProxy.ldapAttributeAddress"
:helper-text="t('user_ldap', 'User profile Address will be set from the specified attribute')"
@change.native="(event) => ldapConfigProxy.ldapAttributeAddress = event.target.value" />
@change="(event) => ldapConfigProxy.ldapAttributeAddress = event.target.value" />
<NcTextField
autocomplete="off"
:label="t('user_ldap', 'Twitter Field')"
:value="ldapConfigProxy.ldapAttributeTwitter"
:helper-text="t('user_ldap', 'User profile Twitter will be set from the specified attribute')"
@change.native="(event) => ldapConfigProxy.ldapAttributeTwitter = event.target.value" />
@change="(event) => ldapConfigProxy.ldapAttributeTwitter = event.target.value" />
<NcTextField
autocomplete="off"
:label="t('user_ldap', 'Fediverse Field')"
:value="ldapConfigProxy.ldapAttributeFediverse"
:helper-text="t('user_ldap', 'User profile Fediverse will be set from the specified attribute')"
@change.native="(event) => ldapConfigProxy.ldapAttributeFediverse = event.target.value" />
@change="(event) => ldapConfigProxy.ldapAttributeFediverse = event.target.value" />
<NcTextField
autocomplete="off"
:label="t('user_ldap', 'Organisation Field')"
:value="ldapConfigProxy.ldapAttributeOrganisation"
:helper-text="t('user_ldap', 'User profile Organisation will be set from the specified attribute')"
@change.native="(event) => ldapConfigProxy.ldapAttributeOrganisation = event.target.value" />
@change="(event) => ldapConfigProxy.ldapAttributeOrganisation = event.target.value" />
<NcTextField
autocomplete="off"
:label="t('user_ldap', 'Role Field')"
:value="ldapConfigProxy.ldapAttributeRole"
:helper-text="t('user_ldap', 'User profile Role will be set from the specified attribute')"
@change.native="(event) => ldapConfigProxy.ldapAttributeRole = event.target.value" />
@change="(event) => ldapConfigProxy.ldapAttributeRole = event.target.value" />
<NcTextField
autocomplete="off"
:label="t('user_ldap', 'Headline Field')"
:value="ldapConfigProxy.ldapAttributeHeadline"
:helper-text="t('user_ldap', 'User profile Headline will be set from the specified attribute')"
@change.native="(event) => ldapConfigProxy.ldapAttributeHeadline = event.target.value" />
@change="(event) => ldapConfigProxy.ldapAttributeHeadline = event.target.value" />
<NcTextField
autocomplete="off"
:label="t('user_ldap', 'Biography Field')"
:value="ldapConfigProxy.ldapAttributeBiography"
:helper-text="t('user_ldap', 'User profile Biography will be set from the specified attribute')"
@change.native="(event) => ldapConfigProxy.ldapAttributeBiography = event.target.value" />
@change="(event) => ldapConfigProxy.ldapAttributeBiography = event.target.value" />
<NcTextField
autocomplete="off"
:label="t('user_ldap', 'Birthdate Field')"
:value="ldapConfigProxy.ldapAttributeBirthDate"
:helper-text="t('user_ldap', 'User profile Date of birth will be set from the specified attribute')"
@change.native="(event) => ldapConfigProxy.ldapAttributeBirthDate = event.target.value" />
@change="(event) => ldapConfigProxy.ldapAttributeBirthDate = event.target.value" />
</details>
</fieldset>
</template>

View file

@ -14,8 +14,7 @@
autocomplete="off"
:label="t('user_ldap', 'Internal Username Attribute:')"
:value="ldapConfigProxy.ldapExpertUsernameAttr"
:label-outside="true"
@change.native="(event) => ldapConfigProxy.ldapExpertUsernameAttr = event.target.value" />
@change="(event) => ldapConfigProxy.ldapExpertUsernameAttr = event.target.value" />
</div>
<div class="ldap-wizard__expert__line">
@ -28,12 +27,12 @@
autocomplete="off"
:label="t('user_ldap', 'UUID Attribute for Users')"
:value="ldapConfigProxy.ldapExpertUUIDUserAttr"
@change.native="(event) => ldapConfigProxy.ldapExpertUUIDUserAttr = event.target.value" />
@change="(event) => ldapConfigProxy.ldapExpertUUIDUserAttr = event.target.value" />
<NcTextField
autocomplete="off"
:label="t('user_ldap', 'UUID Attribute for Groups')"
:value="ldapConfigProxy.ldapExpertUUIDGroupAttr"
@change.native="(event) => ldapConfigProxy.ldapExpertUUIDGroupAttr = event.target.value" />
@change="(event) => ldapConfigProxy.ldapExpertUUIDGroupAttr = event.target.value" />
</div>
</fieldset>
</template>

View file

@ -28,14 +28,14 @@
<div class="ldap-wizard__groups__line ldap-wizard__groups__groups-filter">
<NcCheckboxRadioSwitch
:checked="ldapConfigProxy.ldapGroupFilterMode === '1'"
@update:checked="toggleFilterMode">
:model-value="ldapConfigProxy.ldapGroupFilterMode === '1'"
@update:model-value="toggleFilterMode">
{{ t('user_ldap', 'Edit LDAP Query') }}
</NcCheckboxRadioSwitch>
<div v-if="ldapConfigProxy.ldapGroupFilterMode === '1'">
<NcTextArea
:value.sync="ldapConfigProxy.ldapGroupFilter"
v-model="ldapConfigProxy.ldapGroupFilter"
:placeholder="t('user_ldap', 'Edit LDAP Query')"
:helper-text="t('user_ldap', 'The filter specifies which LDAP groups shall have access to the {instanceName} instance.', { instanceName })" />
</div>
@ -96,10 +96,10 @@ const ldapGroupFilterGroups = computed({
*/
async function init() {
const response1 = await callWizard('determineGroupObjectClasses', props.configId)
groupObjectClasses.value = response1.options!.ldap_groupfilter_objectclass
groupObjectClasses.value = response1.options?.ldap_groupfilter_objectclass ?? []
const response2 = await callWizard('determineGroupsForGroups', props.configId)
groupGroups.value = response2.options!.ldap_groupfilter_groups
groupGroups.value = response2.options?.ldap_groupfilter_groups ?? []
}
init()
@ -110,7 +110,7 @@ init()
async function getGroupFilter() {
const response = await callWizard('getGroupFilter', props.configId)
// Not using ldapConfig to avoid triggering the save logic.
ldapConfigs.value[props.configId].ldapGroupFilter = response.changes!.ldap_group_filter as string
ldapConfigs.value[props.configId]!.ldapGroupFilter = (response.changes?.ldap_group_filter as string | undefined) ?? ''
}
/**

View file

@ -21,16 +21,16 @@
<div class="ldap-wizard__login__line ldap-wizard__login__user-login-filter">
<NcCheckboxRadioSwitch
:model-value="ldapLoginFilterMode"
@update:checked="toggleFilterMode">
@update:model-value="toggleFilterMode">
{{ t('user_ldap', 'Edit LDAP Query') }}
</NcCheckboxRadioSwitch>
<NcTextArea
v-if="ldapLoginFilterMode"
:value="ldapConfigProxy.ldapLoginFilter"
:model-value="ldapConfigProxy.ldapLoginFilter"
:placeholder="t('user_ldap', 'Edit LDAP Query')"
:helper-text="t('user_ldap', 'Defines the filter to apply, when login is attempted. `%%uid` replaces the username in the login action. Example: `uid=%%uid`')"
@change.native="(event) => ldapConfigProxy.ldapLoginFilter = event.target.value" />
@change="(event) => ldapConfigProxy.ldapLoginFilter = event.target.value" />
<div v-else>
<span>{{ t('user_ldap', 'LDAP Filter:') }}</span>
<code>{{ ldapConfigProxy.ldapLoginFilter }}</code>
@ -41,7 +41,7 @@
<NcTextField
v-model="testUsername"
:helper-text="t('user_ldap', 'Attempts to receive a DN for the given login name and the current login filter')"
:placeholder="t('user_ldap', 'Test Login name')"
:label="t('user_ldap', 'Test Login name')"
autocomplete="off" />
<NcButton
@ -90,7 +90,7 @@ const filteredLoginFilterOptions = computed(() => loginFilterOptions.value.filte
*/
async function init() {
const response = await callWizard('determineAttributes', props.configId)
loginFilterOptions.value = response.options!.ldap_loginfilter_attributes
loginFilterOptions.value = response.options?.ldap_loginfilter_attributes ?? []
}
init()
@ -102,7 +102,7 @@ async function getUserLoginFilter() {
if (ldapConfigProxy.value.ldapLoginFilterMode === '0') {
const response = await callWizard('getUserLoginFilter', props.configId)
// Not using ldapConfig to avoid triggering the save logic.
ldapConfigs.value[props.configId].ldapLoginFilter = response.changes!.ldap_login_filter as string
ldapConfigs.value[props.configId]!.ldapLoginFilter = (response.changes?.ldap_login_filter as string | undefined) ?? ''
}
}

View file

@ -6,10 +6,10 @@
<fieldset class="ldap-wizard__server">
<div class="ldap-wizard__server__line">
<NcCheckboxRadioSwitch
:checked="ldapConfigProxy.ldapConfigurationActive === '1'"
:model-value="ldapConfigProxy.ldapConfigurationActive === '1'"
type="switch"
:aria-label="t('user_ldap', 'When unchecked, this configuration will be skipped.')"
@update:checked="ldapConfigProxy.ldapConfigurationActive = $event ? '1' : '0'">
@update:model-value="ldapConfigProxy.ldapConfigurationActive = $event ? '1' : '0'">
{{ t('user_ldap', 'Configuration Active') }}
</NcCheckboxRadioSwitch>
@ -33,18 +33,20 @@
<div class="ldap-wizard__server__line">
<NcTextField
:value="ldapConfigProxy.ldapHost"
:model-value="ldapConfigProxy.ldapHost"
:helper-text="t('user_ldap', 'You can omit the protocol, unless you require SSL. If so, start with ldaps://')"
:placeholder="t('user_ldap', 'Host')"
:label="t('user_ldap', 'Host')"
:placeholder="t('user_ldap', 'ldaps://localhost')"
autocomplete="off"
@change.native="(event) => ldapConfigProxy.ldapHost = event.target.value" />
@change="(event) => ldapConfigProxy.ldapHost = event.target.value" />
<div class="ldap-wizard__server__host__port">
<NcTextField
:value="ldapConfigProxy.ldapPort"
:placeholder="t('user_ldap', 'Port')"
:model-value="ldapConfigProxy.ldapPort"
:label="t('user_ldap', 'Port')"
:placeholder="t('user_ldap', '389')"
type="number"
autocomplete="off"
@change.native="(event) => ldapConfigProxy.ldapPort = event.target.value" />
@change="(event) => ldapConfigProxy.ldapPort = event.target.value" />
<NcButton :disabled="loadingGuessPortAndTLS" @click="guessPortAndTLS">
{{ t('user_ldap', 'Detect Port') }}
</NcButton>
@ -54,8 +56,9 @@
<div class="ldap-wizard__server__line">
<NcTextField
v-model="localLdapAgentName"
:helper-text="t('user_ldap', 'The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty.')"
:placeholder="t('user_ldap', 'User DN')"
:helper-text="t('user_ldap', 'The DN of the client user with which the bind shall be done. For anonymous access, leave DN and Password empty.')"
:label="t('user_ldap', 'User DN')"
:placeholder="t('user_ldap', 'uid=agent,dc=example,dc=com')"
autocomplete="off" />
</div>
@ -64,7 +67,7 @@
v-model="localLdapAgentPassword"
type="password"
:helper-text="t('user_ldap', 'For anonymous access, leave DN and Password empty.')"
:placeholder="t('user_ldap', 'Password')"
:label="t('user_ldap', 'Password')"
autocomplete="off" />
<NcButton :disabled="!needsToSaveCredentials" @click="updateCredentials">
@ -75,10 +78,10 @@
<div class="ldap-wizard__server__line">
<NcTextArea
:label="t('user_ldap', 'Base DN')"
:value="ldapConfigProxy.ldapBase"
:model-value="ldapConfigProxy.ldapBase"
:placeholder="t('user_ldap', 'One Base DN per line')"
:helper-text="t('user_ldap', 'You can specify Base DN for users and groups in the Advanced tab')"
@change.native="(event) => ldapConfigProxy.ldapBase = event.target.value" />
@change="(event) => ldapConfigProxy.ldapBase = event.target.value" />
<NcButton :disabled="loadingGuessBaseDN" @click="guessBaseDN">
{{ t('user_ldap', 'Detect Base DN') }}

View file

@ -29,14 +29,14 @@
<div class="ldap-wizard__users__line ldap-wizard__users__user-filter">
<NcCheckboxRadioSwitch
:checked="ldapConfigProxy.ldapUserFilterMode === '1'"
@update:checked="toggleFilterMode">
:model-value="ldapConfigProxy.ldapUserFilterMode === '1'"
@update:model-value="toggleFilterMode">
{{ t('user_ldap', 'Edit LDAP Query') }}
</NcCheckboxRadioSwitch>
<div v-if="ldapConfigProxy.ldapUserFilterMode === '1'">
<NcTextArea
:value.sync="ldapConfigProxy.ldapUserFilter"
v-model="ldapConfigProxy.ldapUserFilter"
:placeholder="t('user_ldap', 'Edit LDAP Query')"
:helper-text="t('user_ldap', 'The filter specifies which LDAP users shall have access to the {instanceName} instance.', { instanceName })" />
</div>
@ -97,14 +97,14 @@ const ldapUserFilterGroups = computed({
*/
async function init() {
const response1 = await callWizard('determineUserObjectClasses', props.configId)
userObjectClasses.value = response1.options!.ldap_userfilter_objectclass
userObjectClasses.value = response1.options?.ldap_userfilter_objectclass ?? []
// Not using ldapConfig to avoid triggering the save logic.
ldapConfigs.value[props.configId].ldapUserFilterObjectclass = response1.changes!.ldap_userfilter_objectclass?.join(';') ?? ''
ldapConfigs.value[props.configId]!.ldapUserFilterObjectclass = (response1.changes?.ldap_userfilter_objectclass as string[] | undefined)?.join(';') ?? ''
const response2 = await callWizard('determineGroupsForUsers', props.configId)
userGroups.value = response2.options!.ldap_userfilter_groups
userGroups.value = response2.options?.ldap_userfilter_groups ?? []
// Not using ldapConfig to avoid triggering the save logic.
ldapConfigs.value[props.configId].ldapUserFilterGroups = response2.changes!.ldap_userfilter_groups?.join(';') ?? ''
ldapConfigs.value[props.configId]!.ldapUserFilterGroups = (response2.changes?.ldap_userfilter_groups as string[] | undefined)?.join(';') ?? ''
}
init()
@ -116,11 +116,11 @@ async function reloadFilters() {
if (ldapConfigProxy.value.ldapUserFilterMode === '0') {
const response1 = await callWizard('getUserListFilter', props.configId)
// Not using ldapConfig to avoid triggering the save logic.
ldapConfigs.value[props.configId].ldapUserFilter = response1.changes!.ldap_userlist_filter as string
ldapConfigs.value[props.configId]!.ldapUserFilter = (response1.changes?.ldap_userlist_filter as string | undefined) ?? ''
const response2 = await callWizard('getUserLoginFilter', props.configId)
// Not using ldapConfig to avoid triggering the save logic.
ldapConfigs.value[props.configId].ldapLoginFilter = response2.changes!.ldap_userlogin_filter as string
ldapConfigs.value[props.configId]!.ldapLoginFilter = (response2.changes?.ldap_userlogin_filter as string | undefined) ?? ''
}
}

View file

@ -1,20 +0,0 @@
import { getCSPNonce } from '@nextcloud/auth'
import { PiniaVuePlugin } from 'pinia'
/**
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import Vue from 'vue'
import LDAPSettingsApp from './LDAPSettingsApp.vue'
import { pinia } from './store/index.ts'
__webpack_nonce__ = getCSPNonce()
// Init Pinia store
Vue.use(PiniaVuePlugin)
const LDAPSettingsAppVue = Vue.extend(LDAPSettingsApp)
new LDAPSettingsAppVue({
name: 'LDAPSettingsApp',
pinia,
}).$mount('#content-ldap-settings')

View file

@ -74,7 +74,7 @@ export async function getConfig(configId: string): Promise<LDAPConfig> {
* @param configId
* @param config
*/
export async function updateConfig(configId: string, config: LDAPConfig): Promise<LDAPConfig> {
export async function updateConfig(configId: string, config: Partial<LDAPConfig>): Promise<LDAPConfig> {
const response = await axios.put(
generateOcsUrl('apps/user_ldap/api/v1/config/{configId}', { configId }),
{ configData: config },
@ -142,7 +142,7 @@ export async function clearMapping(subject: 'user' | 'group') {
{ subject },
) as AxiosResponse<OCSResponse>
logger.debug('Cleared mapping', { subject, params, response })
logger.debug('Cleared mapping', { subject, response })
showSuccess(t('user_ldap', 'Mapping cleared'))
return true
} catch (error) {

View file

@ -0,0 +1,11 @@
/**
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { createApp } from 'vue'
import LDAPSettingsApp from './LDAPSettingsApp.vue'
import { pinia } from './store/index.ts'
const app = createApp(LDAPSettingsApp)
app.use(pinia)
app.mount('#content-ldap-settings')

View file

@ -7,13 +7,13 @@ import type { LDAPConfig } from '../models/index.ts'
import { loadState } from '@nextcloud/initial-state'
import { defineStore } from 'pinia'
import Vue, { computed, ref } from 'vue'
import { computed, ref } from 'vue'
import { copyConfig, createConfig, deleteConfig, getConfig, updateConfig } from '../services/ldapConfigService.ts'
export const useLDAPConfigsStore = defineStore('ldap-configs', () => {
const ldapConfigs = ref(loadState('user_ldap', 'ldapConfigs') as Record<string, LDAPConfig>)
const selectedConfigId = ref<string>(Object.keys(ldapConfigs.value)[0])
const selectedConfig = computed(() => ldapConfigs.value[selectedConfigId.value])
const selectedConfigId = ref<string | undefined>(Object.keys(ldapConfigs.value)[0])
const selectedConfig = computed(() => selectedConfigId.value === undefined ? undefined : ldapConfigs.value[selectedConfigId.value])
const updatingConfig = ref(0)
/**
@ -22,6 +22,10 @@ export const useLDAPConfigsStore = defineStore('ldap-configs', () => {
* @param postSetHooks
*/
function getConfigProxy<J>(configId: string, postSetHooks: Partial<Record<keyof LDAPConfig, (value: J) => void>> = {}) {
if (ldapConfigs.value[configId] === undefined) {
throw new Error(`Config with id ${configId} does not exist`)
}
return new Proxy(ldapConfigs.value[configId], {
get(target, property) {
return target[property]
@ -49,7 +53,7 @@ export const useLDAPConfigsStore = defineStore('ldap-configs', () => {
*/
async function create() {
const configId = await createConfig()
Vue.set(ldapConfigs.value, configId, await getConfig(configId))
ldapConfigs.value[configId] = await getConfig(configId)
selectedConfigId.value = configId
return configId
}
@ -59,8 +63,13 @@ export const useLDAPConfigsStore = defineStore('ldap-configs', () => {
* @param fromConfigId
*/
async function _copyConfig(fromConfigId: string) {
if (ldapConfigs.value[fromConfigId] === undefined) {
throw new Error(`Config with id ${fromConfigId} does not exist`)
}
const configId = await copyConfig(fromConfigId)
Vue.set(ldapConfigs.value, configId, { ...ldapConfigs.value[fromConfigId] })
ldapConfigs.value[configId] = { ...ldapConfigs.value[fromConfigId] }
selectedConfigId.value = configId
return configId
}
@ -72,7 +81,7 @@ export const useLDAPConfigsStore = defineStore('ldap-configs', () => {
async function removeConfig(configId: string) {
const result = await deleteConfig(configId)
if (result === true) {
Vue.delete(ldapConfigs.value, configId)
delete ldapConfigs.value[configId]
}
selectedConfigId.value = Object.keys(ldapConfigs.value)[0] ?? await create()

View file

@ -42,8 +42,8 @@
<NcCheckboxRadioSwitch
v-for="(tabLabel, tabId) in tabs"
:key="tabId"
v-model="selectedTab"
:button-variant="true"
:checked.sync="selectedTab"
:value="tabId"
type="radio"
:disabled="tabId !== 'server' && !selectedConfigHasServerInfo"

View file

@ -1,19 +0,0 @@
<?php
/**
* SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2013-2017 ownCloud, Inc.
* SPDX-License-Identifier: AGPL-3.0-only
*/
?>
<div class="ldapSettingControls">
<button type="button" class="ldap_action_test_connection" name="ldap_action_test_connection">
<?php p($l->t('Test Configuration'));?>
</button>
<a href="<?php p(link_to_docs('admin-ldap')); ?>"
target="_blank" rel="noreferrer noopener">
<img src="<?php print_unescaped(image_path('core', 'actions/info.svg')); ?>"
style="height:1.75ex" />
<?php p($l->t('Help'));?>
</a>
</div>

View file

@ -1,83 +0,0 @@
<?php
/**
* SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2013-2015 ownCloud, Inc.
* SPDX-License-Identifier: AGPL-3.0-only
*/
?>
<fieldset id="ldapWizard4">
<div>
<p>
<?php p($l->t('Groups meeting these criteria are available in %s:', [$theme->getName()]));?>
</p>
<p>
<label for="ldap_groupfilter_objectclass">
<?php p($l->t('Only these object classes:'));?>
</label>
<select id="ldap_groupfilter_objectclass" multiple="multiple"
name="ldap_groupfilter_objectclass" class="multiSelectPlugin">
</select>
</p>
<p>
<label for="ldap_groupfilter_groups">
<?php p($l->t('Only from these groups:'));?>
</label>
<input type="text" class="ldapManyGroupsSupport ldapManyGroupsSearch hidden" placeholder="<?php p($l->t('Search groups'));?>" />
<select id="ldap_groupfilter_groups" multiple="multiple"
name="ldap_groupfilter_groups" class="multiSelectPlugin">
</select>
</p>
<p class="ldapManyGroupsSupport hidden">
<label></label>
<select class="ldapGroupList ldapGroupListAvailable" multiple="multiple"
aria-describedby="ldapGroupListAvailable_instructions"
title="<?php p($l->t('Available groups'));?>"></select>
<p class="hidden-visually" id="ldapGroupListAvailable_instructions">
<?php p($l->t('Available groups'));?>
</p>
<span class="buttonSpan">
<button class="ldapGroupListSelect" type="button">&gt;</button><br/>
<button class="ldapGroupListDeselect" type="button">&lt;</button>
</span>
<select class="ldapGroupList ldapGroupListSelected" multiple="multiple"
aria-describedby="ldapGroupListSelected_instructions"
title="<?php p($l->t('Selected groups'));?>"></select>
<p class="hidden-visually" id="ldapGroupListSelected_instructions">
<?php p($l->t('Selected groups'));?>
</p>
</p>
<p>
<label><a id='toggleRawGroupFilter' class='ldapToggle'> <?php p($l->t('Edit LDAP Query'));?></a></label>
</p>
<p id="ldapReadOnlyGroupFilterContainer" class="hidden ldapReadOnlyFilterContainer">
<label><?php p($l->t('LDAP Filter:'));?></label>
<span class="ldapFilterReadOnlyElement ldapInputColElement"></span>
</p>
<p id="rawGroupFilterContainer" class="invisible">
<textarea type="text" id="ldap_group_filter" name="ldap_group_filter"
placeholder="<?php p($l->t('Edit LDAP Query'));?>"
aria-describedby="rawGroupFilterContainer_instructions"
title="<?php p($l->t('The filter specifies which LDAP groups shall have access to the %s instance.', [$theme->getName()]));?>">
</textarea>
<p class="hidden-visually" id="rawGroupFilterContainer_instructions">
<?php p($l->t('The filter specifies which LDAP groups shall have access to the %s instance.', [$theme->getName()]));?>
</p>
</p>
<p>
<div class="ldapWizardInfo invisible">&nbsp;</div>
</p>
<p class="ldap_count">
<button class="ldapGetEntryCount ldapGetGroupCount" name="ldapGetEntryCount" type="button">
<?php p($l->t('Verify settings and count the groups'));?>
</button>
<span id="ldap_group_count"></span>
</p>
<?php print_unescaped($_['wizardControls']); ?>
</div>
</fieldset>

View file

@ -1,85 +0,0 @@
<?php
/**
* SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2013-2017 ownCloud, Inc.
* SPDX-License-Identifier: AGPL-3.0-only
*/
?>
<fieldset id="ldapWizard3">
<div>
<p>
<?php p($l->t('When logging in, %s will find the user based on the following attributes:', [$theme->getName()]));?>
</p>
<p>
<label for="ldap_loginfilter_username">
<?php p($l->t('LDAP/AD Username:'));?>
</label>
<input type="checkbox" id="ldap_loginfilter_username"
aria-describedby="ldap_loginfilter_username_instructions"
title="<?php p($l->t('Allows login against the LDAP/AD username, which is either "uid" or "sAMAccountName" and will be detected.'));?>"
name="ldap_loginfilter_username" value="1" />
<p class="hidden-visually" id="ldap_loginfilter_username_instructions">
<?php p($l->t('Allows login against the LDAP/AD username, which is either "uid" or "sAMAccountName" and will be detected.'));?>
</p>
</p>
<p>
<label for="ldap_loginfilter_email">
<?php p($l->t('LDAP/AD Email Address:'));?>
</label>
<input type="checkbox" id="ldap_loginfilter_email"
title="<?php p($l->t('Allows login against an email attribute. "mail" and "mailPrimaryAddress" allowed.'));?>"
aria-describedby="ldap_loginfilter_email_instructions"
name="ldap_loginfilter_email" value="1" />
<p class="hidden-visually" id="ldap_loginfilter_email_instructions">
<?php p($l->t('Allows login against an email attribute. "mail" and "mailPrimaryAddress" allowed.'));?>
</p>
</p>
<p>
<label for="ldap_loginfilter_attributes">
<?php p($l->t('Other Attributes:'));?>
</label>
<select id="ldap_loginfilter_attributes" multiple="multiple"
name="ldap_loginfilter_attributes" class="multiSelectPlugin">
</select>
</p>
<p>
<label><a id='toggleRawLoginFilter' class='ldapToggle'> <?php p($l->t('Edit LDAP Query'));?></a></label>
</p>
<p id="ldapReadOnlyLoginFilterContainer" class="hidden ldapReadOnlyFilterContainer">
<label><?php p($l->t('LDAP Filter:'));?></label>
<span class="ldapFilterReadOnlyElement ldapInputColElement"></span>
</p>
<p id="rawLoginFilterContainer" class="invisible">
<textarea type="text" id="ldap_login_filter" name="ldap_login_filter"
class="ldapFilterInputElement"
placeholder="<?php p($l->t('Edit LDAP Query'));?>"
aria-describedby="ldap_login_filter_instructions"
title="<?php p($l->t('Defines the filter to apply, when login is attempted. "%%uid" replaces the username in the login action. Example: "uid=%%uid"'));?>">
</textarea>
<p class="hidden-visually" id="ldap_login_filter_instructions">
<?php p($l->t('Defines the filter to apply, when login is attempted. "%%uid" replaces the username in the login action. Example: "uid=%%uid"'));?>
</p>
</p>
<p>
<div class="ldapWizardInfo invisible">&nbsp;</div>
</p>
<p class="ldap_verify">
<input type="text" id="ldap_test_loginname" name="ldap_test_loginname"
placeholder="<?php p($l->t('Test Loginname'));?>"
class="ldapVerifyInput"
aria-describedby="ldap_test_loginname_instructions"
title="<?php p($l->t('Attempts to receive a DN for the given loginname and the current login filter'));?>"/>
<p class="hidden-visually" id="ldap_test_loginname_instructions">
<?php p($l->t('Attempts to receive a DN for the given loginname and the current login filter'));?>
</p>
<button class="ldapVerifyLoginName" name="ldapTestLoginSettings" type="button" disabled="disabled">
<?php p($l->t('Verify settings'));?>
</button>
</p>
<?php print_unescaped($_['wizardControls']); ?>
</div>
</fieldset>

View file

@ -1,137 +0,0 @@
<?php
/**
* SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2013-2017 ownCloud, Inc.
* SPDX-License-Identifier: AGPL-3.0-only
*/
?>
<fieldset id="ldapWizard1">
<p>
<select id="ldap_serverconfig_chooser" name="ldap_serverconfig_chooser">
<?php
$i = 1;
$sel = ' selected';
foreach ($_['serverConfigurationPrefixes'] as $prefix) {
?>
<option value="<?php p($prefix); ?>"<?php p($sel);
$sel = ''; ?>><?php p($l->t('%s. Server:', [$i++])); ?> <?php p(' ' . $_['serverConfigurationHosts'][$prefix]); ?></option>
<?php
}
?>
</select>
<button type="button" id="ldap_action_add_configuration"
aria-describedby="ldap_action_add_configuration_instructions"
name="ldap_action_add_configuration" class="icon-add icon-default-style"
title="<?php p($l->t('Add a new configuration'));?>">&nbsp;</button>
<p class="hidden-visually" id="ldap_action_add_configuration_instructions">
<?php p($l->t('Add a new configuration'));?>
</p>
<button type="button" id="ldap_action_copy_configuration"
name="ldap_action_copy_configuration"
aria-describedby="ldap_action_copy_configuration_instructions"
class="ldapIconCopy icon-default-style"
title="<?php p($l->t('Copy current configuration into new directory binding'));?>">&nbsp;</button>
<p class="hidden-visually" id="ldap_action_copy_configuration_instructions">
<?php p($l->t('Copy current configuration into new directory binding'));?>
</p>
<button type="button" id="ldap_action_delete_configuration"
aria-describedby="ldap_action_delete_configuration_instructions"
name="ldap_action_delete_configuration" class="icon-delete icon-default-style"
title="<?php p($l->t('Delete the current configuration'));?>">&nbsp;</button>
<p class="hidden-visually" id="ldap_action_delete_configuration_instructions">
<?php p($l->t('Delete the current configuration'));?>
</p>
</p>
<div class="hostPortCombinator">
<div class="tablerow">
<div class="tablecell">
<div class="table">
<input type="text" class="host" id="ldap_host"
name="ldap_host"
aria-describedby="ldap_host_instructions"
placeholder="<?php p($l->t('Host'));?>"
title="<?php p($l->t('You can omit the protocol, unless you require SSL. If so, start with ldaps://'));?>"
/>
<p class="hidden-visually" id="ldap_host_instructions">
<?php p($l->t('You can omit the protocol, unless you require SSL. If so, start with ldaps://'));?>
</p>
<span class="hostPortCombinatorSpan">
<input type="number" id="ldap_port" name="ldap_port"
placeholder="<?php p($l->t('Port'));?>" />
<button class="ldapDetectPort" name="ldapDetectPort" type="button">
<?php p($l->t('Detect Port'));?>
</button>
</span>
</div>
</div>
</div>
<div class="tablerow">&nbsp;</div>
<div class="tablerow">
<input type="text" id="ldap_dn" name="ldap_dn"
class="tablecell"
aria-describedby="ldap_dn_instructions"
placeholder="<?php p($l->t('User DN'));?>" autocomplete="off"
title="<?php p($l->t('The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty.'));?>"
/>
<p class="hidden-visually" id="ldap_dn_instructions">
<?php p($l->t('The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty.'));?>
</p>
</div>
<div class="tablerow">
<input type="password" id="ldap_agent_password"
class="tablecell" name="ldap_agent_password"
aria-describedby="ldap_agent_password_instructions"
placeholder="<?php p($l->t('Password'));?>" autocomplete="off"
title="<?php p($l->t('For anonymous access, leave DN and Password empty.'));?>"
/>
<p class="hidden-visually" id="ldap_agent_password_instructions">
<?php p($l->t('For anonymous access, leave DN and Password empty.'));?>
</p>
<button class="ldapSaveAgentCredentials" name="ldapSaveAgentCredentials" type="button">
<?php p($l->t('Save Credentials'));?>
</button>
</div>
<div class="tablerow">&nbsp;</div>
<div class="tablerow">
<textarea id="ldap_base" name="ldap_base"
class="tablecell"
aria-describedby="ldap_base_instructions"
placeholder="<?php p($l->t('One Base DN per line'));?>"
title="<?php p($l->t('You can specify Base DN for users and groups in the Advanced tab'));?>">
</textarea>
<p class="hidden-visually" id="ldap_base_instructions">
<?php p($l->t('You can specify Base DN for users and groups in the Advanced tab'));?>
</p>
<button class="ldapDetectBase" name="ldapDetectBase" type="button">
<?php p($l->t('Detect Base DN'));?>
</button>
<button class="ldapTestBase" name="ldapTestBase" type="button">
<?php p($l->t('Test Base DN'));?>
</button>
</div>
<div class="tablerow left">
<input type="checkbox" id="ldap_experienced_admin" value="1"
name="ldap_experienced_admin" class="tablecell"
aria-describedby="ldap_experienced_admin_instructions"
title="<?php p($l->t('Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge.'));?>"
/>
<p class="hidden-visually" id="ldap_experienced_admin_instructions">
<?php p($l->t('Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge.'));?>
</p>
<label for="ldap_experienced_admin" class="tablecell">
<?php p($l->t('Manually enter LDAP filters (recommended for large directories)'));?>
</label>
</div>
<div class="tablerow">
<div class="tablecell ldapWizardInfo invisible">&nbsp;
</div>
</div>
</div>
<?php print_unescaped($_['wizardControls']); ?>
</fieldset>

View file

@ -1,86 +0,0 @@
<?php
/**
* SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2013-2016 ownCloud, Inc.
* SPDX-License-Identifier: AGPL-3.0-only
*/
?>
<fieldset id="ldapWizard2">
<div>
<p>
<?php p($l->t('Listing and searching for users is constrained by these criteria:'));?>
</p>
<p>
<label for="ldap_userfilter_objectclass">
<?php p($l->t('Only these object classes:'));?>
</label>
<select id="ldap_userfilter_objectclass" multiple="multiple"
name="ldap_userfilter_objectclass" class="multiSelectPlugin">
</select>
</p>
<p>
<label></label>
<span class="ldapInputColElement"><?php p($l->t('The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin.'));?></span>
</p>
<p>
<label for="ldap_userfilter_groups">
<?php p($l->t('Only from these groups:'));?>
</label>
<input type="text" class="ldapManyGroupsSupport ldapManyGroupsSearch hidden" placeholder="<?php p($l->t('Search groups'));?>" />
<select id="ldap_userfilter_groups" multiple="multiple"
name="ldap_userfilter_groups" class="multiSelectPlugin">
</select>
</p>
<p class="ldapManyGroupsSupport hidden">
<label></label>
<select class="ldapGroupList ldapGroupListAvailable" multiple="multiple"
aria-describedby="ldapGroupListAvailable_instructions"
title="<?php p($l->t('Available groups'));?>"></select>
<p class="hidden-visually" id="ldapGroupListAvailable_instructions">
<?php p($l->t('Available groups'));?>
</p>
<span class="buttonSpan">
<button class="ldapGroupListSelect" type="button">&gt;</button><br/>
<button class="ldapGroupListDeselect" type="button">&lt;</button>
</span>
<select class="ldapGroupList ldapGroupListSelected" multiple="multiple"
aria-describedby="ldapGroupListSelected_instructions"
title="<?php p($l->t('Selected groups'));?>"></select>
<p class="hidden-visually" id="ldapGroupListSelected_instructions">
<?php p($l->t('Selected groups'));?>
</p>
</p>
<p>
<label><a id='toggleRawUserFilter' class='ldapToggle'> <?php p($l->t('Edit LDAP Query'));?></a></label>
</p>
<p id="ldapReadOnlyUserFilterContainer" class="hidden ldapReadOnlyFilterContainer">
<label><?php p($l->t('LDAP Filter:'));?></label>
<span class="ldapFilterReadOnlyElement ldapInputColElement"></span>
</p>
<p id="rawUserFilterContainer">
<textarea type="text" id="ldap_userlist_filter" name="ldap_userlist_filter"
class="ldapFilterInputElement"
placeholder="<?php p($l->t('Edit LDAP Query'));?>"
aria-describedby="ldap_userlist_filter_instructions"
title="<?php p($l->t('The filter specifies which LDAP users shall have access to the %s instance.', [$theme->getName()]));?>">
</textarea>
<p class="hidden-visually" id="ldap_userlist_filter_instructions">
<?php p($l->t('The filter specifies which LDAP users shall have access to the %s instance.', [$theme->getName()]));?>
</p>
</p>
<p>
<div class="ldapWizardInfo invisible">&nbsp;</div>
</p>
<p class="ldap_count">
<button class="ldapGetEntryCount ldapGetUserCount" name="ldapGetEntryCount" type="button">
<?php p($l->t('Verify settings and count users'));?>
</button>
<span id="ldap_user_count"></span>
</p>
<?php print_unescaped($_['wizardControls']); ?>
</div>
</fieldset>

View file

@ -1,25 +0,0 @@
<?php
/**
* SPDX-FileCopyrightText: 2017-2022 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2013-2017 ownCloud, Inc.
* SPDX-License-Identifier: AGPL-3.0-only
*/
?>
<div class="ldapWizardControls">
<span class="ldap_saving hidden"><?php p($l->t('Saving'));?> <img class="wizSpinner" src="<?php p(image_path('core', 'loading.gif')); ?>"/></span>
<span class="ldap_config_state_indicator"></span> <span class="ldap_config_state_indicator_sign"></span>
<button class="ldap_action_back invisible" name="ldap_action_back"
type="button">
<?php p($l->t('Back'));?>
</button>
<button class="ldap_action_continue primary" name="ldap_action_continue" type="button">
<?php p($l->t('Continue'));?>
</button>
<a href="<?php p(link_to_docs('admin-ldap')); ?>"
target="_blank" rel="noreferrer noopener">
<img src="<?php print_unescaped(image_path('core', 'actions/info.svg')); ?>"
style="height:1.75ex" />
<span class="ldap_grey"><?php p($l->t('Help'));?></span>
</a>
</div>

View file

@ -6,7 +6,6 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
\OCP\Util::addScript('user_ldap', 'main', 'core');
?>
<div id="content-ldap-settings"></div>

View file

@ -41,14 +41,6 @@ class AdminTest extends TestCase {
}
public function testGetForm(): void {
$prefixes = ['s01'];
$hosts = ['s01' => ''];
$wControls = $this->templateManager->getTemplate('user_ldap', 'part.wizardcontrols');
$wControls = $wControls->fetchPage();
$sControls = $this->templateManager->getTemplate('user_ldap', 'part.settingcontrols');
$sControls = $sControls->fetchPage();
$parameters = [];
// assign default values

View file

@ -100,9 +100,6 @@ module.exports = {
updatenotification: path.join(__dirname, 'apps/updatenotification/src', 'updatenotification.js'),
'update-notification-legacy': path.join(__dirname, 'apps/updatenotification/src', 'update-notification-legacy.ts'),
},
user_ldap: {
main: path.join(__dirname, 'apps/user_ldap/src', 'main.js'),
},
user_status: {
menu: path.join(__dirname, 'apps/user_status/src', 'menu.js'),
},

View file

@ -24,6 +24,9 @@ const modules = {
twofactor_backupcodes: {
'settings-personal': resolve(import.meta.dirname, 'apps/twofactor_backupcodes/src', 'settings-personal.ts'),
},
user_ldap: {
'settings-admin': resolve(import.meta.dirname, 'apps/user_ldap/src', 'settings-admin.ts'),
},
}
// convert modules to modules entries prefied with the app id

2
dist/1078-1078.js vendored Normal file

File diff suppressed because one or more lines are too long

159
dist/1078-1078.js.license vendored Normal file
View file

@ -0,0 +1,159 @@
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: AGPL-3.0-or-later
SPDX-License-Identifier: (MPL-2.0 OR Apache-2.0)
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: T. Jameson Little <t.jameson.little@gmail.com>
SPDX-FileCopyrightText: Roman Shtylman <shtylman@gmail.com>
SPDX-FileCopyrightText: Paul Vorbach <paul@vorba.ch> (http://paul.vorba.ch)
SPDX-FileCopyrightText: Paul Vorbach <paul@vorb.de> (http://vorb.de)
SPDX-FileCopyrightText: Nextcloud GmbH and Nextcloud contributors
SPDX-FileCopyrightText: Matt Zabriskie
SPDX-FileCopyrightText: Jeff Sagal <sagalbot@gmail.com>
SPDX-FileCopyrightText: Jacob Clevenger<https://github.com/wheatjs>
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: Anthony Fu <https://github.com/antfu>
SPDX-FileCopyrightText: Anthony Fu <anthonyfu117@hotmail.com>
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
- @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.2
- 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.2
- license: GPL-3.0-or-later
- @nextcloud/router
- version: 3.0.1
- license: GPL-3.0-or-later
- @nextcloud/vue-select
- version: 3.26.0
- license: MIT
- @nextcloud/vue
- version: 8.34.0
- license: AGPL-3.0-or-later
- @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
- charenc
- version: 0.0.2
- license: BSD-3-Clause
- crypt
- version: 0.0.2
- license: BSD-3-Clause
- css-loader
- version: 7.1.2
- license: MIT
- debounce
- version: 2.2.0
- license: MIT
- dompurify
- version: 3.3.0
- license: (MPL-2.0 OR Apache-2.0)
- escape-html
- version: 1.0.3
- license: MIT
- floating-vue
- version: 1.0.0-beta.19
- license: MIT
- focus-trap
- version: 7.6.6
- license: MIT
- ieee754
- version: 1.2.1
- license: BSD-3-Clause
- is-buffer
- version: 1.1.6
- license: MIT
- md5
- version: 2.3.0
- license: BSD-3-Clause
- buffer
- version: 6.0.3
- license: MIT
- process
- version: 0.11.10
- license: MIT
- striptags
- version: 3.2.0
- license: MIT
- style-loader
- version: 4.0.0
- license: MIT
- tabbable
- version: 6.3.0
- license: MIT
- unist-builder
- version: 4.0.0
- license: MIT
- unist-util-is
- version: 6.0.0
- license: MIT
- unist-util-visit-parents
- version: 6.0.1
- license: MIT
- unist-util-visit
- version: 5.0.0
- license: MIT
- vue-demi
- version: 0.14.10
- license: MIT
- vue
- version: 2.7.16
- license: MIT

1
dist/1078-1078.js.map vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/1078-1078.js.map.license vendored Symbolic link
View file

@ -0,0 +1 @@
1078-1078.js.license

2
dist/23-23.js vendored

File diff suppressed because one or more lines are too long

1
dist/23-23.js.map vendored

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
23-23.js.license

2
dist/2562-2562.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/2562-2562.js.map vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/2562-2562.js.map.license vendored Symbolic link
View file

@ -0,0 +1 @@
2562-2562.js.license

2
dist/3334-3334.js vendored Normal file

File diff suppressed because one or more lines are too long

155
dist/3334-3334.js.license vendored Normal file
View file

@ -0,0 +1,155 @@
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: AGPL-3.0-or-later
SPDX-License-Identifier: (MPL-2.0 OR Apache-2.0)
SPDX-FileCopyrightText: escape-html developers
SPDX-FileCopyrightText: atomiks
SPDX-FileCopyrightText: Tobias Koppers @sokra
SPDX-FileCopyrightText: Titus Wormer <tituswormer@gmail.com> (https://wooorm.com)
SPDX-FileCopyrightText: T. Jameson Little <t.jameson.little@gmail.com>
SPDX-FileCopyrightText: Roman Shtylman <shtylman@gmail.com>
SPDX-FileCopyrightText: Paul Vorbach <paul@vorba.ch> (http://paul.vorba.ch)
SPDX-FileCopyrightText: Paul Vorbach <paul@vorb.de> (http://vorb.de)
SPDX-FileCopyrightText: Nextcloud GmbH and Nextcloud contributors
SPDX-FileCopyrightText: Matt Zabriskie
SPDX-FileCopyrightText: Jeff Sagal <sagalbot@gmail.com>
SPDX-FileCopyrightText: Jacob Clevenger<https://github.com/wheatjs>
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: Anthony Fu <https://github.com/antfu>
SPDX-FileCopyrightText: Anthony Fu <anthonyfu117@hotmail.com>
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
- @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.2
- 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.2
- license: GPL-3.0-or-later
- @nextcloud/router
- version: 3.0.1
- license: GPL-3.0-or-later
- @nextcloud/vue-select
- version: 3.26.0
- license: MIT
- @nextcloud/vue
- version: 8.34.0
- license: AGPL-3.0-or-later
- @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
- charenc
- version: 0.0.2
- license: BSD-3-Clause
- crypt
- version: 0.0.2
- license: BSD-3-Clause
- css-loader
- version: 7.1.2
- license: MIT
- dompurify
- version: 3.3.0
- license: (MPL-2.0 OR Apache-2.0)
- escape-html
- version: 1.0.3
- license: MIT
- floating-vue
- version: 1.0.0-beta.19
- license: MIT
- focus-trap
- version: 7.6.6
- license: MIT
- ieee754
- version: 1.2.1
- license: BSD-3-Clause
- is-buffer
- version: 1.1.6
- license: MIT
- md5
- version: 2.3.0
- license: BSD-3-Clause
- buffer
- version: 6.0.3
- license: MIT
- process
- version: 0.11.10
- license: MIT
- striptags
- version: 3.2.0
- license: MIT
- style-loader
- version: 4.0.0
- license: MIT
- tabbable
- version: 6.3.0
- license: MIT
- unist-builder
- version: 4.0.0
- license: MIT
- unist-util-is
- version: 6.0.0
- license: MIT
- unist-util-visit-parents
- version: 6.0.1
- license: MIT
- unist-util-visit
- version: 5.0.0
- license: MIT
- vue-demi
- version: 0.14.10
- license: MIT
- vue
- version: 2.7.16
- license: MIT

1
dist/3334-3334.js.map vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/3334-3334.js.map.license vendored Symbolic link
View file

@ -0,0 +1 @@
3334-3334.js.license

4
dist/4743-4743.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

4
dist/5258-5258.js vendored
View file

@ -1,2 +1,2 @@
"use strict";(globalThis.webpackChunknextcloud_ui_legacy=globalThis.webpackChunknextcloud_ui_legacy||[]).push([[5258],{16343:(e,t,n)=>{n.d(t,{a:()=>r,e:()=>i});var c=n(80474),u=n(43850),a=n(24715);const l=(0,c.c0)("nextcloud-vue").persist(!0).build();let o;function i(e,t=10){o||(o=new u.EmojiIndex(a));const n=function(){const e=Number.parseInt(l.getItem("NcEmojiPicker::currentSkinTone")??"1");return Math.min(Math.max(e,1),6)}();let c;return e?(c=o.search(`:${e}`,t),c.length<t&&(c=c.concat(o.search(e,t-c.length)))):c=u.frequently.get(t).map(e=>o.emoji(e))||[],c.map(e=>e.getSkin(n))}function r(e){u.frequently.add(e)}},95528:(e,t,n)=>{n.r(t),n.d(t,{NcAutoCompleteResult:()=>u.N,NcMentionBubble:()=>c.N,default:()=>u.a});var c=n(36079),u=n(4943)}}]);
//# sourceMappingURL=5258-5258.js.map?v=47cf0b0b84868571e578
"use strict";(globalThis.webpackChunknextcloud_ui_legacy=globalThis.webpackChunknextcloud_ui_legacy||[]).push([[5258],{16343:(e,t,n)=>{n.d(t,{a:()=>r,e:()=>i});var c=n(80474),u=n(43850),a=n(24715);const l=(0,c.c0)("nextcloud-vue").persist(!0).build();let o;function i(e,t=10){o||(o=new u.EmojiIndex(a));const n=function(){const e=Number.parseInt(l.getItem("NcEmojiPicker::currentSkinTone")??"1");return Math.min(Math.max(e,1),6)}();let c;return e?(c=o.search(`:${e}`,t),c.length<t&&(c=c.concat(o.search(e,t-c.length)))):c=u.frequently.get(t).map(e=>o.emoji(e))||[],c.map(e=>e.getSkin(n))}function r(e){u.frequently.add(e)}},95528:(e,t,n)=>{n.r(t),n.d(t,{NcAutoCompleteResult:()=>u.N,NcMentionBubble:()=>c.N,default:()=>u.a});var c=n(36079),u=n(18154)}}]);
//# sourceMappingURL=5258-5258.js.map?v=0f6571662152e8883015

View file

@ -16,7 +16,6 @@ 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
@ -125,9 +124,6 @@ This file is generated from multiple sources. Included packages:
- base64-js
- version: 1.5.1
- license: MIT
- char-regex
- version: 2.0.2
- license: MIT
- charenc
- version: 0.0.2
- license: BSD-3-Clause
@ -302,9 +298,6 @@ This file is generated from multiple sources. Included packages:
- space-separated-tokens
- version: 2.0.2
- license: MIT
- strip-ansi
- version: 7.1.2
- license: MIT
- striptags
- version: 3.2.0
- license: MIT

View file

@ -1 +1 @@
{"version":3,"file":"5258-5258.js?v=47cf0b0b84868571e578","mappings":"qMAGA,MAAMA,GAAU,QAAW,iBAAiBC,SAAQ,GAAMC,QAC1D,IAAIC,EAUJ,SAASC,EAAYC,EAAOC,EAAa,IAClCH,IACHA,EAAa,IAAI,EAAAI,WAAW,IAE9B,MAAMC,EAeR,WACE,MAAMC,EAAWC,OAAOC,SAASX,EAAQY,QAAQ,mCAAqC,KACtF,OAAOC,KAAKC,IACVD,KAAKE,IACHN,EACA,GAGF,EAGJ,CA1B0BO,GACxB,IAAIC,EASJ,OARIZ,GACFY,EAAUd,EAAWe,OAAO,IAAIb,IAASC,GACrCW,EAAQE,OAASb,IACnBW,EAAUA,EAAQG,OAAOjB,EAAWe,OAAOb,EAAOC,EAAaW,EAAQE,WAGzEF,EAAU,EAAAI,WAAWC,IAAIhB,GAAYiB,IAAKC,GAAOrB,EAAWsB,MAAMD,KAAQ,GAErEP,EAAQM,IAAKE,GAAUA,EAAMC,QAAQlB,GAC9C,CACA,SAASmB,EAAeC,GACtB,EAAAP,WAAWQ,IAAID,EACjB,C","sources":["webpack:///nextcloud/node_modules/@nextcloud/vue/dist/chunks/emoji-BY_D0V5K.mjs"],"sourcesContent":["import { getBuilder } from \"@nextcloud/browser-storage\";\nimport { EmojiIndex, frequently } from \"emoji-mart-vue-fast\";\nimport data from \"emoji-mart-vue-fast/data/all.json\";\nconst storage = getBuilder(\"nextcloud-vue\").persist(true).build();\nlet emojiIndex;\nvar EmojiSkinTone = /* @__PURE__ */ ((EmojiSkinTone2) => {\n EmojiSkinTone2[EmojiSkinTone2[\"Neutral\"] = 1] = \"Neutral\";\n EmojiSkinTone2[EmojiSkinTone2[\"Light\"] = 2] = \"Light\";\n EmojiSkinTone2[EmojiSkinTone2[\"MediumLight\"] = 3] = \"MediumLight\";\n EmojiSkinTone2[EmojiSkinTone2[\"Medium\"] = 4] = \"Medium\";\n EmojiSkinTone2[EmojiSkinTone2[\"MediumDark\"] = 5] = \"MediumDark\";\n EmojiSkinTone2[EmojiSkinTone2[\"Dark\"] = 6] = \"Dark\";\n return EmojiSkinTone2;\n})(EmojiSkinTone || {});\nfunction emojiSearch(query, maxResults = 10) {\n if (!emojiIndex) {\n emojiIndex = new EmojiIndex(data);\n }\n const currentSkinTone = getCurrentSkinTone();\n let results;\n if (query) {\n results = emojiIndex.search(`:${query}`, maxResults);\n if (results.length < maxResults) {\n results = results.concat(emojiIndex.search(query, maxResults - results.length));\n }\n } else {\n results = frequently.get(maxResults).map((id) => emojiIndex.emoji(id)) || [];\n }\n return results.map((emoji) => emoji.getSkin(currentSkinTone));\n}\nfunction emojiAddRecent(emojiData) {\n frequently.add(emojiData);\n}\nfunction getCurrentSkinTone() {\n const skinTone = Number.parseInt(storage.getItem(\"NcEmojiPicker::currentSkinTone\") ?? \"1\");\n return Math.min(\n Math.max(\n skinTone,\n 1\n /* Neutral */\n ),\n 6\n /* Dark */\n );\n}\nfunction setCurrentSkinTone(skinTone) {\n skinTone = Math.min(\n Math.max(\n skinTone,\n 1\n /* Neutral */\n ),\n 6\n /* Dark */\n );\n storage.setItem(\"NcEmojiPicker::currentSkinTone\", skinTone.toString());\n}\nexport {\n EmojiSkinTone as E,\n emojiAddRecent as a,\n emojiSearch as e,\n getCurrentSkinTone as g,\n setCurrentSkinTone as s\n};\n//# sourceMappingURL=emoji-BY_D0V5K.mjs.map\n"],"names":["storage","persist","build","emojiIndex","emojiSearch","query","maxResults","EmojiIndex","currentSkinTone","skinTone","Number","parseInt","getItem","Math","min","max","getCurrentSkinTone","results","search","length","concat","frequently","get","map","id","emoji","getSkin","emojiAddRecent","emojiData","add"],"sourceRoot":""}
{"version":3,"file":"5258-5258.js?v=0f6571662152e8883015","mappings":"qMAGA,MAAMA,GAAU,QAAW,iBAAiBC,SAAQ,GAAMC,QAC1D,IAAIC,EAUJ,SAASC,EAAYC,EAAOC,EAAa,IAClCH,IACHA,EAAa,IAAI,EAAAI,WAAW,IAE9B,MAAMC,EAeR,WACE,MAAMC,EAAWC,OAAOC,SAASX,EAAQY,QAAQ,mCAAqC,KACtF,OAAOC,KAAKC,IACVD,KAAKE,IACHN,EACA,GAGF,EAGJ,CA1B0BO,GACxB,IAAIC,EASJ,OARIZ,GACFY,EAAUd,EAAWe,OAAO,IAAIb,IAASC,GACrCW,EAAQE,OAASb,IACnBW,EAAUA,EAAQG,OAAOjB,EAAWe,OAAOb,EAAOC,EAAaW,EAAQE,WAGzEF,EAAU,EAAAI,WAAWC,IAAIhB,GAAYiB,IAAKC,GAAOrB,EAAWsB,MAAMD,KAAQ,GAErEP,EAAQM,IAAKE,GAAUA,EAAMC,QAAQlB,GAC9C,CACA,SAASmB,EAAeC,GACtB,EAAAP,WAAWQ,IAAID,EACjB,C","sources":["webpack:///nextcloud/node_modules/@nextcloud/vue/dist/chunks/emoji-BY_D0V5K.mjs"],"sourcesContent":["import { getBuilder } from \"@nextcloud/browser-storage\";\nimport { EmojiIndex, frequently } from \"emoji-mart-vue-fast\";\nimport data from \"emoji-mart-vue-fast/data/all.json\";\nconst storage = getBuilder(\"nextcloud-vue\").persist(true).build();\nlet emojiIndex;\nvar EmojiSkinTone = /* @__PURE__ */ ((EmojiSkinTone2) => {\n EmojiSkinTone2[EmojiSkinTone2[\"Neutral\"] = 1] = \"Neutral\";\n EmojiSkinTone2[EmojiSkinTone2[\"Light\"] = 2] = \"Light\";\n EmojiSkinTone2[EmojiSkinTone2[\"MediumLight\"] = 3] = \"MediumLight\";\n EmojiSkinTone2[EmojiSkinTone2[\"Medium\"] = 4] = \"Medium\";\n EmojiSkinTone2[EmojiSkinTone2[\"MediumDark\"] = 5] = \"MediumDark\";\n EmojiSkinTone2[EmojiSkinTone2[\"Dark\"] = 6] = \"Dark\";\n return EmojiSkinTone2;\n})(EmojiSkinTone || {});\nfunction emojiSearch(query, maxResults = 10) {\n if (!emojiIndex) {\n emojiIndex = new EmojiIndex(data);\n }\n const currentSkinTone = getCurrentSkinTone();\n let results;\n if (query) {\n results = emojiIndex.search(`:${query}`, maxResults);\n if (results.length < maxResults) {\n results = results.concat(emojiIndex.search(query, maxResults - results.length));\n }\n } else {\n results = frequently.get(maxResults).map((id) => emojiIndex.emoji(id)) || [];\n }\n return results.map((emoji) => emoji.getSkin(currentSkinTone));\n}\nfunction emojiAddRecent(emojiData) {\n frequently.add(emojiData);\n}\nfunction getCurrentSkinTone() {\n const skinTone = Number.parseInt(storage.getItem(\"NcEmojiPicker::currentSkinTone\") ?? \"1\");\n return Math.min(\n Math.max(\n skinTone,\n 1\n /* Neutral */\n ),\n 6\n /* Dark */\n );\n}\nfunction setCurrentSkinTone(skinTone) {\n skinTone = Math.min(\n Math.max(\n skinTone,\n 1\n /* Neutral */\n ),\n 6\n /* Dark */\n );\n storage.setItem(\"NcEmojiPicker::currentSkinTone\", skinTone.toString());\n}\nexport {\n EmojiSkinTone as E,\n emojiAddRecent as a,\n emojiSearch as e,\n getCurrentSkinTone as g,\n setCurrentSkinTone as s\n};\n//# sourceMappingURL=emoji-BY_D0V5K.mjs.map\n"],"names":["storage","persist","build","emojiIndex","emojiSearch","query","maxResults","EmojiIndex","currentSkinTone","skinTone","Number","parseInt","getItem","Math","min","max","getCurrentSkinTone","results","search","length","concat","frequently","get","map","id","emoji","getSkin","emojiAddRecent","emojiData","add"],"sourceRoot":""}

2
dist/5660-5660.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
5660-5660.js.license

2
dist/570-570.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/570-570.js.map vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/570-570.js.map.license vendored Symbolic link
View file

@ -0,0 +1 @@
570-570.js.license

4
dist/6768-6768.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
dist/7471-7471.js vendored
View file

@ -1 +0,0 @@
"use strict";(globalThis.webpackChunknextcloud_ui_legacy=globalThis.webpackChunknextcloud_ui_legacy||[]).push([[7471],{27514:e=>{e.exports="data:image/svg+xml,%3c%21--%20-%20SPDX-FileCopyrightText:%202020%20Google%20Inc.%20-%20SPDX-License-Identifier:%20Apache-2.0%20--%3e%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20width=%2724%27%20height=%2724%27%20fill=%27%23222%27%3e%3cpath%20d=%27M18.4%207.4L17%206l-6%206%206%206%201.4-1.4-4.6-4.6%204.6-4.6m-6%200L11%206l-6%206%206%206%201.4-1.4L7.8%2012l4.6-4.6z%27/%3e%3c/svg%3e"},27518:e=>{e.exports="data:image/svg+xml,%3c%21--%20-%20SPDX-FileCopyrightText:%202020%20Google%20Inc.%20-%20SPDX-License-Identifier:%20Apache-2.0%20--%3e%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20width=%2724%27%20height=%2724%27%20fill=%27%23222%27%3e%3cpath%20d=%27M15.4%2016.6L10.8%2012l4.6-4.6L14%206l-6%206%206%206%201.4-1.4z%27/%3e%3c/svg%3e"},79722:e=>{e.exports="data:image/svg+xml,%3c%21--%20-%20SPDX-FileCopyrightText:%202020%20Google%20Inc.%20-%20SPDX-License-Identifier:%20Apache-2.0%20--%3e%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20width=%2724%27%20height=%2724%27%20fill=%27%23222%27%3e%3cpath%20d=%27M5.6%207.4L7%206l6%206-6%206-1.4-1.4%204.6-4.6-4.6-4.6m6%200L13%206l6%206-6%206-1.4-1.4%204.6-4.6-4.6-4.6z%27/%3e%3c/svg%3e"},86886:e=>{e.exports="data:image/svg+xml,%3c%21--%20-%20SPDX-FileCopyrightText:%202020%20Google%20Inc.%20-%20SPDX-License-Identifier:%20Apache-2.0%20--%3e%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20width=%2724%27%20height=%2724%27%20fill=%27%23222%27%3e%3cpath%20d=%27M8.6%2016.6l4.6-4.6-4.6-4.6L10%206l6%206-6%206-1.4-1.4z%27/%3e%3c/svg%3e"}}]);

View file

@ -1,2 +0,0 @@
SPDX-License-Identifier: Apache-2.0
SPDX-FileCopyrightText: 2020 Google Inc.

2
dist/8154-8154.js vendored Normal file

File diff suppressed because one or more lines are too long

360
dist/8154-8154.js.license vendored Normal file
View file

@ -0,0 +1,360 @@
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: AGPL-3.0-or-later
SPDX-License-Identifier: (MPL-2.0 OR Apache-2.0)
SPDX-FileCopyrightText: rhysd <lin90162@yahoo.co.jp>
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: 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: 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: 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: 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: 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
- 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.2
- 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.2
- license: GPL-3.0-or-later
- @nextcloud/router
- version: 3.0.1
- 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
- @nextcloud/vue
- version: 8.34.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
- 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
- debounce
- version: 2.2.0
- license: MIT
- decode-named-character-reference
- version: 1.2.0
- license: MIT
- devlop
- version: 1.1.0
- license: MIT
- dompurify
- version: 3.3.0
- 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
- 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.0
- 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
- 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-demi
- version: 0.14.10
- 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

1
dist/8154-8154.js.map vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/8154-8154.js.map.license vendored Symbolic link
View file

@ -0,0 +1 @@
8154-8154.js.license

2
dist/945-945.js vendored Normal file

File diff suppressed because one or more lines are too long

89
dist/945-945.js.license vendored Normal file
View file

@ -0,0 +1,89 @@
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: AGPL-3.0-or-later
SPDX-License-Identifier: (MPL-2.0 OR Apache-2.0)
SPDX-FileCopyrightText: xiaokai <kexiaokai@gmail.com>
SPDX-FileCopyrightText: escape-html developers
SPDX-FileCopyrightText: Tobias Koppers @sokra
SPDX-FileCopyrightText: Roman Shtylman <shtylman@gmail.com>
SPDX-FileCopyrightText: Nextcloud GmbH and Nextcloud contributors
SPDX-FileCopyrightText: Guillaume Chau <guillaume.b.chau@gmail.com>
SPDX-FileCopyrightText: GitHub Inc.
SPDX-FileCopyrightText: Evan You
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: Anthony Fu <https://github.com/antfu>
SPDX-FileCopyrightText: Anthony Fu <anthonyfu117@hotmail.com>
This file is generated from multiple sources. Included packages:
- @nextcloud/auth
- version: 2.5.3
- license: GPL-3.0-or-later
- @nextcloud/browser-storage
- version: 0.5.0
- license: GPL-3.0-or-later
- semver
- version: 7.7.2
- license: ISC
- @nextcloud/event-bus
- version: 3.3.2
- license: GPL-3.0-or-later
- @nextcloud/l10n
- version: 3.4.1
- license: GPL-3.0-or-later
- @nextcloud/logger
- version: 3.0.2
- license: GPL-3.0-or-later
- @nextcloud/router
- version: 3.0.1
- license: GPL-3.0-or-later
- @nextcloud/vue
- version: 8.34.0
- license: AGPL-3.0-or-later
- @vueuse/core
- version: 11.3.0
- license: MIT
- @vueuse/shared
- version: 11.3.0
- license: MIT
- css-loader
- version: 7.1.2
- license: MIT
- dompurify
- version: 3.3.0
- 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
- floating-vue
- version: 1.0.0-beta.19
- license: MIT
- focus-trap
- version: 7.6.6
- license: MIT
- process
- version: 0.11.10
- license: MIT
- style-loader
- version: 4.0.0
- license: MIT
- tabbable
- version: 6.3.0
- license: MIT
- vue-color
- version: 2.8.2
- license: MIT
- vue-demi
- version: 0.14.10
- license: MIT
- vue
- version: 2.7.16
- license: MIT

1
dist/945-945.js.map vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/945-945.js.map.license vendored Symbolic link
View file

@ -0,0 +1 @@
945-945.js.license

File diff suppressed because one or more lines are too long

1
dist/Plus-C6XG8pgz.chunk.mjs.map vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,2 +1,2 @@
(()=>{"use strict";var e,r={84350:(e,r,t)=>{var n=t(35810),o=t(53334);const i=(0,t(35947).YK)().setApp("comments").detectUser().build(),a=new n.hY({id:"comments-unread",title(e){const r=e[0].attributes["comments-unread"];return r>=0?(0,o.n)("comments","1 new comment","{unread} new comments",r,{unread:r}):(0,o.t)("comments","Comment")},displayName:()=>"",iconSvgInline:()=>'<svg xmlns="http://www.w3.org/2000/svg" id="mdi-comment-processing" viewBox="0 0 24 24"><path d="M9,22A1,1 0 0,1 8,21V18H4A2,2 0 0,1 2,16V4C2,2.89 2.9,2 4,2H20A2,2 0 0,1 22,4V16A2,2 0 0,1 20,18H13.9L10.2,21.71C10,21.9 9.75,22 9.5,22V22H9M17,11V9H15V11H17M13,11V9H11V11H13M9,11V9H7V11H9Z" /></svg>',enabled(e){const r=e[0].attributes["comments-unread"];return"number"==typeof r&&r>0},async exec(e){try{return window.OCA.Files.Sidebar.setActiveTab("comments"),await window.OCA.Files.Sidebar.open(e.path),null}catch(e){return i.error("Error while opening sidebar",{error:e}),!1}},inline:()=>!0,order:-140});(0,n.Gg)(a)}},t={};function n(e){var o=t[e];if(void 0!==o)return o.exports;var i=t[e]={id:e,loaded:!1,exports:{}};return r[e].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}n.m=r,e=[],n.O=(r,t,o,i)=>{if(!t){var a=1/0;for(c=0;c<e.length;c++){for(var[t,o,i]=e[c],l=!0,s=0;s<t.length;s++)(!1&i||a>=i)&&Object.keys(n.O).every(e=>n.O[e](t[s]))?t.splice(s--,1):(l=!1,i<a&&(a=i));if(l){e.splice(c--,1);var d=o();void 0!==d&&(r=d)}}return r}i=i||0;for(var c=e.length;c>0&&e[c-1][2]>i;c--)e[c]=e[c-1];e[c]=[t,o,i]},n.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return n.d(r,{a:r}),r},n.d=(e,r)=>{for(var t in r)n.o(r,t)&&!n.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},n.e=()=>Promise.resolve(),n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),n.j=3260,(()=>{n.b="undefined"!=typeof document&&document.baseURI||self.location.href;var e={3260:0};n.O.j=r=>0===e[r];var r=(r,t)=>{var o,i,[a,l,s]=t,d=0;if(a.some(r=>0!==e[r])){for(o in l)n.o(l,o)&&(n.m[o]=l[o]);if(s)var c=s(n)}for(r&&r(t);d<a.length;d++)i=a[d],n.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return n.O(c)},t=globalThis.webpackChunknextcloud_ui_legacy=globalThis.webpackChunknextcloud_ui_legacy||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),n.nc=void 0;var o=n.O(void 0,[4208],()=>n(84350));o=n.O(o)})();
//# sourceMappingURL=comments-init.js.map?v=865ac740429ad7a147bc
(()=>{"use strict";var e,r={84350:(e,r,t)=>{var n=t(35810),o=t(53334);const i=(0,t(35947).YK)().setApp("comments").detectUser().build(),a=new n.hY({id:"comments-unread",title(e){const r=e[0].attributes["comments-unread"];return r>=0?(0,o.n)("comments","1 new comment","{unread} new comments",r,{unread:r}):(0,o.t)("comments","Comment")},displayName:()=>"",iconSvgInline:()=>'<svg xmlns="http://www.w3.org/2000/svg" id="mdi-comment-processing" viewBox="0 0 24 24"><path d="M9,22A1,1 0 0,1 8,21V18H4A2,2 0 0,1 2,16V4C2,2.89 2.9,2 4,2H20A2,2 0 0,1 22,4V16A2,2 0 0,1 20,18H13.9L10.2,21.71C10,21.9 9.75,22 9.5,22V22H9M17,11V9H15V11H17M13,11V9H11V11H13M9,11V9H7V11H9Z" /></svg>',enabled(e){const r=e[0].attributes["comments-unread"];return"number"==typeof r&&r>0},async exec(e){try{return window.OCA.Files.Sidebar.setActiveTab("comments"),await window.OCA.Files.Sidebar.open(e.path),null}catch(e){return i.error("Error while opening sidebar",{error:e}),!1}},inline:()=>!0,order:-140});(0,n.Gg)(a)}},t={};function n(e){var o=t[e];if(void 0!==o)return o.exports;var i=t[e]={id:e,loaded:!1,exports:{}};return r[e].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}n.m=r,e=[],n.O=(r,t,o,i)=>{if(!t){var a=1/0;for(c=0;c<e.length;c++){for(var[t,o,i]=e[c],l=!0,s=0;s<t.length;s++)(!1&i||a>=i)&&Object.keys(n.O).every(e=>n.O[e](t[s]))?t.splice(s--,1):(l=!1,i<a&&(a=i));if(l){e.splice(c--,1);var d=o();void 0!==d&&(r=d)}}return r}i=i||0;for(var c=e.length;c>0&&e[c-1][2]>i;c--)e[c]=e[c-1];e[c]=[t,o,i]},n.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return n.d(r,{a:r}),r},n.d=(e,r)=>{for(var t in r)n.o(r,t)&&!n.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},n.e=()=>Promise.resolve(),n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),n.j=3260,(()=>{var e={3260:0};n.O.j=r=>0===e[r];var r=(r,t)=>{var o,i,[a,l,s]=t,d=0;if(a.some(r=>0!==e[r])){for(o in l)n.o(l,o)&&(n.m[o]=l[o]);if(s)var c=s(n)}for(r&&r(t);d<a.length;d++)i=a[d],n.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return n.O(c)},t=globalThis.webpackChunknextcloud_ui_legacy=globalThis.webpackChunknextcloud_ui_legacy||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),n.nc=void 0;var o=n.O(void 0,[4208],()=>n(84350));o=n.O(o)})();
//# sourceMappingURL=comments-init.js.map?v=2621e0fa161e58b3c744

File diff suppressed because one or more lines are too long

View file

@ -1,2 +1,2 @@
(()=>{"use strict";var e,r={78038:(e,r,o)=>{var n=o(63814),t=o(21777),i=o(35947);const d=null===(l=(0,t.HW)())?(0,i.YK)().setApp("core").build():(0,i.YK)().setApp("core").setUid(l.uid).build();var l;(0,i.YK)().setApp("unified-search").detectUser().build(),window.addEventListener("DOMContentLoaded",async()=>{try{d.debug("Running web cron"),await window.fetch(`${(0,n.aU)()}/cron.php`),d.debug("Web cron successfull")}catch(e){d.debug("Running web cron failed",{error:e})}})}},o={};function n(e){var t=o[e];if(void 0!==t)return t.exports;var i=o[e]={id:e,loaded:!1,exports:{}};return r[e].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}n.m=r,e=[],n.O=(r,o,t,i)=>{if(!o){var d=1/0;for(c=0;c<e.length;c++){for(var[o,t,i]=e[c],l=!0,a=0;a<o.length;a++)(!1&i||d>=i)&&Object.keys(n.O).every(e=>n.O[e](o[a]))?o.splice(a--,1):(l=!1,i<d&&(d=i));if(l){e.splice(c--,1);var u=t();void 0!==u&&(r=u)}}return r}i=i||0;for(var c=e.length;c>0&&e[c-1][2]>i;c--)e[c]=e[c-1];e[c]=[o,t,i]},n.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return n.d(r,{a:r}),r},n.d=(e,r)=>{for(var o in r)n.o(r,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:r[o]})},n.e=()=>Promise.resolve(),n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),n.j=5438,(()=>{n.b="undefined"!=typeof document&&document.baseURI||self.location.href;var e={5438:0};n.O.j=r=>0===e[r];var r=(r,o)=>{var t,i,[d,l,a]=o,u=0;if(d.some(r=>0!==e[r])){for(t in l)n.o(l,t)&&(n.m[t]=l[t]);if(a)var c=a(n)}for(r&&r(o);u<d.length;u++)i=d[u],n.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return n.O(c)},o=globalThis.webpackChunknextcloud_ui_legacy=globalThis.webpackChunknextcloud_ui_legacy||[];o.forEach(r.bind(null,0)),o.push=r.bind(null,o.push.bind(o))})(),n.nc=void 0;var t=n.O(void 0,[4208],()=>n(78038));t=n.O(t)})();
//# sourceMappingURL=core-ajax-cron.js.map?v=17ffc0d5e614e04c033f
(()=>{"use strict";var e,r={78038:(e,r,o)=>{var n=o(63814),t=o(21777),i=o(35947);const l=null===(a=(0,t.HW)())?(0,i.YK)().setApp("core").build():(0,i.YK)().setApp("core").setUid(a.uid).build();var a;(0,i.YK)().setApp("unified-search").detectUser().build(),window.addEventListener("DOMContentLoaded",async()=>{try{l.debug("Running web cron"),await window.fetch(`${(0,n.aU)()}/cron.php`),l.debug("Web cron successfull")}catch(e){l.debug("Running web cron failed",{error:e})}})}},o={};function n(e){var t=o[e];if(void 0!==t)return t.exports;var i=o[e]={id:e,loaded:!1,exports:{}};return r[e].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}n.m=r,e=[],n.O=(r,o,t,i)=>{if(!o){var l=1/0;for(c=0;c<e.length;c++){for(var[o,t,i]=e[c],a=!0,d=0;d<o.length;d++)(!1&i||l>=i)&&Object.keys(n.O).every(e=>n.O[e](o[d]))?o.splice(d--,1):(a=!1,i<l&&(l=i));if(a){e.splice(c--,1);var u=t();void 0!==u&&(r=u)}}return r}i=i||0;for(var c=e.length;c>0&&e[c-1][2]>i;c--)e[c]=e[c-1];e[c]=[o,t,i]},n.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return n.d(r,{a:r}),r},n.d=(e,r)=>{for(var o in r)n.o(r,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:r[o]})},n.e=()=>Promise.resolve(),n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),n.j=5438,(()=>{var e={5438:0};n.O.j=r=>0===e[r];var r=(r,o)=>{var t,i,[l,a,d]=o,u=0;if(l.some(r=>0!==e[r])){for(t in a)n.o(a,t)&&(n.m[t]=a[t]);if(d)var c=d(n)}for(r&&r(o);u<l.length;u++)i=l[u],n.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return n.O(c)},o=globalThis.webpackChunknextcloud_ui_legacy=globalThis.webpackChunknextcloud_ui_legacy||[];o.forEach(r.bind(null,0)),o.push=r.bind(null,o.push.bind(o))})(),n.nc=void 0;var t=n.O(void 0,[4208],()=>n(78038));t=n.O(t)})();
//# sourceMappingURL=core-ajax-cron.js.map?v=3cb2094139a6d7aaaa89

File diff suppressed because one or more lines are too long

4
dist/core-common.js vendored

File diff suppressed because one or more lines are too long

View file

@ -7,7 +7,6 @@ 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-License-Identifier: (MIT AND BSD-3-Clause)
SPDX-FileCopyrightText: xiemengxiong
SPDX-FileCopyrightText: xiaokai <kexiaokai@gmail.com>
SPDX-FileCopyrightText: string_decoder developers
SPDX-FileCopyrightText: ripemd160 developers
@ -39,7 +38,6 @@ SPDX-FileCopyrightText: Scott Cooper <scttcper@gmail.com>
SPDX-FileCopyrightText: Rubén Norte <ruben.norte@softonic.com>
SPDX-FileCopyrightText: Roman Shtylman <shtylman@gmail.com>
SPDX-FileCopyrightText: Rob Cresswell <robcresswell@pm.me>
SPDX-FileCopyrightText: Richie Bendall
SPDX-FileCopyrightText: Raynos <raynos2@gmail.com>
SPDX-FileCopyrightText: Perry Mitchell <perry@perrymitchell.net>
SPDX-FileCopyrightText: Paul Vorbach <paul@vorba.ch> (http://paul.vorba.ch)
@ -374,9 +372,6 @@ This file is generated from multiple sources. Included packages:
- cancelable-promise
- version: 4.3.1
- license: MIT
- char-regex
- version: 2.0.2
- license: MIT
- charenc
- version: 0.0.2
- license: BSD-3-Clause
@ -413,9 +408,6 @@ This file is generated from multiple sources. Included packages:
- date-fns
- version: 4.1.0
- license: MIT
- date-format-parse
- version: 0.2.7
- license: MIT
- debounce
- version: 2.2.0
- license: MIT
@ -863,9 +855,6 @@ This file is generated from multiple sources. Included packages:
- stream-http
- version: 3.2.0
- license: MIT
- strip-ansi
- version: 7.1.2
- license: MIT
- string_decoder
- version: 1.3.0
- license: MIT

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,2 +1,2 @@
(()=>{"use strict";var e,t={75681:(e,t,i)=>{var n=i(12111);!function(e){const t=function(e){const t=this;n.default.each(e,function(e,i){n.default.isFunction(e)||(t[i]=e)}),n.default.isUndefined(this.id)||(this.id=parseInt(e.id,10)),this.path=e.path||"","dir"===this.type?this.mimetype="httpd/unix-directory":this.mimetype=this.mimetype||"application/octet-stream",this.type||("httpd/unix-directory"===this.mimetype?this.type="dir":this.type="file")};t.prototype={id:null,name:null,path:null,mimetype:null,icon:null,type:null,permissions:null,mtime:null,etag:null,mountType:null,hasPreview:!0,sharePermissions:null,shareAttributes:[],quotaAvailableBytes:-1,canDownload:function(){for(const e in this.shareAttributes){const t=this.shareAttributes[e];if("permissions"===t.scope&&"download"===t.key)return!0===t.value}return!0}},e.Files||(e.Files={}),e.Files.FileInfo=t}(OC)}},i={};function n(e){var r=i[e];if(void 0!==r)return r.exports;var o=i[e]={id:e,loaded:!1,exports:{}};return t[e].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.m=t,e=[],n.O=(t,i,r,o)=>{if(!i){var l=1/0;for(d=0;d<e.length;d++){for(var[i,r,o]=e[d],s=!0,a=0;a<i.length;a++)(!1&o||l>=o)&&Object.keys(n.O).every(e=>n.O[e](i[a]))?i.splice(a--,1):(s=!1,o<l&&(l=o));if(s){e.splice(d--,1);var u=r();void 0!==u&&(t=u)}}return t}o=o||0;for(var d=e.length;d>0&&e[d-1][2]>o;d--)e[d]=e[d-1];e[d]=[i,r,o]},n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var i in t)n.o(t,i)&&!n.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},n.e=()=>Promise.resolve(),n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),n.j=4313,(()=>{n.b="undefined"!=typeof document&&document.baseURI||self.location.href;var e={4313:0};n.O.j=t=>0===e[t];var t=(t,i)=>{var r,o,[l,s,a]=i,u=0;if(l.some(t=>0!==e[t])){for(r in s)n.o(s,r)&&(n.m[r]=s[r]);if(a)var d=a(n)}for(t&&t(i);u<l.length;u++)o=l[u],n.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return n.O(d)},i=globalThis.webpackChunknextcloud_ui_legacy=globalThis.webpackChunknextcloud_ui_legacy||[];i.forEach(t.bind(null,0)),i.push=t.bind(null,i.push.bind(i))})(),n.nc=void 0;var r=n.O(void 0,[4208],()=>n(75681));r=n.O(r)})();
//# sourceMappingURL=core-files_fileinfo.js.map?v=fd4d8021f99278756f60
(()=>{"use strict";var e,t={75681:(e,t,i)=>{var n=i(12111);!function(e){const t=function(e){const t=this;n.default.each(e,function(e,i){n.default.isFunction(e)||(t[i]=e)}),n.default.isUndefined(this.id)||(this.id=parseInt(e.id,10)),this.path=e.path||"","dir"===this.type?this.mimetype="httpd/unix-directory":this.mimetype=this.mimetype||"application/octet-stream",this.type||("httpd/unix-directory"===this.mimetype?this.type="dir":this.type="file")};t.prototype={id:null,name:null,path:null,mimetype:null,icon:null,type:null,permissions:null,mtime:null,etag:null,mountType:null,hasPreview:!0,sharePermissions:null,shareAttributes:[],quotaAvailableBytes:-1,canDownload:function(){for(const e in this.shareAttributes){const t=this.shareAttributes[e];if("permissions"===t.scope&&"download"===t.key)return!0===t.value}return!0}},e.Files||(e.Files={}),e.Files.FileInfo=t}(OC)}},i={};function n(e){var r=i[e];if(void 0!==r)return r.exports;var o=i[e]={id:e,loaded:!1,exports:{}};return t[e].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.m=t,e=[],n.O=(t,i,r,o)=>{if(!i){var l=1/0;for(d=0;d<e.length;d++){for(var[i,r,o]=e[d],s=!0,a=0;a<i.length;a++)(!1&o||l>=o)&&Object.keys(n.O).every(e=>n.O[e](i[a]))?i.splice(a--,1):(s=!1,o<l&&(l=o));if(s){e.splice(d--,1);var u=r();void 0!==u&&(t=u)}}return t}o=o||0;for(var d=e.length;d>0&&e[d-1][2]>o;d--)e[d]=e[d-1];e[d]=[i,r,o]},n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var i in t)n.o(t,i)&&!n.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},n.e=()=>Promise.resolve(),n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),n.j=4313,(()=>{var e={4313:0};n.O.j=t=>0===e[t];var t=(t,i)=>{var r,o,[l,s,a]=i,u=0;if(l.some(t=>0!==e[t])){for(r in s)n.o(s,r)&&(n.m[r]=s[r]);if(a)var d=a(n)}for(t&&t(i);u<l.length;u++)o=l[u],n.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return n.O(d)},i=globalThis.webpackChunknextcloud_ui_legacy=globalThis.webpackChunknextcloud_ui_legacy||[];i.forEach(t.bind(null,0)),i.push=t.bind(null,i.push.bind(i))})(),n.nc=void 0;var r=n.O(void 0,[4208],()=>n(75681));r=n.O(r)})();
//# sourceMappingURL=core-files_fileinfo.js.map?v=64159113a266c7cf9a52

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

4
dist/core-login.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,2 +1,2 @@
(()=>{"use strict";var e,t={22485:(e,t,n)=>{var o=n(19051),r=n(63814),i=n(21777),a=n(35947);const l=null===(d=(0,i.HW)())?(0,a.YK)().setApp("core").build():(0,a.YK)().setApp("core").setUid(d.uid).build();var d;(0,a.YK)().setApp("unified-search").detectUser().build();const c=(0,r.aU)()+"/status.php";!function e(){l.info("checking the Nextcloud maintenance status"),o.Ay.get(c).then(e=>e.data).then(t=>{if(!1===t.maintenance)return l.info("Nextcloud is not in maintenance mode anymore -> reloading"),void window.location.reload();l.info("Nextcloud is still in maintenance mode"),setTimeout(e,2e4)}).catch(l.error.bind(this))}()}},n={};function o(e){var r=n[e];if(void 0!==r)return r.exports;var i=n[e]={id:e,loaded:!1,exports:{}};return t[e].call(i.exports,i,i.exports,o),i.loaded=!0,i.exports}o.m=t,e=[],o.O=(t,n,r,i)=>{if(!n){var a=1/0;for(u=0;u<e.length;u++){for(var[n,r,i]=e[u],l=!0,d=0;d<n.length;d++)(!1&i||a>=i)&&Object.keys(o.O).every(e=>o.O[e](n[d]))?n.splice(d--,1):(l=!1,i<a&&(a=i));if(l){e.splice(u--,1);var c=r();void 0!==c&&(t=c)}}return t}i=i||0;for(var u=e.length;u>0&&e[u-1][2]>i;u--)e[u]=e[u-1];e[u]=[n,r,i]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.e=()=>Promise.resolve(),o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),o.j=2076,(()=>{o.b="undefined"!=typeof document&&document.baseURI||self.location.href;var e={2076:0};o.O.j=t=>0===e[t];var t=(t,n)=>{var r,i,[a,l,d]=n,c=0;if(a.some(t=>0!==e[t])){for(r in l)o.o(l,r)&&(o.m[r]=l[r]);if(d)var u=d(o)}for(t&&t(n);c<a.length;c++)i=a[c],o.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return o.O(u)},n=globalThis.webpackChunknextcloud_ui_legacy=globalThis.webpackChunknextcloud_ui_legacy||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),o.nc=void 0;var r=o.O(void 0,[4208],()=>o(22485));r=o.O(r)})();
//# sourceMappingURL=core-maintenance.js.map?v=b996a57431fdf3bd4732
(()=>{"use strict";var e,t={22485:(e,t,n)=>{var o=n(19051),r=n(63814),i=n(21777),a=n(35947);const l=null===(d=(0,i.HW)())?(0,a.YK)().setApp("core").build():(0,a.YK)().setApp("core").setUid(d.uid).build();var d;(0,a.YK)().setApp("unified-search").detectUser().build();const c=(0,r.aU)()+"/status.php";!function e(){l.info("checking the Nextcloud maintenance status"),o.Ay.get(c).then(e=>e.data).then(t=>{if(!1===t.maintenance)return l.info("Nextcloud is not in maintenance mode anymore -> reloading"),void window.location.reload();l.info("Nextcloud is still in maintenance mode"),setTimeout(e,2e4)}).catch(l.error.bind(this))}()}},n={};function o(e){var r=n[e];if(void 0!==r)return r.exports;var i=n[e]={id:e,loaded:!1,exports:{}};return t[e].call(i.exports,i,i.exports,o),i.loaded=!0,i.exports}o.m=t,e=[],o.O=(t,n,r,i)=>{if(!n){var a=1/0;for(u=0;u<e.length;u++){for(var[n,r,i]=e[u],l=!0,d=0;d<n.length;d++)(!1&i||a>=i)&&Object.keys(o.O).every(e=>o.O[e](n[d]))?n.splice(d--,1):(l=!1,i<a&&(a=i));if(l){e.splice(u--,1);var c=r();void 0!==c&&(t=c)}}return t}i=i||0;for(var u=e.length;u>0&&e[u-1][2]>i;u--)e[u]=e[u-1];e[u]=[n,r,i]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.e=()=>Promise.resolve(),o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),o.j=2076,(()=>{var e={2076:0};o.O.j=t=>0===e[t];var t=(t,n)=>{var r,i,[a,l,d]=n,c=0;if(a.some(t=>0!==e[t])){for(r in l)o.o(l,r)&&(o.m[r]=l[r]);if(d)var u=d(o)}for(t&&t(n);c<a.length;c++)i=a[c],o.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return o.O(u)},n=globalThis.webpackChunknextcloud_ui_legacy=globalThis.webpackChunknextcloud_ui_legacy||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),o.nc=void 0;var r=o.O(void 0,[4208],()=>o(22485));r=o.O(r)})();
//# sourceMappingURL=core-maintenance.js.map?v=7710353ead9be174749f

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show more