├── .editorconfig ├── .eslintrc.js ├── .gitattributes ├── .github ├── CODEOWNERS ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ └── feature_request.yml ├── SECURITY.md ├── triage-issue-bot-config.yml └── workflows │ ├── block-merge-eol.yml │ ├── block-merge-freeze.yml │ ├── command-compile.yml │ ├── lint.yml │ ├── node-build.yml │ ├── node.yml │ ├── reuse.yml │ ├── tests-deploy.yml │ ├── tests-special.yml │ ├── tests.yml │ ├── triage-question-flow.yml │ ├── triage-question-label-guard.yml │ └── triage-reminder.yml ├── .gitignore ├── .l10nignore ├── .nextcloudignore ├── .php-cs-fixer.dist.php ├── .tx ├── backport └── config ├── APPS.md ├── AUTHORS.md ├── CHANGELOG.md ├── LICENSE ├── LICENSES ├── AGPL-3.0-or-later.txt ├── Apache-2.0.txt ├── BSD-2-Clause.txt ├── BSD-3-Clause.txt ├── CC0-1.0.txt ├── GPL-3.0-or-later.txt ├── ISC.txt ├── MIT.txt └── MPL-2.0.txt ├── Makefile ├── README.md ├── REUSE.toml ├── appinfo ├── info.xml ├── register_command.php └── routes.php ├── build-js ├── WebpackSPDXPlugin.js └── npm-post-build.sh ├── composer.json ├── composer.lock ├── css ├── filesactions.css └── settings.css ├── img ├── app-dark.svg └── app.svg ├── js ├── app_api-adminSettings.js ├── app_api-adminSettings.js.license ├── app_api-adminSettings.js.map ├── app_api-adminSettings.js.map.license ├── app_api-filesplugin.js ├── app_api-filesplugin.js.license ├── app_api-filesplugin.js.map ├── app_api-filesplugin.js.map.license ├── app_api-node_modules_nextcloud_dialogs_dist_chunks_index-C1azEbgd_mjs.js ├── app_api-node_modules_nextcloud_dialogs_dist_chunks_index-C1azEbgd_mjs.js.license ├── app_api-node_modules_nextcloud_dialogs_dist_chunks_index-C1azEbgd_mjs.js.map ├── app_api-node_modules_nextcloud_dialogs_dist_chunks_index-C1azEbgd_mjs.js.map.license ├── app_api-vendors-node_modules_nextcloud_dialogs_dist_chunks_FilePicker-CDU2njOJ_mjs.js ├── app_api-vendors-node_modules_nextcloud_dialogs_dist_chunks_FilePicker-CDU2njOJ_mjs.js.license ├── app_api-vendors-node_modules_nextcloud_dialogs_dist_chunks_FilePicker-CDU2njOJ_mjs.js.map ├── app_api-vendors-node_modules_nextcloud_dialogs_dist_chunks_FilePicker-CDU2njOJ_mjs.js.map.license └── proxy_js │ ├── 0.js │ ├── 1.js │ ├── 2.js │ ├── 3.js │ ├── 4.js │ ├── 5.js │ ├── 6.js │ ├── 7.js │ ├── 8.js │ └── 9.js ├── krankerl.toml ├── l10n ├── .gitkeep ├── af.js ├── af.json ├── ar.js ├── ar.json ├── ast.js ├── ast.json ├── az.js ├── az.json ├── bg.js ├── bg.json ├── bn_BD.js ├── bn_BD.json ├── br.js ├── br.json ├── bs.js ├── bs.json ├── ca.js ├── ca.json ├── cs.js ├── cs.json ├── cy_GB.js ├── cy_GB.json ├── da.js ├── da.json ├── de.js ├── de.json ├── de_DE.js ├── de_DE.json ├── el.js ├── el.json ├── en_GB.js ├── en_GB.json ├── eo.js ├── eo.json ├── es.js ├── es.json ├── es_419.js ├── es_419.json ├── es_AR.js ├── es_AR.json ├── es_CL.js ├── es_CL.json ├── es_CO.js ├── es_CO.json ├── es_CR.js ├── es_CR.json ├── es_DO.js ├── es_DO.json ├── es_EC.js ├── es_EC.json ├── es_GT.js ├── es_GT.json ├── es_HN.js ├── es_HN.json ├── es_MX.js ├── es_MX.json ├── es_NI.js ├── es_NI.json ├── es_PA.js ├── es_PA.json ├── es_PE.js ├── es_PE.json ├── es_PR.js ├── es_PR.json ├── es_PY.js ├── es_PY.json ├── es_SV.js ├── es_SV.json ├── es_UY.js ├── es_UY.json ├── et_EE.js ├── et_EE.json ├── eu.js ├── eu.json ├── fa.js ├── fa.json ├── fi.js ├── fi.json ├── fr.js ├── fr.json ├── ga.js ├── ga.json ├── gl.js ├── gl.json ├── he.js ├── he.json ├── hr.js ├── hr.json ├── hu.js ├── hu.json ├── ia.js ├── ia.json ├── id.js ├── id.json ├── is.js ├── is.json ├── it.js ├── it.json ├── ja.js ├── ja.json ├── ka.js ├── ka.json ├── ka_GE.js ├── ka_GE.json ├── kab.js ├── kab.json ├── km.js ├── km.json ├── ko.js ├── ko.json ├── lb.js ├── lb.json ├── lo.js ├── lo.json ├── lt_LT.js ├── lt_LT.json ├── lv.js ├── lv.json ├── mk.js ├── mk.json ├── mn.js ├── mn.json ├── nb.js ├── nb.json ├── nl.js ├── nl.json ├── nn_NO.js ├── nn_NO.json ├── oc.js ├── oc.json ├── pl.js ├── pl.json ├── pt_BR.js ├── pt_BR.json ├── pt_PT.js ├── pt_PT.json ├── ro.js ├── ro.json ├── ru.js ├── ru.json ├── sc.js ├── sc.json ├── si.js ├── si.json ├── sk.js ├── sk.json ├── sl.js ├── sl.json ├── sq.js ├── sq.json ├── sr.js ├── sr.json ├── sr@latin.js ├── sr@latin.json ├── sv.js ├── sv.json ├── ta.js ├── ta.json ├── th.js ├── th.json ├── tr.js ├── tr.json ├── ug.js ├── ug.json ├── uk.js ├── uk.json ├── uz.js ├── uz.json ├── vi.js ├── vi.json ├── zh_CN.js ├── zh_CN.json ├── zh_HK.js ├── zh_HK.json ├── zh_TW.js └── zh_TW.json ├── lib ├── AppAPIAuthBackend.php ├── AppInfo │ └── Application.php ├── Attribute │ └── AppAPIAuth.php ├── BackgroundJob │ └── ExAppInitStatusCheckJob.php ├── Capabilities.php ├── Command │ ├── Daemon │ │ ├── AddRegistry.php │ │ ├── ListDaemons.php │ │ ├── ListRegistry.php │ │ ├── RegisterDaemon.php │ │ ├── RemoveRegistry.php │ │ └── UnregisterDaemon.php │ ├── ExApp │ │ ├── Disable.php │ │ ├── Enable.php │ │ ├── ListExApps.php │ │ ├── Register.php │ │ ├── Unregister.php │ │ └── Update.php │ └── ExAppConfig │ │ ├── DeleteConfig.php │ │ ├── GetConfig.php │ │ ├── ListConfig.php │ │ └── SetConfig.php ├── Controller │ ├── AppConfigController.php │ ├── ConfigController.php │ ├── DaemonConfigController.php │ ├── ExAppProxyController.php │ ├── ExAppsPageController.php │ ├── HarpController.php │ ├── NotificationsController.php │ ├── OCSApiController.php │ ├── OCSExAppController.php │ ├── OCSSettingsController.php │ ├── OCSUiController.php │ ├── OccCommandController.php │ ├── PreferencesController.php │ ├── TalkBotController.php │ ├── TaskProcessingController.php │ └── TopMenuController.php ├── DavPlugin.php ├── Db │ ├── Console │ │ ├── ExAppOccCommand.php │ │ └── ExAppOccCommandMapper.php │ ├── DaemonConfig.php │ ├── DaemonConfigMapper.php │ ├── ExApp.php │ ├── ExAppConfig.php │ ├── ExAppConfigMapper.php │ ├── ExAppDeployOption.php │ ├── ExAppDeployOptionsMapper.php │ ├── ExAppMapper.php │ ├── ExAppPreference.php │ ├── ExAppPreferenceMapper.php │ ├── TaskProcessing │ │ ├── TaskProcessingProvider.php │ │ └── TaskProcessingProviderMapper.php │ └── UI │ │ ├── FilesActionsMenu.php │ │ ├── FilesActionsMenuMapper.php │ │ ├── InitialState.php │ │ ├── InitialStateMapper.php │ │ ├── Script.php │ │ ├── ScriptMapper.php │ │ ├── SettingsForm.php │ │ ├── SettingsFormMapper.php │ │ ├── Style.php │ │ ├── StyleMapper.php │ │ ├── TopMenu.php │ │ └── TopMenuMapper.php ├── DeployActions │ ├── AIODockerActions.php │ ├── DockerActions.php │ ├── IDeployActions.php │ └── ManualActions.php ├── Exceptions │ └── AppAPIAuthNotValidException.php ├── Fetcher │ ├── AppAPIFetcher.php │ ├── ExAppArchiveFetcher.php │ └── ExAppFetcher.php ├── Listener │ ├── DeclarativeSettings │ │ ├── GetValueListener.php │ │ ├── RegisterDeclarativeSettingsListener.php │ │ └── SetValueListener.php │ ├── GetTaskProcessingProvidersListener.php │ ├── LoadFilesPluginListener.php │ ├── LoadMenuEntriesListener.php │ └── SabrePluginAuthInitListener.php ├── Middleware │ ├── AppAPIAuthMiddleware.php │ ├── ExAppUIL10NMiddleware.php │ └── ExAppUiMiddleware.php ├── Migration │ ├── DaemonUpdateGPUSRepairStep.php │ ├── DaemonUpdateV2RepairStep.php │ ├── DataInitializationStep.php │ ├── Version032000Date20250109162434.php │ ├── Version032001Date20250115164140.php │ ├── Version032002Date20250527174907.php │ ├── Version1000Date202305221555.php │ ├── Version1004Date202311061844.php │ ├── Version2000Date20240120094952.php │ ├── Version2005Date20240209094951.php │ ├── Version2201Date20240221124152.php │ ├── Version2203Date20240325124149.php │ ├── Version2204Date20240403125002.php │ ├── Version2205Date20240411124836.php │ ├── Version2206Date20240502145029.php │ ├── Version2207Date20240502145029.php │ ├── Version2700Date20240515092246.php │ ├── Version2800Date20240710220000.php │ ├── Version2800Date20240711080316.php │ ├── Version3000Date20240715170800.php │ ├── Version3000Date20240807085759.php │ ├── Version3100Date20240822080316.php │ ├── Version3200Date20240905080316.php │ └── Version5000Date20241120135411.php ├── Notifications │ ├── ExAppNotifier.php │ └── ExNotificationsManager.php ├── ProxyResponse.php ├── PublicCapabilities.php ├── PublicFunctions.php ├── Service │ ├── AppAPICommonService.php │ ├── AppAPIService.php │ ├── DaemonConfigService.php │ ├── ExAppConfigService.php │ ├── ExAppDeployOptionsService.php │ ├── ExAppOccService.php │ ├── ExAppPreferenceService.php │ ├── ExAppService.php │ ├── ExAppsPageService.php │ ├── HarpService.php │ ├── ProvidersAI │ │ └── TaskProcessingService.php │ ├── TalkBotsService.php │ └── UI │ │ ├── FilesActionsMenuService.php │ │ ├── InitialStateService.php │ │ ├── ScriptsService.php │ │ ├── SettingsService.php │ │ ├── StylesService.php │ │ └── TopMenuService.php ├── Settings │ ├── Admin.php │ ├── AdminSection.php │ └── DeclarativeSettings │ │ ├── AiIntegrationTeam.php │ │ └── DeclarativeSettings.php └── SetupChecks │ └── DaemonCheck.php ├── package-lock.json ├── package.json ├── psalm.xml ├── screenshots ├── app_api_1.png ├── app_api_1.png.license ├── app_api_2.png ├── app_api_2.png.license ├── app_api_3.png ├── app_api_3.png.license ├── app_api_4.png └── app_api_4.png.license ├── src ├── adminSettings.js ├── bootstrap.js ├── components │ ├── AdminSettings.vue │ ├── DaemonConfig │ │ ├── ConfirmDaemonDeleteModal.vue │ │ ├── DaemonConfig.vue │ │ ├── DaemonConfigDetailsModal.vue │ │ ├── DaemonConfigList.vue │ │ ├── DaemonTestDeploy.vue │ │ ├── DockerRegistriesModal.vue │ │ ├── InfoTooltip.vue │ │ └── ManageDaemonConfigModal.vue │ └── icons │ │ └── AppAPIIcon.vue ├── constants │ └── daemonTemplates.js ├── filesplugin.js └── utils.js ├── stylelint.config.js ├── templates ├── adminSettings.php └── embedded.php ├── tests ├── install_no_init.py ├── psalm-baseline.xml ├── simple-nginx-NOT-FOR-PRODUCTION.conf └── test_occ_commands_docker.py └── webpack.js /.editorconfig: -------------------------------------------------------------------------------- 1 | # https://editorconfig.org 2 | # SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 3 | # SPDX-License-Identifier: AGPL-3.0-or-later 4 | 5 | root = true 6 | 7 | [*] 8 | charset = utf-8 9 | end_of_line = lf 10 | indent_size = 4 11 | indent_style = tab 12 | insert_final_newline = true 13 | trim_trailing_whitespace = true 14 | 15 | [*.yml] 16 | indent_size = 2 17 | indent_style = space 18 | 19 | [*.md] 20 | trim_trailing_whitespace = false 21 | 22 | [*.svg] 23 | insert_final_newline = false 24 | 25 | [package*.json] 26 | indent_size = 2 27 | indent_style = space 28 | 29 | [tests/psalm-baseline.xml] 30 | indent_size = 2 31 | indent_style = space 32 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | 6 | module.exports = { 7 | globals: { 8 | appVersion: true 9 | }, 10 | parserOptions: { 11 | requireConfigFile: false 12 | }, 13 | extends: [ 14 | '@nextcloud' 15 | ], 16 | rules: { 17 | 'jsdoc/require-jsdoc': 'off', 18 | 'jsdoc/tag-lines': 'off', 19 | 'vue/first-attribute-linebreak': 'off', 20 | 'import/extensions': 'off' 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: AGPL-3.0-or-later 3 | # Declare files that always have LF line endings on checkout 4 | * text eol=lf 5 | 6 | # Denote all files that are truly binary and should not be modified 7 | js/* binary 8 | screenshots/* binary 9 | *.png binary 10 | *.hif binary 11 | 12 | # Files to exclude from GitHub Languages statistics 13 | *.Dockerfile linguist-vendored=true 14 | l10n/* linguist-vendored=true 15 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: AGPL-3.0-or-later 3 | /appinfo/info.xml @andrey18106 @oleksandr-nc 4 | -------------------------------------------------------------------------------- /.github/CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | 5 | In the Nextcloud community, participants from all over the world come together to create Free Software for a free internet. This is made possible by the support, hard work and enthusiasm of thousands of people, including those who create and use Nextcloud software. 6 | 7 | Our code of conduct offers some guidance to ensure Nextcloud participants can cooperate effectively in a positive and inspiring atmosphere, and to explain how together we can strengthen and support each other. 8 | 9 | The Code of Conduct is shared by all contributors and users who engage with the Nextcloud team and its community services. It presents a summary of the shared values and “common sense” thinking in our community. 10 | 11 | You can find our full code of conduct on our website: https://nextcloud.com/code-of-conduct/ 12 | 13 | Please, keep our CoC in mind when you contribute! That way, everyone can be a part of our community in a productive, positive, creative and fun way. 14 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | 5 | We always welcome contributions. Have an issue or an idea for a feature? Let us know. Additionally, we happily accept pull requests. 6 | 7 | In order to make the process run more smoothly, you can make sure of the following things: 8 | 9 | - Announce that you're working on a feature/bugfix in the relevant issue 10 | - Make sure the tests are passing 11 | - If you have any questions you can let the maintainers above know privately via email, or simply open an issue on GitHub 12 | 13 | Please read the [Code of Conduct](https://nextcloud.com/community/code-of-conduct/). 14 | This document offers some guidance to ensure Nextcloud participants can cooperate effectively in a positive and inspiring atmosphere, and to explain how together we can strengthen and support each other. 15 | 16 | More information on how to contribute: https://nextcloud.com/contribute/ 17 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: AGPL-3.0-or-later 3 | contact_links: 4 | - name: 🚨 Report a security or privacy issue 5 | url: https://hackerone.com/nextcloud 6 | about: Report security and privacy related issues privately to the Nextcloud team, so we can coordinate the fix and release without potentially exposing all Nextcloud servers and users in the meantime. 7 | - name: ❓ Community Support and Help 8 | url: https://help.nextcloud.com/ 9 | about: Configuration, webserver/proxy or performance issues and other questions 10 | - name: 💼 Nextcloud Enterprise 11 | url: https://portal.nextcloud.com/ 12 | about: If you are a Nextcloud Enterprise customer, or need Professional support, so it can be resolved directly by our dedicated engineers more quickly 13 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: AGPL-3.0-or-later 3 | name: 🚀 Feature request 4 | description: Suggest a new feature, enhancement to an existing, etc. 5 | labels: ['New Feature', 'Needs Triage'] 6 | 7 | body: 8 | - type: textarea 9 | attributes: 10 | label: Describe why it is important and where it will be useful 11 | validations: 12 | required: true 13 | - type: textarea 14 | attributes: 15 | label: Describe your proposed solution 16 | validations: 17 | required: true 18 | - type: textarea 19 | attributes: 20 | label: Describe alternatives you've considered, if relevant 21 | - type: textarea 22 | attributes: 23 | label: Additional context 24 | -------------------------------------------------------------------------------- /.github/SECURITY.md: -------------------------------------------------------------------------------- 1 | 5 | # Security Policy 6 | 7 | ## Supported Versions 8 | 9 | Only the latest non beta release version of `app_api` are currently being supported with security updates. 10 | 11 | ## Reporting a Vulnerability 12 | 13 | Security is very important to us. If you have discovered a security issue with Nextcloud, 14 | please read our responsible disclosure guidelines and contact us at [hackerone.com/nextcloud](https://hackerone.com/nextcloud). 15 | Your report should include: 16 | 17 | - Product version 18 | - A vulnerability description 19 | - Reproduction steps 20 | 21 | If in scope of the project a member of the security team will confirm the vulnerability, determine its impact, and develop a fix. 22 | Otherwise, the team will contact the maintainer and make sure the issue gets fixed. 23 | The fix will be applied to the main branch, tested, and packaged in the next security release. 24 | The vulnerability will be publicly announced after the release. 25 | 26 | Finally, your name will be added to the [hall of fame](https://hackerone.com/nextcloud/thanks) 27 | as a thank you from the entire Nextcloud community. 28 | 29 | Note our [threat model](https://nextcloud.com/security/threat-model) to know what is expected behavior. 30 | 31 | Please visit https://nextcloud.com/security/ for further information about security. 32 | -------------------------------------------------------------------------------- /.github/triage-issue-bot-config.yml: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: MIT 3 | triage: 4 | first_ping_after_days: 7 # days to triage without reminder 5 | repeat_every_days: 7 # repeat reminder after X days 6 | escalation_ping: 3 # on which reminder it will be escalated 7 | escalation_mentions: 8 | - "@DaphneMuller" 9 | 10 | question: 11 | reminder_after_days: 7 # days to remove "question" tag, and apply tag to mark the issue as available to close. 12 | missing_info_label: "missing information" 13 | maintainers_allowlist: # their comments DO NOT clear the "question" label 14 | - "oleksandr-nc" 15 | - "kyteinsky" 16 | - "andrey18106" 17 | -------------------------------------------------------------------------------- /.github/workflows/block-merge-eol.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | # 6 | # SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors 7 | # SPDX-License-Identifier: MIT 8 | 9 | name: Block merges for EOL 10 | 11 | on: pull_request 12 | 13 | permissions: 14 | contents: read 15 | 16 | concurrency: 17 | group: block-merge-eol-${{ github.head_ref || github.run_id }} 18 | cancel-in-progress: true 19 | 20 | jobs: 21 | block-merges-eol: 22 | name: Block merges for EOL branches 23 | 24 | # Only run on stableXX branches 25 | if: startsWith( github.base_ref, 'stable') 26 | runs-on: ubuntu-latest-low 27 | 28 | steps: 29 | - name: Set server major version environment 30 | run: | 31 | # retrieve version number from branch reference 32 | server_major=$(echo "${{ github.base_ref }}" | sed -En 's/stable//p') 33 | echo "server_major=$server_major" >> $GITHUB_ENV 34 | echo "current_month=$(date +%Y-%m)" >> $GITHUB_ENV 35 | 36 | - name: Checking if ${{ env.server_major }} is EOL 37 | run: | 38 | curl -s https://raw.githubusercontent.com/nextcloud-releases/updater_server/production/config/major_versions.json \ 39 | | jq '.["${{ env.server_major }}"]["eol"] // "9999-99" | . >= "${{ env.current_month }}"' \ 40 | | grep -q true 41 | 42 | -------------------------------------------------------------------------------- /.github/workflows/block-merge-freeze.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | # 6 | # SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors 7 | # SPDX-License-Identifier: MIT 8 | 9 | name: Block merges during freezes 10 | 11 | on: 12 | pull_request: 13 | types: [opened, ready_for_review, reopened, synchronize] 14 | 15 | permissions: 16 | contents: read 17 | 18 | concurrency: 19 | group: block-merge-freeze-${{ github.head_ref || github.run_id }} 20 | cancel-in-progress: true 21 | 22 | jobs: 23 | block-merges-during-freeze: 24 | name: Block merges during freezes 25 | 26 | if: github.event.pull_request.draft == false 27 | 28 | runs-on: ubuntu-latest-low 29 | 30 | steps: 31 | - name: Register server reference to fallback to master branch 32 | run: | 33 | server_ref="$(if [ '${{ github.base_ref }}' = 'main' ]; then echo -n 'master'; else echo -n '${{ github.base_ref }}'; fi)" 34 | echo "server_ref=$server_ref" >> $GITHUB_ENV 35 | - name: Download version.php from ${{ env.server_ref }} 36 | run: curl 'https://raw.githubusercontent.com/nextcloud/server/${{ env.server_ref }}/version.php' --output version.php 37 | 38 | - name: Run check 39 | run: cat version.php | grep 'OC_VersionString' | grep -i -v 'RC' 40 | 41 | -------------------------------------------------------------------------------- /.github/workflows/node-build.yml: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: MIT 3 | name: Node Build 4 | 5 | on: 6 | pull_request: 7 | paths: 8 | - src/** 9 | - .eslintrc.js 10 | - stylelint.config.js 11 | - webpack.js 12 | push: 13 | branches: 14 | - main 15 | paths: 16 | - src/** 17 | - .eslintrc.js 18 | - stylelint.config.js 19 | - webpack.js 20 | 21 | jobs: 22 | build: 23 | name: node-build 24 | runs-on: ubuntu-latest 25 | 26 | steps: 27 | - name: Set app env 28 | run: echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV 29 | 30 | - name: Checkout 31 | uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 32 | with: 33 | path: ${{ env.APP_NAME }} 34 | 35 | - name: Read package.json node and npm engines version 36 | uses: skjnldsv/read-package-engines-version-actions@0ce2ed60f6df073a62a77c0a4958dd0fc68e32e7 # v2.1 37 | id: versions 38 | with: 39 | path: ${{ env.APP_NAME }} 40 | fallbackNode: "^20" 41 | fallbackNpm: "^9" 42 | 43 | - name: Set up node ${{ steps.versions.outputs.nodeVersion }} 44 | uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3 45 | with: 46 | node-version: ${{ steps.versions.outputs.nodeVersion }} 47 | 48 | - name: Set up npm ${{ steps.versions.outputs.npmVersion }} 49 | run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}" 50 | 51 | - name: Build ${{ env.APP_NAME }} 52 | run: | 53 | cd ${{ env.APP_NAME }} 54 | npm ci 55 | npm run build 56 | -------------------------------------------------------------------------------- /.github/workflows/reuse.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | 6 | # SPDX-FileCopyrightText: 2022 Free Software Foundation Europe e.V. 7 | # 8 | # SPDX-License-Identifier: CC0-1.0 9 | 10 | name: REUSE Compliance Check 11 | 12 | on: [pull_request] 13 | 14 | jobs: 15 | reuse-compliance-check: 16 | runs-on: ubuntu-latest 17 | steps: 18 | - name: Checkout 19 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 20 | with: 21 | persist-credentials: false 22 | 23 | - name: REUSE Compliance Check 24 | uses: fsfe/reuse-action@bb774aa972c2a89ff34781233d275075cbddf542 # v5.0.0 25 | -------------------------------------------------------------------------------- /.github/workflows/triage-question-label-guard.yml: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: MIT 3 | name: Clear "question" & "missing information" 4 | 5 | on: 6 | issue_comment: 7 | types: [created] 8 | 9 | permissions: 10 | issues: write 11 | 12 | jobs: 13 | clear-labels: 14 | if: github.event.issue.state == 'open' 15 | runs-on: ubuntu-latest 16 | steps: 17 | - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 18 | - name: Load question config via yq 19 | id: cfg 20 | run: | 21 | QUESTION=$(yq eval -o=json '.question' .github/triage-issue-bot-config.yml) 22 | printf "question<> $GITHUB_OUTPUT 23 | 24 | - name: Remove stale labels 25 | uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 26 | with: 27 | github-token: ${{ secrets.GITHUB_TOKEN }} 28 | script: | 29 | const cfg = JSON.parse(process.env.INPUT_QUESTION || '{}'); 30 | const allow = cfg.maintainers_allowlist.map(u => u.toLowerCase()); 31 | const user = context.payload.comment.user.login.toLowerCase(); 32 | if (allow.includes(user)) return; 33 | 34 | const labels = context.payload.issue.labels.map(l => l.name); 35 | for (const name of ['question', 'question-reminded', cfg.missing_info_label]) { 36 | if (labels.includes(name)) { 37 | await github.rest.issues.removeLabel({ 38 | ...context.repo, 39 | issue_number: context.issue.number, 40 | name 41 | }).catch(() => {}); 42 | } 43 | } 44 | env: 45 | INPUT_QUESTION: ${{ steps.cfg.outputs.question }} 46 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: AGPL-3.0-or-later 3 | .code-workspace 4 | .DS_Store 5 | .idea/ 6 | .vscode/ 7 | .vscode-upload.json 8 | .*.sw* 9 | node_modules 10 | .venv 11 | vendor 12 | _build 13 | certs 14 | .php-cs-fixer.cache 15 | dev 16 | -------------------------------------------------------------------------------- /.l10nignore: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: AGPL-3.0-or-later 3 | js/ 4 | vendor/ -------------------------------------------------------------------------------- /.nextcloudignore: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: AGPL-3.0-or-later 3 | .git 4 | .github 5 | .gitignore 6 | .tx 7 | .vscode 8 | .php-cs-fixer.* 9 | /.codecov.yml 10 | /.eslintrc.js 11 | /.gitattributes 12 | /.gitignore 13 | /.l10nignore 14 | /.nextcloudignore 15 | /.travis.yml 16 | /.pre-commit-config.yaml 17 | /babel.config.js 18 | /build 19 | /APPS.md 20 | /AUTHORS.md 21 | /README.md 22 | /composer.* 23 | /node_modules 24 | /screenshots 25 | /docs 26 | /src 27 | /vendor/bin 28 | /jest.config.js 29 | /Makefile 30 | /krankerl.toml 31 | /package-lock.json 32 | /package.json 33 | /postcss.config.js 34 | /psalm.xml 35 | /pyproject.toml 36 | /renovate.json 37 | /stylelint.config.js 38 | /webpack.* 39 | tests 40 | -------------------------------------------------------------------------------- /.php-cs-fixer.dist.php: -------------------------------------------------------------------------------- 1 | getFinder() 17 | ->ignoreVCSIgnored(true) 18 | ->notPath('build') 19 | ->notPath('l10n') 20 | ->notPath('src') 21 | ->notPath('vendor') 22 | ->in(__DIR__); 23 | return $config; 24 | -------------------------------------------------------------------------------- /.tx/backport: -------------------------------------------------------------------------------- 1 | main 2 | stable30 3 | stable29 4 | -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- 1 | [main] 2 | host = https://www.transifex.com 3 | lang_map = hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja, bg_BG: bg, cs_CZ: cs, fi_FI: fi 4 | 5 | [o:nextcloud:p:nextcloud:r:app_api] 6 | file_filter = translationfiles//app_api.po 7 | source_file = translationfiles/templates/app_api.pot 8 | source_lang = en 9 | type = PO 10 | -------------------------------------------------------------------------------- /AUTHORS.md: -------------------------------------------------------------------------------- 1 | 5 | # Authors 6 | 7 | Here is an inevitably incomplete list of MUCH-APPRECIATED CONTRIBUTORS -- 8 | people who have submitted patches, reported bugs, added translations, helped 9 | answer newbie questions, and generally made AppAPI that much better: 10 | 11 | - Alexander Piskun 12 | - Andrey Borysenko 13 | - Andy Scherzinger 14 | - Anupam Kumar 15 | - Edward Ly 16 | - Joas Schilling 17 | - Jos Poortvliet 18 | - Julien Veyssier 19 | - Kate <26026535+provokateurin@users.noreply.github.com> 20 | - Marcel Klehr 21 | - rakekniven <2069590+rakekniven@users.noreply.github.com> 22 | - Sami Finnilä <64466176+MB-Finski@users.noreply.github.com> 23 | - Volodymyr Stelmakh <2980619+vstelmakh@users.noreply.github.com> 24 | 25 | [//]: # () 26 | -------------------------------------------------------------------------------- /LICENSES/BSD-2-Clause.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2 | 3 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 4 | 5 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 6 | 7 | 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 8 | 9 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 10 | -------------------------------------------------------------------------------- /LICENSES/BSD-3-Clause.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) . 2 | 3 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 4 | 5 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 6 | 7 | 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 8 | 9 | 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 10 | 11 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 12 | -------------------------------------------------------------------------------- /LICENSES/ISC.txt: -------------------------------------------------------------------------------- 1 | ISC License: 2 | 3 | Copyright (c) 2004-2010 by Internet Systems Consortium, Inc. ("ISC") 4 | Copyright (c) 1995-2003 by Internet Software Consortium 5 | 6 | Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. 7 | 8 | THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 9 | -------------------------------------------------------------------------------- /LICENSES/MIT.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /REUSE.toml: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: AGPL-3.0-or-later 3 | version = 1 4 | SPDX-PackageName = "app_api" 5 | SPDX-PackageSupplier = "Nextcloud " 6 | SPDX-PackageDownloadLocation = "https://github.com/nextcloud/app_api" 7 | 8 | [[annotations]] 9 | path = ["l10n/**.js", "l10n/**.json"] 10 | precedence = "aggregate" 11 | SPDX-FileCopyrightText = "2023-2024 Nextcloud translators" 12 | SPDX-License-Identifier = "AGPL-3.0-or-later" 13 | 14 | [[annotations]] 15 | path = [".tx/config", ".tx/backport", "composer.json", "composer.lock", "package-lock.json", "package.json"] 16 | precedence = "aggregate" 17 | SPDX-FileCopyrightText = "2023 Nextcloud GmbH and Nextcloud contributors" 18 | SPDX-License-Identifier = "AGPL-3.0-or-later" 19 | 20 | # Workaround annotating the folders 21 | [[annotations]] 22 | path = ["docs/**", "js/**", ""] 23 | precedence = "aggregate" 24 | SPDX-FileCopyrightText = "2023 Nextcloud GmbH and Nextcloud contributors" 25 | SPDX-License-Identifier = "AGPL-3.0-or-later" 26 | 27 | [[annotations]] 28 | path = ["img/app.svg", "img/app-dark.svg"] 29 | precedence = "aggregate" 30 | SPDX-FileCopyrightText = "2018-2024 Google LLC" 31 | SPDX-License-Identifier = "Apache-2.0" 32 | -------------------------------------------------------------------------------- /appinfo/register_command.php: -------------------------------------------------------------------------------- 1 | getSystemValueBool('installed', false)) { 24 | $exAppOccService = Server::get(ExAppOccService::class); 25 | /** 26 | * @var ExAppOccCommand $occCommand 27 | * @var SymfonyApplication $application 28 | */ 29 | foreach ($exAppOccService->getOccCommands() as $occCommand) { 30 | $application->add($exAppOccService->buildCommand( 31 | $occCommand, 32 | $serverContainer 33 | )); 34 | } 35 | } 36 | } catch (NotFoundExceptionInterface|ContainerExceptionInterface $e) { 37 | } 38 | -------------------------------------------------------------------------------- /build-js/npm-post-build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors 4 | # SPDX-License-Identifier: AGPL-3.0-or-later 5 | 6 | set -e 7 | 8 | # Add licenses for source maps 9 | if [ -d "js" ]; then 10 | for f in js/*.js; do 11 | # If license file and source map exists copy license for the source map 12 | if [ -f "$f.license" ] && [ -f "$f.map" ]; then 13 | # Remove existing link 14 | [ -e "$f.map.license" ] || [ -L "$f.map.license" ] && rm "$f.map.license" 15 | # Create a new link 16 | ln -s "$(basename "$f.license")" "$f.map.license" 17 | fi 18 | done 19 | echo "Copying licenses for sourcemaps done" 20 | else 21 | echo "This script needs to be executed from the root of the repository" 22 | exit 1 23 | fi 24 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nextcloud/app_api", 3 | "description": "Nextcloud AppAPI provides a new API for external apps on different programming languages", 4 | "type": "project", 5 | "license": "AGPL-3.0-or-later", 6 | "authors": [ 7 | { 8 | "name": "Andrey Borysenko", 9 | "email": "andrey18106x@gmail.com", 10 | "homepage": "https://github.com/andrey18106" 11 | }, 12 | { 13 | "name": "Alexander Piskun", 14 | "email": "bigcat88@icloud.com", 15 | "homepage": "https://github.com/bigcat88" 16 | } 17 | ], 18 | "require-dev": { 19 | "nextcloud/ocp": "dev-master", 20 | "roave/security-advisories": "dev-latest", 21 | "psalm/phar": "^5.15", 22 | "nextcloud/coding-standard": "^1.1", 23 | "friendsofphp/php-cs-fixer": "3.16" 24 | }, 25 | "scripts": { 26 | "lint": "find . -name \\*.php -not -path './vendor/*' -print0 | xargs -0 -n1 php -l", 27 | "cs:check": "php-cs-fixer fix ./lib --dry-run --diff", 28 | "cs:fix": "php-cs-fixer fix ./lib", 29 | "psalm": "psalm.phar --threads=1", 30 | "psalm:update-baseline": "psalm.phar --threads=1 --update-baseline", 31 | "psalm:update-baseline:force": "psalm.phar --threads=1 --update-baseline --set-baseline=tests/psalm-baseline.xml", 32 | "psalm:clear": "psalm.phar --clear-cache && psalm.phar --clear-global-cache", 33 | "psalm:fix": "psalm.phar --alter --issues=InvalidReturnType,InvalidNullableReturnType,MissingParamType,InvalidFalsableReturnType" 34 | }, 35 | "config": { 36 | "optimize-autoloader": true, 37 | "classmap-authoritative": true, 38 | "platform": { 39 | "php": "8.1" 40 | } 41 | }, 42 | "autoload": { 43 | "psr-4": { 44 | "OCA\\AppAPI\\": "lib/" 45 | } 46 | }, 47 | "autoload-dev": { 48 | "psr-4": { 49 | "OCP\\": "vendor/nextcloud/ocp/OCP" 50 | } 51 | }, 52 | "require": { 53 | "ext-simplexml": "*" 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /css/filesactions.css: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | 6 | .icon-app-api { 7 | background-image: url('../img/app-dark.svg'); 8 | filter: var(--background-invert-if-dark); 9 | } 10 | 11 | /* For Nextcloud 27 */ 12 | .menuitem.action > img.icon { 13 | filter: var(--background-invert-if-dark); 14 | } 15 | -------------------------------------------------------------------------------- /img/app-dark.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/app.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /js/app_api-adminSettings.js.map.license: -------------------------------------------------------------------------------- 1 | app_api-adminSettings.js.license -------------------------------------------------------------------------------- /js/app_api-filesplugin.js.map.license: -------------------------------------------------------------------------------- 1 | app_api-filesplugin.js.license -------------------------------------------------------------------------------- /js/app_api-node_modules_nextcloud_dialogs_dist_chunks_index-C1azEbgd_mjs.js: -------------------------------------------------------------------------------- 1 | "use strict";(self.webpackChunkapp_api=self.webpackChunkapp_api||[]).push([["node_modules_nextcloud_dialogs_dist_chunks_index-C1azEbgd_mjs"],{4473:(e,s,_)=>{_.d(s,{FilePickerVue:()=>d});const d=(0,_(5471).$V)((()=>_.e("vendors-node_modules_nextcloud_dialogs_dist_chunks_FilePicker-CDU2njOJ_mjs").then(_.bind(_,8383))))}}]); 2 | //# sourceMappingURL=app_api-node_modules_nextcloud_dialogs_dist_chunks_index-C1azEbgd_mjs.js.map?v=aa8614dd8b8a64a2d1a0 -------------------------------------------------------------------------------- /js/app_api-node_modules_nextcloud_dialogs_dist_chunks_index-C1azEbgd_mjs.js.license: -------------------------------------------------------------------------------- 1 | SPDX-License-Identifier: MIT 2 | SPDX-License-Identifier: AGPL-3.0-or-later 3 | SPDX-FileCopyrightText: Evan You 4 | SPDX-FileCopyrightText: @nextcloud/dialogs developers 5 | 6 | 7 | This file is generated from multiple sources. Included packages: 8 | - @nextcloud/dialogs 9 | - version: 5.3.7 10 | - license: AGPL-3.0-or-later 11 | - vue 12 | - version: 2.7.16 13 | - license: MIT 14 | -------------------------------------------------------------------------------- /js/app_api-node_modules_nextcloud_dialogs_dist_chunks_index-C1azEbgd_mjs.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"app_api-node_modules_nextcloud_dialogs_dist_chunks_index-C1azEbgd_mjs.js?v=aa8614dd8b8a64a2d1a0","mappings":"0LACA,MAAMA,GAAgB,E,QAAA,KAAqB,IAAM,wG","sources":["webpack:///app_api/node_modules/@nextcloud/dialogs/dist/chunks/index-C1azEbgd.mjs"],"sourcesContent":["import { defineAsyncComponent } from \"vue\";\nconst FilePickerVue = defineAsyncComponent(() => import(\"./FilePicker-CDU2njOJ.mjs\"));\nexport {\n FilePickerVue\n};\n"],"names":["FilePickerVue"],"sourceRoot":""} -------------------------------------------------------------------------------- /js/app_api-node_modules_nextcloud_dialogs_dist_chunks_index-C1azEbgd_mjs.js.map.license: -------------------------------------------------------------------------------- 1 | app_api-node_modules_nextcloud_dialogs_dist_chunks_index-C1azEbgd_mjs.js.license -------------------------------------------------------------------------------- /js/app_api-vendors-node_modules_nextcloud_dialogs_dist_chunks_FilePicker-CDU2njOJ_mjs.js.map.license: -------------------------------------------------------------------------------- 1 | app_api-vendors-node_modules_nextcloud_dialogs_dist_chunks_FilePicker-CDU2njOJ_mjs.js.license -------------------------------------------------------------------------------- /js/proxy_js/0.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/app_api/db0f559e8ac6c0b333dd3e25405e1ebd1e629a3c/js/proxy_js/0.js -------------------------------------------------------------------------------- /js/proxy_js/1.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/app_api/db0f559e8ac6c0b333dd3e25405e1ebd1e629a3c/js/proxy_js/1.js -------------------------------------------------------------------------------- /js/proxy_js/2.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/app_api/db0f559e8ac6c0b333dd3e25405e1ebd1e629a3c/js/proxy_js/2.js -------------------------------------------------------------------------------- /js/proxy_js/3.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/app_api/db0f559e8ac6c0b333dd3e25405e1ebd1e629a3c/js/proxy_js/3.js -------------------------------------------------------------------------------- /js/proxy_js/4.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/app_api/db0f559e8ac6c0b333dd3e25405e1ebd1e629a3c/js/proxy_js/4.js -------------------------------------------------------------------------------- /js/proxy_js/5.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/app_api/db0f559e8ac6c0b333dd3e25405e1ebd1e629a3c/js/proxy_js/5.js -------------------------------------------------------------------------------- /js/proxy_js/6.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/app_api/db0f559e8ac6c0b333dd3e25405e1ebd1e629a3c/js/proxy_js/6.js -------------------------------------------------------------------------------- /js/proxy_js/7.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/app_api/db0f559e8ac6c0b333dd3e25405e1ebd1e629a3c/js/proxy_js/7.js -------------------------------------------------------------------------------- /js/proxy_js/8.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/app_api/db0f559e8ac6c0b333dd3e25405e1ebd1e629a3c/js/proxy_js/8.js -------------------------------------------------------------------------------- /js/proxy_js/9.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/app_api/db0f559e8ac6c0b333dd3e25405e1ebd1e629a3c/js/proxy_js/9.js -------------------------------------------------------------------------------- /krankerl.toml: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: AGPL-3.0-or-later 3 | [package] 4 | before_cmds = [ 5 | "npm ci", 6 | "npm run build", 7 | ] 8 | -------------------------------------------------------------------------------- /l10n/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/app_api/db0f559e8ac6c0b333dd3e25405e1ebd1e629a3c/l10n/.gitkeep -------------------------------------------------------------------------------- /l10n/af.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Skrap", 5 | "Host" : "Gasheer", 6 | "From" : "Van", 7 | "To" : "Aan", 8 | "Add" : "Voeg toe", 9 | "Confirm" : "Bevestig", 10 | "Save" : "Stoor", 11 | "Register" : "Registreer", 12 | "Update to {version}" : "Werk by na {version}", 13 | "View in store" : "Bekyk in winkel", 14 | "Visit website" : "Besoek webwerf", 15 | "User documentation" : "Gebruikerdokumentasie", 16 | "Admin documentation" : "Admindokumentasie", 17 | "Developer documentation" : "Ontwikkelaardokumentasie", 18 | "Icon" : "Ikoon", 19 | "Version" : "Weergawe", 20 | "Actions" : "Aksies", 21 | "Display Name" : "Vertoonnaam", 22 | "Your apps" : "U toeps", 23 | "Documentation" : "Dokumentasie", 24 | "Details" : "Besonderhede", 25 | "Changelog" : "Veranderingslog", 26 | "Disabled apps" : "Gedeaktiveerde toeps", 27 | "Updates" : "Bywerkings", 28 | "Disable" : "Deaktiveer" 29 | }, 30 | "nplurals=2; plural=(n != 1);"); 31 | -------------------------------------------------------------------------------- /l10n/af.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Skrap", 3 | "Host" : "Gasheer", 4 | "From" : "Van", 5 | "To" : "Aan", 6 | "Add" : "Voeg toe", 7 | "Confirm" : "Bevestig", 8 | "Save" : "Stoor", 9 | "Register" : "Registreer", 10 | "Update to {version}" : "Werk by na {version}", 11 | "View in store" : "Bekyk in winkel", 12 | "Visit website" : "Besoek webwerf", 13 | "User documentation" : "Gebruikerdokumentasie", 14 | "Admin documentation" : "Admindokumentasie", 15 | "Developer documentation" : "Ontwikkelaardokumentasie", 16 | "Icon" : "Ikoon", 17 | "Version" : "Weergawe", 18 | "Actions" : "Aksies", 19 | "Display Name" : "Vertoonnaam", 20 | "Your apps" : "U toeps", 21 | "Documentation" : "Dokumentasie", 22 | "Details" : "Besonderhede", 23 | "Changelog" : "Veranderingslog", 24 | "Disabled apps" : "Gedeaktiveerde toeps", 25 | "Updates" : "Bywerkings", 26 | "Disable" : "Deaktiveer" 27 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 28 | } -------------------------------------------------------------------------------- /l10n/az.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Sil", 5 | "Edit" : "Dəyişiklik et", 6 | "Name" : "Ad", 7 | "Host" : "Şəbəkədə ünvan", 8 | "Enabled" : "İşə salınıb", 9 | "Disabled" : "Dayandırılıb", 10 | "Confirm" : "Təsdiq edin", 11 | "Save" : "Saxla", 12 | "Update to {version}" : "{version} dək yenilə", 13 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Bu proqram yüklənə bilməz ona görə ki, göstərilən asılılıqlar yerinə yetirilməyib:", 14 | "View in store" : "Dükanda bax", 15 | "Visit website" : "Sayta keç", 16 | "Report a bug" : "Səhv haqqında bildir", 17 | "User documentation" : "İstifadəçi dokumentasiyası", 18 | "Admin documentation" : "İdarəci dokumentasiyası", 19 | "Developer documentation" : "Yaradıcı sənədləşməsi", 20 | "Supported" : "Dəstəklənir", 21 | "Featured" : "Seçilmiş", 22 | "Version" : "Versiya", 23 | "Actions" : "İşlər", 24 | "Documentation" : "Sənədlər", 25 | "Details" : "Detallar", 26 | "Changelog" : "Dəyişikliklər jurnalı", 27 | "Updates" : "Yenilənmələr", 28 | "Disable" : "Dayandır" 29 | }, 30 | "nplurals=2; plural=(n != 1);"); 31 | -------------------------------------------------------------------------------- /l10n/az.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Sil", 3 | "Edit" : "Dəyişiklik et", 4 | "Name" : "Ad", 5 | "Host" : "Şəbəkədə ünvan", 6 | "Enabled" : "İşə salınıb", 7 | "Disabled" : "Dayandırılıb", 8 | "Confirm" : "Təsdiq edin", 9 | "Save" : "Saxla", 10 | "Update to {version}" : "{version} dək yenilə", 11 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Bu proqram yüklənə bilməz ona görə ki, göstərilən asılılıqlar yerinə yetirilməyib:", 12 | "View in store" : "Dükanda bax", 13 | "Visit website" : "Sayta keç", 14 | "Report a bug" : "Səhv haqqında bildir", 15 | "User documentation" : "İstifadəçi dokumentasiyası", 16 | "Admin documentation" : "İdarəci dokumentasiyası", 17 | "Developer documentation" : "Yaradıcı sənədləşməsi", 18 | "Supported" : "Dəstəklənir", 19 | "Featured" : "Seçilmiş", 20 | "Version" : "Versiya", 21 | "Actions" : "İşlər", 22 | "Documentation" : "Sənədlər", 23 | "Details" : "Detallar", 24 | "Changelog" : "Dəyişikliklər jurnalı", 25 | "Updates" : "Yenilənmələr", 26 | "Disable" : "Dayandır" 27 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 28 | } -------------------------------------------------------------------------------- /l10n/bn_BD.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Cancel" : "বাতিল করুন", 5 | "Delete" : "মুছে", 6 | "Edit" : "সম্পাদনা", 7 | "Name" : "নাম", 8 | "Host" : "হোস্ট", 9 | "Enabled" : "কার্যকর", 10 | "Add" : "যোগ কর", 11 | "Disabled" : "অকার্যকর", 12 | "Save" : "সংরক্ষণ", 13 | "Version" : "ভার্সন", 14 | "Actions" : "পদক্ষেপসমূহ", 15 | "Type" : "ধরণ", 16 | "Documentation" : "নথিবদ্ধকরণ", 17 | "Details" : "বিসতারিত", 18 | "Disable" : "নিষ্ক্রিয়" 19 | }, 20 | "nplurals=2; plural=(n != 1);"); 21 | -------------------------------------------------------------------------------- /l10n/bn_BD.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Cancel" : "বাতিল করুন", 3 | "Delete" : "মুছে", 4 | "Edit" : "সম্পাদনা", 5 | "Name" : "নাম", 6 | "Host" : "হোস্ট", 7 | "Enabled" : "কার্যকর", 8 | "Add" : "যোগ কর", 9 | "Disabled" : "অকার্যকর", 10 | "Save" : "সংরক্ষণ", 11 | "Version" : "ভার্সন", 12 | "Actions" : "পদক্ষেপসমূহ", 13 | "Type" : "ধরণ", 14 | "Documentation" : "নথিবদ্ধকরণ", 15 | "Details" : "বিসতারিত", 16 | "Disable" : "নিষ্ক্রিয়" 17 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 18 | } -------------------------------------------------------------------------------- /l10n/bs.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Cancel" : "Odustani", 5 | "Delete" : "Obriši", 6 | "Edit" : "Izmjeni", 7 | "Name" : "Ime", 8 | "Enabled" : "Aktivirano", 9 | "Disabled" : "Onemogućeno", 10 | "Save" : "Spremi", 11 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Ova aplikacija se ne može instalirati zbog slijedećih neispunjenih ovisnosti:", 12 | "Version" : "Verzija", 13 | "Actions" : "Radnje", 14 | "Documentation" : "Dokumentacija", 15 | "Updates" : "Ažuriranja", 16 | "Disable" : "Onemogući" 17 | }, 18 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); 19 | -------------------------------------------------------------------------------- /l10n/bs.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Cancel" : "Odustani", 3 | "Delete" : "Obriši", 4 | "Edit" : "Izmjeni", 5 | "Name" : "Ime", 6 | "Enabled" : "Aktivirano", 7 | "Disabled" : "Onemogućeno", 8 | "Save" : "Spremi", 9 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Ova aplikacija se ne može instalirati zbog slijedećih neispunjenih ovisnosti:", 10 | "Version" : "Verzija", 11 | "Actions" : "Radnje", 12 | "Documentation" : "Dokumentacija", 13 | "Updates" : "Ažuriranja", 14 | "Disable" : "Onemogući" 15 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" 16 | } -------------------------------------------------------------------------------- /l10n/cy_GB.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Dileu", 5 | "Edit" : "Golygu", 6 | "Name" : "Enw", 7 | "Confirm" : "Cadarnhau", 8 | "Save" : "Cadw", 9 | "Register" : "Cofrestru", 10 | "User documentation" : "Dogfennaeth defnyddiwr", 11 | "Admin documentation" : "Dogfennaeth weinyddol", 12 | "Developer documentation" : "Dogfennaeth datblygwr", 13 | "Featured" : "Nodwedd", 14 | "Version" : "Fersiwn", 15 | "Actions" : "Gweithredoedd", 16 | "Type" : "Math", 17 | "Documentation" : "Dogfennaeth", 18 | "Details" : "Manylion", 19 | "Changelog" : "Cofnod newid", 20 | "Featured apps" : "Apiau dan sylw", 21 | "Disable" : "Analluogi" 22 | }, 23 | "nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;"); 24 | -------------------------------------------------------------------------------- /l10n/cy_GB.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Dileu", 3 | "Edit" : "Golygu", 4 | "Name" : "Enw", 5 | "Confirm" : "Cadarnhau", 6 | "Save" : "Cadw", 7 | "Register" : "Cofrestru", 8 | "User documentation" : "Dogfennaeth defnyddiwr", 9 | "Admin documentation" : "Dogfennaeth weinyddol", 10 | "Developer documentation" : "Dogfennaeth datblygwr", 11 | "Featured" : "Nodwedd", 12 | "Version" : "Fersiwn", 13 | "Actions" : "Gweithredoedd", 14 | "Type" : "Math", 15 | "Documentation" : "Dogfennaeth", 16 | "Details" : "Manylion", 17 | "Changelog" : "Cofnod newid", 18 | "Featured apps" : "Apiau dan sylw", 19 | "Disable" : "Analluogi" 20 | },"pluralForm" :"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;" 21 | } -------------------------------------------------------------------------------- /l10n/es_419.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Borrar", 5 | "Edit" : "Editar", 6 | "Name" : "Nombre", 7 | "Host" : "Servidor", 8 | "Add" : "Guardar", 9 | "Confirm" : "Confirmar", 10 | "Save" : "Guardar", 11 | "Register" : "Registrar", 12 | "Update to {version}" : "Actualizar a {version}", 13 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 14 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 15 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 16 | "View in store" : "Ver en la tienda", 17 | "Visit website" : "Visita el sitio web", 18 | "Report a bug" : "Reporta un detalle", 19 | "User documentation" : "Documentación del usuario", 20 | "Admin documentation" : "Documentación del administrador", 21 | "Developer documentation" : "Documentación del desarrollador", 22 | "Featured" : "Destacado", 23 | "Icon" : "Ícono", 24 | "Version" : "Versión", 25 | "Level" : "Nivel", 26 | "Actions" : "Acciones", 27 | "Type" : "Tipo", 28 | "Display Name" : "Nombre a desplegar", 29 | "Your apps" : "Tus aplicaciones", 30 | "Documentation" : "Documentación", 31 | "Details" : "Detalles", 32 | "Changelog" : "Bitácora de cambios", 33 | "Disabled apps" : "Aplicaciones deshabilitadas", 34 | "Updates" : "Actualizaciones", 35 | "Disable" : "Deshabilitar" 36 | }, 37 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 38 | -------------------------------------------------------------------------------- /l10n/es_419.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Borrar", 3 | "Edit" : "Editar", 4 | "Name" : "Nombre", 5 | "Host" : "Servidor", 6 | "Add" : "Guardar", 7 | "Confirm" : "Confirmar", 8 | "Save" : "Guardar", 9 | "Register" : "Registrar", 10 | "Update to {version}" : "Actualizar a {version}", 11 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 12 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 13 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 14 | "View in store" : "Ver en la tienda", 15 | "Visit website" : "Visita el sitio web", 16 | "Report a bug" : "Reporta un detalle", 17 | "User documentation" : "Documentación del usuario", 18 | "Admin documentation" : "Documentación del administrador", 19 | "Developer documentation" : "Documentación del desarrollador", 20 | "Featured" : "Destacado", 21 | "Icon" : "Ícono", 22 | "Version" : "Versión", 23 | "Level" : "Nivel", 24 | "Actions" : "Acciones", 25 | "Type" : "Tipo", 26 | "Display Name" : "Nombre a desplegar", 27 | "Your apps" : "Tus aplicaciones", 28 | "Documentation" : "Documentación", 29 | "Details" : "Detalles", 30 | "Changelog" : "Bitácora de cambios", 31 | "Disabled apps" : "Aplicaciones deshabilitadas", 32 | "Updates" : "Actualizaciones", 33 | "Disable" : "Deshabilitar" 34 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 35 | } -------------------------------------------------------------------------------- /l10n/es_CL.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Borrar", 5 | "Edit" : "Editar", 6 | "Name" : "Nombre", 7 | "Host" : "Servidor", 8 | "Enabled" : "Habilitado", 9 | "Remove" : "Remover", 10 | "Add" : "Guardar", 11 | "Disabled" : "Deshabilitado", 12 | "Confirm" : "Confirmar", 13 | "Save" : "Guardar", 14 | "Register" : "Registrar", 15 | "Update to {version}" : "Actualizar a {version}", 16 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 17 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 18 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 19 | "View in store" : "Ver en la tienda", 20 | "Visit website" : "Visita el sitio web", 21 | "Report a bug" : "Reporta un detalle", 22 | "User documentation" : "Documentación del usuario", 23 | "Admin documentation" : "Documentación del administrador", 24 | "Developer documentation" : "Documentación del desarrollador", 25 | "Featured" : "Destacado", 26 | "Icon" : "Ícono", 27 | "Version" : "Versión", 28 | "Daemon" : "Demonio", 29 | "Level" : "Nivel", 30 | "Actions" : "Acciones", 31 | "Type" : "Tipo", 32 | "Display Name" : "Nombre a desplegar", 33 | "Your apps" : "Tus aplicaciones", 34 | "Documentation" : "Documentación", 35 | "Changelog" : "Bitácora de cambios", 36 | "Disabled apps" : "Aplicaciones deshabilitadas", 37 | "Updates" : "Actualizaciones", 38 | "Disable" : "Deshabilitar" 39 | }, 40 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 41 | -------------------------------------------------------------------------------- /l10n/es_CL.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Borrar", 3 | "Edit" : "Editar", 4 | "Name" : "Nombre", 5 | "Host" : "Servidor", 6 | "Enabled" : "Habilitado", 7 | "Remove" : "Remover", 8 | "Add" : "Guardar", 9 | "Disabled" : "Deshabilitado", 10 | "Confirm" : "Confirmar", 11 | "Save" : "Guardar", 12 | "Register" : "Registrar", 13 | "Update to {version}" : "Actualizar a {version}", 14 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 15 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 16 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 17 | "View in store" : "Ver en la tienda", 18 | "Visit website" : "Visita el sitio web", 19 | "Report a bug" : "Reporta un detalle", 20 | "User documentation" : "Documentación del usuario", 21 | "Admin documentation" : "Documentación del administrador", 22 | "Developer documentation" : "Documentación del desarrollador", 23 | "Featured" : "Destacado", 24 | "Icon" : "Ícono", 25 | "Version" : "Versión", 26 | "Daemon" : "Demonio", 27 | "Level" : "Nivel", 28 | "Actions" : "Acciones", 29 | "Type" : "Tipo", 30 | "Display Name" : "Nombre a desplegar", 31 | "Your apps" : "Tus aplicaciones", 32 | "Documentation" : "Documentación", 33 | "Changelog" : "Bitácora de cambios", 34 | "Disabled apps" : "Aplicaciones deshabilitadas", 35 | "Updates" : "Actualizaciones", 36 | "Disable" : "Deshabilitar" 37 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 38 | } -------------------------------------------------------------------------------- /l10n/es_CO.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Borrar", 5 | "Edit" : "Editar", 6 | "Name" : "Nombre", 7 | "Host" : "Servidor", 8 | "Enabled" : "Habilitado", 9 | "Add" : "Guardar", 10 | "Disabled" : "Deshabilitado", 11 | "Confirm" : "Confirmar", 12 | "Save" : "Guardar", 13 | "Register" : "Registrar", 14 | "Update to {version}" : "Actualizar a {version}", 15 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 16 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 17 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 18 | "View in store" : "Ver en la tienda", 19 | "Visit website" : "Visita el sitio web", 20 | "Report a bug" : "Reporta un detalle", 21 | "User documentation" : "Documentación del usuario", 22 | "Admin documentation" : "Documentación del administrador", 23 | "Developer documentation" : "Documentación del desarrollador", 24 | "Featured" : "Destacado", 25 | "Icon" : "Ícono", 26 | "Version" : "Versión", 27 | "Daemon" : "Demonio", 28 | "Level" : "Nivel", 29 | "Actions" : "Acciones", 30 | "Type" : "Tipo", 31 | "Display Name" : "Nombre a desplegar", 32 | "Your apps" : "Tus aplicaciones", 33 | "Documentation" : "Documentación", 34 | "Details" : "Detalles", 35 | "Changelog" : "Bitácora de cambios", 36 | "Disabled apps" : "Aplicaciones deshabilitadas", 37 | "Updates" : "Actualizaciones", 38 | "Disable" : "Deshabilitar" 39 | }, 40 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 41 | -------------------------------------------------------------------------------- /l10n/es_CO.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Borrar", 3 | "Edit" : "Editar", 4 | "Name" : "Nombre", 5 | "Host" : "Servidor", 6 | "Enabled" : "Habilitado", 7 | "Add" : "Guardar", 8 | "Disabled" : "Deshabilitado", 9 | "Confirm" : "Confirmar", 10 | "Save" : "Guardar", 11 | "Register" : "Registrar", 12 | "Update to {version}" : "Actualizar a {version}", 13 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 14 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 15 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 16 | "View in store" : "Ver en la tienda", 17 | "Visit website" : "Visita el sitio web", 18 | "Report a bug" : "Reporta un detalle", 19 | "User documentation" : "Documentación del usuario", 20 | "Admin documentation" : "Documentación del administrador", 21 | "Developer documentation" : "Documentación del desarrollador", 22 | "Featured" : "Destacado", 23 | "Icon" : "Ícono", 24 | "Version" : "Versión", 25 | "Daemon" : "Demonio", 26 | "Level" : "Nivel", 27 | "Actions" : "Acciones", 28 | "Type" : "Tipo", 29 | "Display Name" : "Nombre a desplegar", 30 | "Your apps" : "Tus aplicaciones", 31 | "Documentation" : "Documentación", 32 | "Details" : "Detalles", 33 | "Changelog" : "Bitácora de cambios", 34 | "Disabled apps" : "Aplicaciones deshabilitadas", 35 | "Updates" : "Actualizaciones", 36 | "Disable" : "Deshabilitar" 37 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 38 | } -------------------------------------------------------------------------------- /l10n/es_CR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Borrar", 5 | "Edit" : "Editar", 6 | "Name" : "Nombre", 7 | "Host" : "Servidor", 8 | "Enabled" : "Habilitado", 9 | "Add" : "Guardar", 10 | "Disabled" : "Deshabilitado", 11 | "Confirm" : "Confirmar", 12 | "Save" : "Guardar", 13 | "Register" : "Registrar", 14 | "Update to {version}" : "Actualizar a {version}", 15 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 16 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 17 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 18 | "View in store" : "Ver en la tienda", 19 | "Visit website" : "Visita el sitio web", 20 | "Report a bug" : "Reporta un detalle", 21 | "User documentation" : "Documentación del usuario", 22 | "Admin documentation" : "Documentación del administrador", 23 | "Developer documentation" : "Documentación del desarrollador", 24 | "Featured" : "Destacado", 25 | "Icon" : "Ícono", 26 | "Version" : "Versión", 27 | "Daemon" : "Demonio", 28 | "Level" : "Nivel", 29 | "Actions" : "Acciones", 30 | "Display Name" : "Nombre a desplegar", 31 | "Your apps" : "Tus aplicaciones", 32 | "Documentation" : "Documentación", 33 | "Details" : "Detalles", 34 | "Changelog" : "Bitácora de cambios", 35 | "Disabled apps" : "Aplicaciones deshabilitadas", 36 | "Updates" : "Actualizaciones", 37 | "Disable" : "Deshabilitar" 38 | }, 39 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 40 | -------------------------------------------------------------------------------- /l10n/es_CR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Borrar", 3 | "Edit" : "Editar", 4 | "Name" : "Nombre", 5 | "Host" : "Servidor", 6 | "Enabled" : "Habilitado", 7 | "Add" : "Guardar", 8 | "Disabled" : "Deshabilitado", 9 | "Confirm" : "Confirmar", 10 | "Save" : "Guardar", 11 | "Register" : "Registrar", 12 | "Update to {version}" : "Actualizar a {version}", 13 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 14 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 15 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 16 | "View in store" : "Ver en la tienda", 17 | "Visit website" : "Visita el sitio web", 18 | "Report a bug" : "Reporta un detalle", 19 | "User documentation" : "Documentación del usuario", 20 | "Admin documentation" : "Documentación del administrador", 21 | "Developer documentation" : "Documentación del desarrollador", 22 | "Featured" : "Destacado", 23 | "Icon" : "Ícono", 24 | "Version" : "Versión", 25 | "Daemon" : "Demonio", 26 | "Level" : "Nivel", 27 | "Actions" : "Acciones", 28 | "Display Name" : "Nombre a desplegar", 29 | "Your apps" : "Tus aplicaciones", 30 | "Documentation" : "Documentación", 31 | "Details" : "Detalles", 32 | "Changelog" : "Bitácora de cambios", 33 | "Disabled apps" : "Aplicaciones deshabilitadas", 34 | "Updates" : "Actualizaciones", 35 | "Disable" : "Deshabilitar" 36 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 37 | } -------------------------------------------------------------------------------- /l10n/es_DO.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Borrar", 5 | "Edit" : "Editar", 6 | "Name" : "Nombre", 7 | "Host" : "Servidor", 8 | "Enabled" : "Habilitado", 9 | "Add" : "Guardar", 10 | "Disabled" : "Deshabilitado", 11 | "Confirm" : "Confirmar", 12 | "Save" : "Guardar", 13 | "Register" : "Registrar", 14 | "Update to {version}" : "Actualizar a {version}", 15 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 16 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 17 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 18 | "View in store" : "Ver en la tienda", 19 | "Visit website" : "Visita el sitio web", 20 | "Report a bug" : "Reporta un detalle", 21 | "User documentation" : "Documentación del usuario", 22 | "Admin documentation" : "Documentación del administrador", 23 | "Developer documentation" : "Documentación del desarrollador", 24 | "Featured" : "Destacado", 25 | "Icon" : "Ícono", 26 | "Version" : "Versión", 27 | "Daemon" : "Demonio", 28 | "Level" : "Nivel", 29 | "Actions" : "Acciones", 30 | "Display Name" : "Nombre a desplegar", 31 | "Your apps" : "Tus aplicaciones", 32 | "Documentation" : "Documentación", 33 | "Details" : "Detalles", 34 | "Changelog" : "Bitácora de cambios", 35 | "Disabled apps" : "Aplicaciones deshabilitadas", 36 | "Updates" : "Actualizaciones", 37 | "Enable" : "Habilitar", 38 | "Disable" : "Deshabilitar" 39 | }, 40 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 41 | -------------------------------------------------------------------------------- /l10n/es_DO.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Borrar", 3 | "Edit" : "Editar", 4 | "Name" : "Nombre", 5 | "Host" : "Servidor", 6 | "Enabled" : "Habilitado", 7 | "Add" : "Guardar", 8 | "Disabled" : "Deshabilitado", 9 | "Confirm" : "Confirmar", 10 | "Save" : "Guardar", 11 | "Register" : "Registrar", 12 | "Update to {version}" : "Actualizar a {version}", 13 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 14 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 15 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 16 | "View in store" : "Ver en la tienda", 17 | "Visit website" : "Visita el sitio web", 18 | "Report a bug" : "Reporta un detalle", 19 | "User documentation" : "Documentación del usuario", 20 | "Admin documentation" : "Documentación del administrador", 21 | "Developer documentation" : "Documentación del desarrollador", 22 | "Featured" : "Destacado", 23 | "Icon" : "Ícono", 24 | "Version" : "Versión", 25 | "Daemon" : "Demonio", 26 | "Level" : "Nivel", 27 | "Actions" : "Acciones", 28 | "Display Name" : "Nombre a desplegar", 29 | "Your apps" : "Tus aplicaciones", 30 | "Documentation" : "Documentación", 31 | "Details" : "Detalles", 32 | "Changelog" : "Bitácora de cambios", 33 | "Disabled apps" : "Aplicaciones deshabilitadas", 34 | "Updates" : "Actualizaciones", 35 | "Enable" : "Habilitar", 36 | "Disable" : "Deshabilitar" 37 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 38 | } -------------------------------------------------------------------------------- /l10n/es_GT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Borrar", 5 | "Edit" : "Editar", 6 | "Name" : "Nombre", 7 | "Host" : "Servidor", 8 | "Enabled" : "Habilitado", 9 | "From" : "De", 10 | "To" : "Para", 11 | "Add" : "Guardar", 12 | "Disabled" : "Deshabilitado", 13 | "Confirm" : "Confirmar", 14 | "Save" : "Guardar", 15 | "Register" : "Registrar", 16 | "Update to {version}" : "Actualizar a {version}", 17 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 18 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 19 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 20 | "View in store" : "Ver en la tienda", 21 | "Visit website" : "Visita el sitio web", 22 | "Report a bug" : "Reporta un detalle", 23 | "User documentation" : "Documentación del usuario", 24 | "Admin documentation" : "Documentación del administrador", 25 | "Developer documentation" : "Documentación del desarrollador", 26 | "Featured" : "Destacado", 27 | "Icon" : "Ícono", 28 | "Version" : "Versión", 29 | "Daemon" : "Demonio", 30 | "Level" : "Nivel", 31 | "Actions" : "Acciones", 32 | "Type" : "Tipo", 33 | "Display Name" : "Nombre a desplegar", 34 | "Your apps" : "Tus aplicaciones", 35 | "Documentation" : "Documentación", 36 | "Details" : "Detalles", 37 | "Changelog" : "Bitácora de cambios", 38 | "Disabled apps" : "Aplicaciones deshabilitadas", 39 | "Updates" : "Actualizaciones", 40 | "Disable" : "Deshabilitar" 41 | }, 42 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 43 | -------------------------------------------------------------------------------- /l10n/es_GT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Borrar", 3 | "Edit" : "Editar", 4 | "Name" : "Nombre", 5 | "Host" : "Servidor", 6 | "Enabled" : "Habilitado", 7 | "From" : "De", 8 | "To" : "Para", 9 | "Add" : "Guardar", 10 | "Disabled" : "Deshabilitado", 11 | "Confirm" : "Confirmar", 12 | "Save" : "Guardar", 13 | "Register" : "Registrar", 14 | "Update to {version}" : "Actualizar a {version}", 15 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 16 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 17 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 18 | "View in store" : "Ver en la tienda", 19 | "Visit website" : "Visita el sitio web", 20 | "Report a bug" : "Reporta un detalle", 21 | "User documentation" : "Documentación del usuario", 22 | "Admin documentation" : "Documentación del administrador", 23 | "Developer documentation" : "Documentación del desarrollador", 24 | "Featured" : "Destacado", 25 | "Icon" : "Ícono", 26 | "Version" : "Versión", 27 | "Daemon" : "Demonio", 28 | "Level" : "Nivel", 29 | "Actions" : "Acciones", 30 | "Type" : "Tipo", 31 | "Display Name" : "Nombre a desplegar", 32 | "Your apps" : "Tus aplicaciones", 33 | "Documentation" : "Documentación", 34 | "Details" : "Detalles", 35 | "Changelog" : "Bitácora de cambios", 36 | "Disabled apps" : "Aplicaciones deshabilitadas", 37 | "Updates" : "Actualizaciones", 38 | "Disable" : "Deshabilitar" 39 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 40 | } -------------------------------------------------------------------------------- /l10n/es_HN.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Borrar", 5 | "Edit" : "Editar", 6 | "Name" : "Nombre", 7 | "Host" : "Servidor", 8 | "Enabled" : "Habilitado", 9 | "Add" : "Guardar", 10 | "Disabled" : "Deshabilitado", 11 | "Confirm" : "Confirmar", 12 | "Save" : "Guardar", 13 | "Register" : "Registrar", 14 | "Update to {version}" : "Actualizar a {version}", 15 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 16 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 17 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 18 | "View in store" : "Ver en la tienda", 19 | "Visit website" : "Visita el sitio web", 20 | "Report a bug" : "Reporta un detalle", 21 | "User documentation" : "Documentación del usuario", 22 | "Admin documentation" : "Documentación del administrador", 23 | "Developer documentation" : "Documentación del desarrollador", 24 | "Featured" : "Destacado", 25 | "Icon" : "Ícono", 26 | "Version" : "Versión", 27 | "Daemon" : "Demonio", 28 | "Level" : "Nivel", 29 | "Actions" : "Acciones", 30 | "Type" : "Tipo", 31 | "Display Name" : "Nombre a desplegar", 32 | "Your apps" : "Tus aplicaciones", 33 | "Documentation" : "Documentación", 34 | "Details" : "Detalles", 35 | "Changelog" : "Bitácora de cambios", 36 | "Disabled apps" : "Aplicaciones deshabilitadas", 37 | "Updates" : "Actualizaciones", 38 | "Disable" : "Deshabilitar" 39 | }, 40 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 41 | -------------------------------------------------------------------------------- /l10n/es_HN.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Borrar", 3 | "Edit" : "Editar", 4 | "Name" : "Nombre", 5 | "Host" : "Servidor", 6 | "Enabled" : "Habilitado", 7 | "Add" : "Guardar", 8 | "Disabled" : "Deshabilitado", 9 | "Confirm" : "Confirmar", 10 | "Save" : "Guardar", 11 | "Register" : "Registrar", 12 | "Update to {version}" : "Actualizar a {version}", 13 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 14 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 15 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 16 | "View in store" : "Ver en la tienda", 17 | "Visit website" : "Visita el sitio web", 18 | "Report a bug" : "Reporta un detalle", 19 | "User documentation" : "Documentación del usuario", 20 | "Admin documentation" : "Documentación del administrador", 21 | "Developer documentation" : "Documentación del desarrollador", 22 | "Featured" : "Destacado", 23 | "Icon" : "Ícono", 24 | "Version" : "Versión", 25 | "Daemon" : "Demonio", 26 | "Level" : "Nivel", 27 | "Actions" : "Acciones", 28 | "Type" : "Tipo", 29 | "Display Name" : "Nombre a desplegar", 30 | "Your apps" : "Tus aplicaciones", 31 | "Documentation" : "Documentación", 32 | "Details" : "Detalles", 33 | "Changelog" : "Bitácora de cambios", 34 | "Disabled apps" : "Aplicaciones deshabilitadas", 35 | "Updates" : "Actualizaciones", 36 | "Disable" : "Deshabilitar" 37 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 38 | } -------------------------------------------------------------------------------- /l10n/es_NI.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Borrar", 5 | "Edit" : "Editar", 6 | "Name" : "Nombre", 7 | "Host" : "Servidor", 8 | "Enabled" : "Habilitado", 9 | "Add" : "Guardar", 10 | "Disabled" : "Deshabilitado", 11 | "Confirm" : "Confirmar", 12 | "Save" : "Guardar", 13 | "Register" : "Registrar", 14 | "Update to {version}" : "Actualizar a {version}", 15 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 16 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 17 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 18 | "View in store" : "Ver en la tienda", 19 | "Visit website" : "Visita el sitio web", 20 | "Report a bug" : "Reporta un detalle", 21 | "User documentation" : "Documentación del usuario", 22 | "Admin documentation" : "Documentación del administrador", 23 | "Developer documentation" : "Documentación del desarrollador", 24 | "Featured" : "Destacado", 25 | "Icon" : "Ícono", 26 | "Version" : "Versión", 27 | "Level" : "Nivel", 28 | "Actions" : "Acciones", 29 | "Type" : "Tipo", 30 | "Display Name" : "Nombre a desplegar", 31 | "Your apps" : "Tus aplicaciones", 32 | "Documentation" : "Documentación", 33 | "Details" : "Detalles", 34 | "Changelog" : "Bitácora de cambios", 35 | "Disabled apps" : "Aplicaciones deshabilitadas", 36 | "Updates" : "Actualizaciones", 37 | "Disable" : "Deshabilitar" 38 | }, 39 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 40 | -------------------------------------------------------------------------------- /l10n/es_NI.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Borrar", 3 | "Edit" : "Editar", 4 | "Name" : "Nombre", 5 | "Host" : "Servidor", 6 | "Enabled" : "Habilitado", 7 | "Add" : "Guardar", 8 | "Disabled" : "Deshabilitado", 9 | "Confirm" : "Confirmar", 10 | "Save" : "Guardar", 11 | "Register" : "Registrar", 12 | "Update to {version}" : "Actualizar a {version}", 13 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 14 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 15 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 16 | "View in store" : "Ver en la tienda", 17 | "Visit website" : "Visita el sitio web", 18 | "Report a bug" : "Reporta un detalle", 19 | "User documentation" : "Documentación del usuario", 20 | "Admin documentation" : "Documentación del administrador", 21 | "Developer documentation" : "Documentación del desarrollador", 22 | "Featured" : "Destacado", 23 | "Icon" : "Ícono", 24 | "Version" : "Versión", 25 | "Level" : "Nivel", 26 | "Actions" : "Acciones", 27 | "Type" : "Tipo", 28 | "Display Name" : "Nombre a desplegar", 29 | "Your apps" : "Tus aplicaciones", 30 | "Documentation" : "Documentación", 31 | "Details" : "Detalles", 32 | "Changelog" : "Bitácora de cambios", 33 | "Disabled apps" : "Aplicaciones deshabilitadas", 34 | "Updates" : "Actualizaciones", 35 | "Disable" : "Deshabilitar" 36 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 37 | } -------------------------------------------------------------------------------- /l10n/es_PA.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Borrar", 5 | "Edit" : "Editar", 6 | "Name" : "Nombre", 7 | "Host" : "Servidor", 8 | "Enabled" : "Habilitado", 9 | "Add" : "Guardar", 10 | "Disabled" : "Deshabilitado", 11 | "Confirm" : "Confirmar", 12 | "Save" : "Guardar", 13 | "Register" : "Registrar", 14 | "Update to {version}" : "Actualizar a {version}", 15 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 16 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 17 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 18 | "View in store" : "Ver en la tienda", 19 | "Visit website" : "Visita el sitio web", 20 | "Report a bug" : "Reporta un detalle", 21 | "User documentation" : "Documentación del usuario", 22 | "Admin documentation" : "Documentación del administrador", 23 | "Developer documentation" : "Documentación del desarrollador", 24 | "Featured" : "Destacado", 25 | "Icon" : "Ícono", 26 | "Version" : "Versión", 27 | "Level" : "Nivel", 28 | "Actions" : "Acciones", 29 | "Type" : "Tipo", 30 | "Display Name" : "Nombre a desplegar", 31 | "Your apps" : "Tus aplicaciones", 32 | "Documentation" : "Documentación", 33 | "Details" : "Detalles", 34 | "Changelog" : "Bitácora de cambios", 35 | "Disabled apps" : "Aplicaciones deshabilitadas", 36 | "Updates" : "Actualizaciones", 37 | "Disable" : "Deshabilitar" 38 | }, 39 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 40 | -------------------------------------------------------------------------------- /l10n/es_PA.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Borrar", 3 | "Edit" : "Editar", 4 | "Name" : "Nombre", 5 | "Host" : "Servidor", 6 | "Enabled" : "Habilitado", 7 | "Add" : "Guardar", 8 | "Disabled" : "Deshabilitado", 9 | "Confirm" : "Confirmar", 10 | "Save" : "Guardar", 11 | "Register" : "Registrar", 12 | "Update to {version}" : "Actualizar a {version}", 13 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 14 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 15 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 16 | "View in store" : "Ver en la tienda", 17 | "Visit website" : "Visita el sitio web", 18 | "Report a bug" : "Reporta un detalle", 19 | "User documentation" : "Documentación del usuario", 20 | "Admin documentation" : "Documentación del administrador", 21 | "Developer documentation" : "Documentación del desarrollador", 22 | "Featured" : "Destacado", 23 | "Icon" : "Ícono", 24 | "Version" : "Versión", 25 | "Level" : "Nivel", 26 | "Actions" : "Acciones", 27 | "Type" : "Tipo", 28 | "Display Name" : "Nombre a desplegar", 29 | "Your apps" : "Tus aplicaciones", 30 | "Documentation" : "Documentación", 31 | "Details" : "Detalles", 32 | "Changelog" : "Bitácora de cambios", 33 | "Disabled apps" : "Aplicaciones deshabilitadas", 34 | "Updates" : "Actualizaciones", 35 | "Disable" : "Deshabilitar" 36 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 37 | } -------------------------------------------------------------------------------- /l10n/es_PE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Borrar", 5 | "Edit" : "Editar", 6 | "Name" : "Nombre", 7 | "Host" : "Servidor", 8 | "Enabled" : "Habilitado", 9 | "Add" : "Guardar", 10 | "Disabled" : "Deshabilitado", 11 | "Confirm" : "Confirmar", 12 | "Save" : "Guardar", 13 | "Register" : "Registrar", 14 | "Update to {version}" : "Actualizar a {version}", 15 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 16 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 17 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 18 | "View in store" : "Ver en la tienda", 19 | "Visit website" : "Visita el sitio web", 20 | "Report a bug" : "Reporta un detalle", 21 | "User documentation" : "Documentación del usuario", 22 | "Admin documentation" : "Documentación del administrador", 23 | "Developer documentation" : "Documentación del desarrollador", 24 | "Featured" : "Destacado", 25 | "Icon" : "Ícono", 26 | "Version" : "Versión", 27 | "Level" : "Nivel", 28 | "Actions" : "Acciones", 29 | "Type" : "Tipo", 30 | "Display Name" : "Nombre a desplegar", 31 | "Your apps" : "Tus aplicaciones", 32 | "Documentation" : "Documentación", 33 | "Details" : "Detalles", 34 | "Changelog" : "Bitácora de cambios", 35 | "Disabled apps" : "Aplicaciones deshabilitadas", 36 | "Updates" : "Actualizaciones", 37 | "Disable" : "Deshabilitar" 38 | }, 39 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 40 | -------------------------------------------------------------------------------- /l10n/es_PE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Borrar", 3 | "Edit" : "Editar", 4 | "Name" : "Nombre", 5 | "Host" : "Servidor", 6 | "Enabled" : "Habilitado", 7 | "Add" : "Guardar", 8 | "Disabled" : "Deshabilitado", 9 | "Confirm" : "Confirmar", 10 | "Save" : "Guardar", 11 | "Register" : "Registrar", 12 | "Update to {version}" : "Actualizar a {version}", 13 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 14 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 15 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 16 | "View in store" : "Ver en la tienda", 17 | "Visit website" : "Visita el sitio web", 18 | "Report a bug" : "Reporta un detalle", 19 | "User documentation" : "Documentación del usuario", 20 | "Admin documentation" : "Documentación del administrador", 21 | "Developer documentation" : "Documentación del desarrollador", 22 | "Featured" : "Destacado", 23 | "Icon" : "Ícono", 24 | "Version" : "Versión", 25 | "Level" : "Nivel", 26 | "Actions" : "Acciones", 27 | "Type" : "Tipo", 28 | "Display Name" : "Nombre a desplegar", 29 | "Your apps" : "Tus aplicaciones", 30 | "Documentation" : "Documentación", 31 | "Details" : "Detalles", 32 | "Changelog" : "Bitácora de cambios", 33 | "Disabled apps" : "Aplicaciones deshabilitadas", 34 | "Updates" : "Actualizaciones", 35 | "Disable" : "Deshabilitar" 36 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 37 | } -------------------------------------------------------------------------------- /l10n/es_PR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Borrar", 5 | "Edit" : "Editar", 6 | "Name" : "Nombre", 7 | "Host" : "Servidor", 8 | "Enabled" : "Habilitado", 9 | "Add" : "Guardar", 10 | "Disabled" : "Deshabilitado", 11 | "Confirm" : "Confirmar", 12 | "Save" : "Guardar", 13 | "Register" : "Registrar", 14 | "Update to {version}" : "Actualizar a {version}", 15 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 16 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 17 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 18 | "View in store" : "Ver en la tienda", 19 | "Visit website" : "Visita el sitio web", 20 | "Report a bug" : "Reporta un detalle", 21 | "User documentation" : "Documentación del usuario", 22 | "Admin documentation" : "Documentación del administrador", 23 | "Developer documentation" : "Documentación del desarrollador", 24 | "Featured" : "Destacado", 25 | "Icon" : "Ícono", 26 | "Version" : "Versión", 27 | "Level" : "Nivel", 28 | "Actions" : "Acciones", 29 | "Type" : "Tipo", 30 | "Display Name" : "Nombre a desplegar", 31 | "Your apps" : "Tus aplicaciones", 32 | "Documentation" : "Documentación", 33 | "Details" : "Detalles", 34 | "Changelog" : "Bitácora de cambios", 35 | "Disabled apps" : "Aplicaciones deshabilitadas", 36 | "Updates" : "Actualizaciones", 37 | "Disable" : "Deshabilitar" 38 | }, 39 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 40 | -------------------------------------------------------------------------------- /l10n/es_PR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Borrar", 3 | "Edit" : "Editar", 4 | "Name" : "Nombre", 5 | "Host" : "Servidor", 6 | "Enabled" : "Habilitado", 7 | "Add" : "Guardar", 8 | "Disabled" : "Deshabilitado", 9 | "Confirm" : "Confirmar", 10 | "Save" : "Guardar", 11 | "Register" : "Registrar", 12 | "Update to {version}" : "Actualizar a {version}", 13 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 14 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 15 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 16 | "View in store" : "Ver en la tienda", 17 | "Visit website" : "Visita el sitio web", 18 | "Report a bug" : "Reporta un detalle", 19 | "User documentation" : "Documentación del usuario", 20 | "Admin documentation" : "Documentación del administrador", 21 | "Developer documentation" : "Documentación del desarrollador", 22 | "Featured" : "Destacado", 23 | "Icon" : "Ícono", 24 | "Version" : "Versión", 25 | "Level" : "Nivel", 26 | "Actions" : "Acciones", 27 | "Type" : "Tipo", 28 | "Display Name" : "Nombre a desplegar", 29 | "Your apps" : "Tus aplicaciones", 30 | "Documentation" : "Documentación", 31 | "Details" : "Detalles", 32 | "Changelog" : "Bitácora de cambios", 33 | "Disabled apps" : "Aplicaciones deshabilitadas", 34 | "Updates" : "Actualizaciones", 35 | "Disable" : "Deshabilitar" 36 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 37 | } -------------------------------------------------------------------------------- /l10n/es_PY.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Borrar", 5 | "Edit" : "Editar", 6 | "Name" : "Nombre", 7 | "Host" : "Servidor", 8 | "Enabled" : "Habilitado", 9 | "Add" : "Guardar", 10 | "Disabled" : "Deshabilitado", 11 | "Confirm" : "Confirmar", 12 | "Save" : "Guardar", 13 | "Register" : "Registrar", 14 | "Update to {version}" : "Actualizar a {version}", 15 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 16 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 17 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 18 | "View in store" : "Ver en la tienda", 19 | "Visit website" : "Visita el sitio web", 20 | "Report a bug" : "Reporta un detalle", 21 | "User documentation" : "Documentación del usuario", 22 | "Admin documentation" : "Documentación del administrador", 23 | "Developer documentation" : "Documentación del desarrollador", 24 | "Featured" : "Destacado", 25 | "Icon" : "Ícono", 26 | "Version" : "Versión", 27 | "Level" : "Nivel", 28 | "Actions" : "Acciones", 29 | "Type" : "Tipo", 30 | "Display Name" : "Nombre a desplegar", 31 | "Your apps" : "Tus aplicaciones", 32 | "Documentation" : "Documentación", 33 | "Details" : "Detalles", 34 | "Changelog" : "Bitácora de cambios", 35 | "Disabled apps" : "Aplicaciones deshabilitadas", 36 | "Updates" : "Actualizaciones", 37 | "Disable" : "Deshabilitar" 38 | }, 39 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 40 | -------------------------------------------------------------------------------- /l10n/es_PY.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Borrar", 3 | "Edit" : "Editar", 4 | "Name" : "Nombre", 5 | "Host" : "Servidor", 6 | "Enabled" : "Habilitado", 7 | "Add" : "Guardar", 8 | "Disabled" : "Deshabilitado", 9 | "Confirm" : "Confirmar", 10 | "Save" : "Guardar", 11 | "Register" : "Registrar", 12 | "Update to {version}" : "Actualizar a {version}", 13 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 14 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 15 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 16 | "View in store" : "Ver en la tienda", 17 | "Visit website" : "Visita el sitio web", 18 | "Report a bug" : "Reporta un detalle", 19 | "User documentation" : "Documentación del usuario", 20 | "Admin documentation" : "Documentación del administrador", 21 | "Developer documentation" : "Documentación del desarrollador", 22 | "Featured" : "Destacado", 23 | "Icon" : "Ícono", 24 | "Version" : "Versión", 25 | "Level" : "Nivel", 26 | "Actions" : "Acciones", 27 | "Type" : "Tipo", 28 | "Display Name" : "Nombre a desplegar", 29 | "Your apps" : "Tus aplicaciones", 30 | "Documentation" : "Documentación", 31 | "Details" : "Detalles", 32 | "Changelog" : "Bitácora de cambios", 33 | "Disabled apps" : "Aplicaciones deshabilitadas", 34 | "Updates" : "Actualizaciones", 35 | "Disable" : "Deshabilitar" 36 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 37 | } -------------------------------------------------------------------------------- /l10n/es_SV.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Borrar", 5 | "Edit" : "Editar", 6 | "Name" : "Nombre", 7 | "Host" : "Servidor", 8 | "Enabled" : "Habilitado", 9 | "Add" : "Guardar", 10 | "Disabled" : "Deshabilitado", 11 | "Confirm" : "Confirmar", 12 | "Save" : "Guardar", 13 | "Register" : "Registrar", 14 | "Update to {version}" : "Actualizar a {version}", 15 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 16 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 17 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 18 | "View in store" : "Ver en la tienda", 19 | "Visit website" : "Visita el sitio web", 20 | "Report a bug" : "Reporta un detalle", 21 | "User documentation" : "Documentación del usuario", 22 | "Admin documentation" : "Documentación del administrador", 23 | "Developer documentation" : "Documentación del desarrollador", 24 | "Featured" : "Destacado", 25 | "Icon" : "Ícono", 26 | "Version" : "Versión", 27 | "Daemon" : "Demonio", 28 | "Level" : "Nivel", 29 | "Actions" : "Acciones", 30 | "Type" : "Tipo", 31 | "Display Name" : "Nombre a desplegar", 32 | "Your apps" : "Tus aplicaciones", 33 | "Documentation" : "Documentación", 34 | "Details" : "Detalles", 35 | "Changelog" : "Bitácora de cambios", 36 | "Disabled apps" : "Aplicaciones deshabilitadas", 37 | "Updates" : "Actualizaciones", 38 | "Disable" : "Deshabilitar" 39 | }, 40 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 41 | -------------------------------------------------------------------------------- /l10n/es_SV.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Borrar", 3 | "Edit" : "Editar", 4 | "Name" : "Nombre", 5 | "Host" : "Servidor", 6 | "Enabled" : "Habilitado", 7 | "Add" : "Guardar", 8 | "Disabled" : "Deshabilitado", 9 | "Confirm" : "Confirmar", 10 | "Save" : "Guardar", 11 | "Register" : "Registrar", 12 | "Update to {version}" : "Actualizar a {version}", 13 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 14 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 15 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 16 | "View in store" : "Ver en la tienda", 17 | "Visit website" : "Visita el sitio web", 18 | "Report a bug" : "Reporta un detalle", 19 | "User documentation" : "Documentación del usuario", 20 | "Admin documentation" : "Documentación del administrador", 21 | "Developer documentation" : "Documentación del desarrollador", 22 | "Featured" : "Destacado", 23 | "Icon" : "Ícono", 24 | "Version" : "Versión", 25 | "Daemon" : "Demonio", 26 | "Level" : "Nivel", 27 | "Actions" : "Acciones", 28 | "Type" : "Tipo", 29 | "Display Name" : "Nombre a desplegar", 30 | "Your apps" : "Tus aplicaciones", 31 | "Documentation" : "Documentación", 32 | "Details" : "Detalles", 33 | "Changelog" : "Bitácora de cambios", 34 | "Disabled apps" : "Aplicaciones deshabilitadas", 35 | "Updates" : "Actualizaciones", 36 | "Disable" : "Deshabilitar" 37 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 38 | } -------------------------------------------------------------------------------- /l10n/es_UY.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Borrar", 5 | "Edit" : "Editar", 6 | "Name" : "Nombre", 7 | "Host" : "Servidor", 8 | "Enabled" : "Habilitado", 9 | "Add" : "Guardar", 10 | "Disabled" : "Deshabilitado", 11 | "Confirm" : "Confirmar", 12 | "Save" : "Guardar", 13 | "Register" : "Registrar", 14 | "Update to {version}" : "Actualizar a {version}", 15 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 16 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 17 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 18 | "View in store" : "Ver en la tienda", 19 | "Visit website" : "Visita el sitio web", 20 | "Report a bug" : "Reporta un detalle", 21 | "User documentation" : "Documentación del usuario", 22 | "Admin documentation" : "Documentación del administrador", 23 | "Developer documentation" : "Documentación del desarrollador", 24 | "Featured" : "Destacado", 25 | "Icon" : "Ícono", 26 | "Version" : "Versión", 27 | "Level" : "Nivel", 28 | "Actions" : "Acciones", 29 | "Type" : "Tipo", 30 | "Display Name" : "Nombre a desplegar", 31 | "Your apps" : "Tus aplicaciones", 32 | "Documentation" : "Documentación", 33 | "Details" : "Detalles", 34 | "Changelog" : "Bitácora de cambios", 35 | "Disabled apps" : "Aplicaciones deshabilitadas", 36 | "Updates" : "Actualizaciones", 37 | "Disable" : "Deshabilitar" 38 | }, 39 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 40 | -------------------------------------------------------------------------------- /l10n/es_UY.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Borrar", 3 | "Edit" : "Editar", 4 | "Name" : "Nombre", 5 | "Host" : "Servidor", 6 | "Enabled" : "Habilitado", 7 | "Add" : "Guardar", 8 | "Disabled" : "Deshabilitado", 9 | "Confirm" : "Confirmar", 10 | "Save" : "Guardar", 11 | "Register" : "Registrar", 12 | "Update to {version}" : "Actualizar a {version}", 13 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.", 14 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.", 15 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:", 16 | "View in store" : "Ver en la tienda", 17 | "Visit website" : "Visita el sitio web", 18 | "Report a bug" : "Reporta un detalle", 19 | "User documentation" : "Documentación del usuario", 20 | "Admin documentation" : "Documentación del administrador", 21 | "Developer documentation" : "Documentación del desarrollador", 22 | "Featured" : "Destacado", 23 | "Icon" : "Ícono", 24 | "Version" : "Versión", 25 | "Level" : "Nivel", 26 | "Actions" : "Acciones", 27 | "Type" : "Tipo", 28 | "Display Name" : "Nombre a desplegar", 29 | "Your apps" : "Tus aplicaciones", 30 | "Documentation" : "Documentación", 31 | "Details" : "Detalles", 32 | "Changelog" : "Bitácora de cambios", 33 | "Disabled apps" : "Aplicaciones deshabilitadas", 34 | "Updates" : "Actualizaciones", 35 | "Disable" : "Deshabilitar" 36 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 37 | } -------------------------------------------------------------------------------- /l10n/ia.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Deler", 5 | "Edit" : "Modificar", 6 | "Host" : "Hospite", 7 | "Enabled" : "Activate", 8 | "Confirm" : "Confirmar", 9 | "Save" : "Salveguardar", 10 | "Visit website" : "Visitar sito web", 11 | "Report a bug" : "Reportar un defecto", 12 | "User documentation" : "Documentation de usator", 13 | "Admin documentation" : "Documentation de administrator", 14 | "Developer documentation" : "Documentation de disveloppator", 15 | "Version" : "Version", 16 | "Actions" : "Actiones", 17 | "Type" : "Typo", 18 | "Documentation" : "Documentation", 19 | "Details" : "Detalios", 20 | "Disable" : "Disactivar" 21 | }, 22 | "nplurals=2; plural=(n != 1);"); 23 | -------------------------------------------------------------------------------- /l10n/ia.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Deler", 3 | "Edit" : "Modificar", 4 | "Host" : "Hospite", 5 | "Enabled" : "Activate", 6 | "Confirm" : "Confirmar", 7 | "Save" : "Salveguardar", 8 | "Visit website" : "Visitar sito web", 9 | "Report a bug" : "Reportar un defecto", 10 | "User documentation" : "Documentation de usator", 11 | "Admin documentation" : "Documentation de administrator", 12 | "Developer documentation" : "Documentation de disveloppator", 13 | "Version" : "Version", 14 | "Actions" : "Actiones", 15 | "Type" : "Typo", 16 | "Documentation" : "Documentation", 17 | "Details" : "Detalios", 18 | "Disable" : "Disactivar" 19 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 20 | } -------------------------------------------------------------------------------- /l10n/ka_GE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Cancel" : "გაუქმება", 5 | "Delete" : "წაშლა", 6 | "Default" : "საწყისი პარამეტრები", 7 | "Edit" : "შეცვლა", 8 | "Name" : "სახელი", 9 | "Host" : "ჰოსტი", 10 | "Enabled" : "მოქმედია", 11 | "Disabled" : "არაა მოქმედი", 12 | "Confirm" : "დადასტურება", 13 | "Save" : "შენახვა", 14 | "Register" : "რეგისტრაცია", 15 | "Update to {version}" : "განაახლეთ ვერსიაზე {version}", 16 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "ეს აპლიკაცია არ საზღვრავს Nextcloud-ის მინიმალურ ვერსიას. სამომავლოდ ეს ჩაითვლება შეცდომად.", 17 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "ეს აპლიკაცია არ საზღვრავს Nextcloud-ის მაქსიმალურ ვერსიას. სამომავლოდ ეს ჩაითვლება შეცდომად.", 18 | "This app cannot be installed because the following dependencies are not fulfilled:" : "ეს აპლიკაცია ვერ დაყენდა რადგან შემდეგი დამოკიდებულებები არაა დაკმაყოფილებული:", 19 | "View in store" : "იხილეთ store-ში", 20 | "Visit website" : "საიტზე სტუმრობა", 21 | "Report a bug" : "განაცხადეთ შეცდომის შესახებ", 22 | "User documentation" : "მომხმარებლის დოკუმენტაცია", 23 | "Admin documentation" : "ადმინისტრატორის დოკუმენტაცია", 24 | "Developer documentation" : "დეველოპერის დოკუმენტაცია", 25 | "Supported" : "მხარდაჭერილია", 26 | "Featured" : "გამორჩეულები", 27 | "Icon" : "პიქტოგრამა", 28 | "Version" : "ვერსია", 29 | "Daemon" : "დაემონი", 30 | "Level" : "დონე", 31 | "Actions" : "მოქმედებები", 32 | "Display Name" : "დისპლეი სახელი", 33 | "Your apps" : "თქვენი აპლიკაციები", 34 | "Documentation" : "დოკუმენტაცია", 35 | "Details" : "დეტალები", 36 | "Changelog" : "ცვლილებების ლოგი", 37 | "Disabled apps" : "არამოქმედი აპლიკაციები", 38 | "Updates" : "განახლებები", 39 | "Disable" : "გამორთვა" 40 | }, 41 | "nplurals=2; plural=(n!=1);"); 42 | -------------------------------------------------------------------------------- /l10n/ka_GE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Cancel" : "გაუქმება", 3 | "Delete" : "წაშლა", 4 | "Default" : "საწყისი პარამეტრები", 5 | "Edit" : "შეცვლა", 6 | "Name" : "სახელი", 7 | "Host" : "ჰოსტი", 8 | "Enabled" : "მოქმედია", 9 | "Disabled" : "არაა მოქმედი", 10 | "Confirm" : "დადასტურება", 11 | "Save" : "შენახვა", 12 | "Register" : "რეგისტრაცია", 13 | "Update to {version}" : "განაახლეთ ვერსიაზე {version}", 14 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "ეს აპლიკაცია არ საზღვრავს Nextcloud-ის მინიმალურ ვერსიას. სამომავლოდ ეს ჩაითვლება შეცდომად.", 15 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "ეს აპლიკაცია არ საზღვრავს Nextcloud-ის მაქსიმალურ ვერსიას. სამომავლოდ ეს ჩაითვლება შეცდომად.", 16 | "This app cannot be installed because the following dependencies are not fulfilled:" : "ეს აპლიკაცია ვერ დაყენდა რადგან შემდეგი დამოკიდებულებები არაა დაკმაყოფილებული:", 17 | "View in store" : "იხილეთ store-ში", 18 | "Visit website" : "საიტზე სტუმრობა", 19 | "Report a bug" : "განაცხადეთ შეცდომის შესახებ", 20 | "User documentation" : "მომხმარებლის დოკუმენტაცია", 21 | "Admin documentation" : "ადმინისტრატორის დოკუმენტაცია", 22 | "Developer documentation" : "დეველოპერის დოკუმენტაცია", 23 | "Supported" : "მხარდაჭერილია", 24 | "Featured" : "გამორჩეულები", 25 | "Icon" : "პიქტოგრამა", 26 | "Version" : "ვერსია", 27 | "Daemon" : "დაემონი", 28 | "Level" : "დონე", 29 | "Actions" : "მოქმედებები", 30 | "Display Name" : "დისპლეი სახელი", 31 | "Your apps" : "თქვენი აპლიკაციები", 32 | "Documentation" : "დოკუმენტაცია", 33 | "Details" : "დეტალები", 34 | "Changelog" : "ცვლილებების ლოგი", 35 | "Disabled apps" : "არამოქმედი აპლიკაციები", 36 | "Updates" : "განახლებები", 37 | "Disable" : "გამორთვა" 38 | },"pluralForm" :"nplurals=2; plural=(n!=1);" 39 | } -------------------------------------------------------------------------------- /l10n/kab.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Kkes", 5 | "Default" : "Prédéfini(e)", 6 | "Edit" : "Ẓreg", 7 | "Name" : "Nom", 8 | "Enabled" : "Yermed", 9 | "Remove" : "Kkes", 10 | "Disabled" : "Ittwarermed", 11 | "Confirm" : "Serggeg", 12 | "Save" : "Sekles", 13 | "Type" : "Anaw", 14 | "Details" : "Talqayt", 15 | "Disable" : "Désactiver" 16 | }, 17 | "nplurals=2; plural=(n != 1);"); 18 | -------------------------------------------------------------------------------- /l10n/kab.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Kkes", 3 | "Default" : "Prédéfini(e)", 4 | "Edit" : "Ẓreg", 5 | "Name" : "Nom", 6 | "Enabled" : "Yermed", 7 | "Remove" : "Kkes", 8 | "Disabled" : "Ittwarermed", 9 | "Confirm" : "Serggeg", 10 | "Save" : "Sekles", 11 | "Type" : "Anaw", 12 | "Details" : "Talqayt", 13 | "Disable" : "Désactiver" 14 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 15 | } -------------------------------------------------------------------------------- /l10n/km.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Cancel" : "លើកលែង", 5 | "Delete" : "លុប", 6 | "Edit" : "កែប្រែ", 7 | "Name" : "ឈ្មោះ", 8 | "Host" : "ម៉ាស៊ីន​ផ្ទុក", 9 | "Enabled" : "បាន​បើក", 10 | "Add" : "បន្ថែម", 11 | "Disabled" : "បាន​បិទ", 12 | "Save" : "រក្សាទុក", 13 | "Version" : "កំណែ", 14 | "Type" : "ប្រភេទ", 15 | "Documentation" : "កម្រង​ឯកសារ", 16 | "Details" : "ព័ត៌មាន​លម្អិត", 17 | "Disable" : "បិទ" 18 | }, 19 | "nplurals=1; plural=0;"); 20 | -------------------------------------------------------------------------------- /l10n/km.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Cancel" : "លើកលែង", 3 | "Delete" : "លុប", 4 | "Edit" : "កែប្រែ", 5 | "Name" : "ឈ្មោះ", 6 | "Host" : "ម៉ាស៊ីន​ផ្ទុក", 7 | "Enabled" : "បាន​បើក", 8 | "Add" : "បន្ថែម", 9 | "Disabled" : "បាន​បិទ", 10 | "Save" : "រក្សាទុក", 11 | "Version" : "កំណែ", 12 | "Type" : "ប្រភេទ", 13 | "Documentation" : "កម្រង​ឯកសារ", 14 | "Details" : "ព័ត៌មាន​លម្អិត", 15 | "Disable" : "បិទ" 16 | },"pluralForm" :"nplurals=1; plural=0;" 17 | } -------------------------------------------------------------------------------- /l10n/lb.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Läschen", 5 | "Edit" : "Änneren", 6 | "Name" : "Numm", 7 | "Host" : "Host", 8 | "Enabled" : "Aktivéiert", 9 | "Add" : "Dobäisetzen", 10 | "Disabled" : "Deaktivéiert", 11 | "Confirm" : "Konfirméieren", 12 | "Save" : "Späicheren", 13 | "Report a bug" : "E Feeler melden", 14 | "Actions" : "Aktiounen", 15 | "Type" : "Typ", 16 | "Documentation" : "Dokumentatioun", 17 | "Details" : "Detailer", 18 | "Updates" : "Updates", 19 | "Disable" : "Ofschalten" 20 | }, 21 | "nplurals=2; plural=(n != 1);"); 22 | -------------------------------------------------------------------------------- /l10n/lb.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Läschen", 3 | "Edit" : "Änneren", 4 | "Name" : "Numm", 5 | "Host" : "Host", 6 | "Enabled" : "Aktivéiert", 7 | "Add" : "Dobäisetzen", 8 | "Disabled" : "Deaktivéiert", 9 | "Confirm" : "Konfirméieren", 10 | "Save" : "Späicheren", 11 | "Report a bug" : "E Feeler melden", 12 | "Actions" : "Aktiounen", 13 | "Type" : "Typ", 14 | "Documentation" : "Dokumentatioun", 15 | "Details" : "Detailer", 16 | "Updates" : "Updates", 17 | "Disable" : "Ofschalten" 18 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 19 | } -------------------------------------------------------------------------------- /l10n/lo.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Cancel" : "ຍົກເລີກ", 5 | "Delete" : "ລຶບ", 6 | "Default" : "ເລີ່ມຕົ້ນ", 7 | "Edit" : "ແກ້ໄຂ", 8 | "Name" : "ຊື່", 9 | "Remove" : "ຍ້າຍອອກ", 10 | "Confirm" : "ຢືນຢັນ", 11 | "Save" : "ບັນທຶກ", 12 | "Update to {version}" : "ປັບປຸງ ເປັນ {version}", 13 | "Type" : "ພິມ", 14 | "Details" : "ລາຍລະອຽດ", 15 | "Disable" : "ປິດ" 16 | }, 17 | "nplurals=1; plural=0;"); 18 | -------------------------------------------------------------------------------- /l10n/lo.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Cancel" : "ຍົກເລີກ", 3 | "Delete" : "ລຶບ", 4 | "Default" : "ເລີ່ມຕົ້ນ", 5 | "Edit" : "ແກ້ໄຂ", 6 | "Name" : "ຊື່", 7 | "Remove" : "ຍ້າຍອອກ", 8 | "Confirm" : "ຢືນຢັນ", 9 | "Save" : "ບັນທຶກ", 10 | "Update to {version}" : "ປັບປຸງ ເປັນ {version}", 11 | "Type" : "ພິມ", 12 | "Details" : "ລາຍລະອຽດ", 13 | "Disable" : "ປິດ" 14 | },"pluralForm" :"nplurals=1; plural=0;" 15 | } -------------------------------------------------------------------------------- /l10n/lv.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Cancel" : "Atcelt", 5 | "Delete" : "Izdzēst", 6 | "Edit" : "Labot", 7 | "Name" : "Nosaukums", 8 | "Host" : "Resursdators", 9 | "Enabled" : "Iespējots", 10 | "More info" : "Vairāk informācijas", 11 | "Remove" : "Izņemt", 12 | "From" : "No", 13 | "To" : "Līdz", 14 | "Add" : "Pievienot", 15 | "Display name" : "Attēlojamais vārds", 16 | "Disabled" : "Atspējots", 17 | "Confirm" : "Apstiprināt", 18 | "Save" : "Saglabāt", 19 | "Update to {version}" : "Atjaunināts uz {version}", 20 | "Visit website" : "Apmeklējiet vietni", 21 | "Report a bug" : "Ziņot par kļūdu", 22 | "User documentation" : "Lietotāja dokumentācija", 23 | "Admin documentation" : "Pārvaldītāja dokumentācija", 24 | "Developer documentation" : "Izstrādātāja dokumentācija", 25 | "Update to {update}" : "Atjaunināt uz {update}", 26 | "Icon" : "Ikona", 27 | "Version" : "Versija", 28 | "Level" : "Līmenis", 29 | "Actions" : "Darbības", 30 | "_Update_::_Update all_" : ["Atjaunināt visas","Atjaunināt","Atjaunināt visas"], 31 | "Type" : "Veids", 32 | "Display Name" : "Attēlojamais vārds", 33 | "Network" : "Tīkls", 34 | "Documentation" : "Dokumentācija", 35 | "Details" : "Detaļas", 36 | "Changelog" : "Izmaiņu žurnāls", 37 | "Updates" : "Atjauninājumi", 38 | "Enable" : "Iespējot", 39 | "Disable" : "Deaktivēt" 40 | }, 41 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); 42 | -------------------------------------------------------------------------------- /l10n/lv.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Cancel" : "Atcelt", 3 | "Delete" : "Izdzēst", 4 | "Edit" : "Labot", 5 | "Name" : "Nosaukums", 6 | "Host" : "Resursdators", 7 | "Enabled" : "Iespējots", 8 | "More info" : "Vairāk informācijas", 9 | "Remove" : "Izņemt", 10 | "From" : "No", 11 | "To" : "Līdz", 12 | "Add" : "Pievienot", 13 | "Display name" : "Attēlojamais vārds", 14 | "Disabled" : "Atspējots", 15 | "Confirm" : "Apstiprināt", 16 | "Save" : "Saglabāt", 17 | "Update to {version}" : "Atjaunināts uz {version}", 18 | "Visit website" : "Apmeklējiet vietni", 19 | "Report a bug" : "Ziņot par kļūdu", 20 | "User documentation" : "Lietotāja dokumentācija", 21 | "Admin documentation" : "Pārvaldītāja dokumentācija", 22 | "Developer documentation" : "Izstrādātāja dokumentācija", 23 | "Update to {update}" : "Atjaunināt uz {update}", 24 | "Icon" : "Ikona", 25 | "Version" : "Versija", 26 | "Level" : "Līmenis", 27 | "Actions" : "Darbības", 28 | "_Update_::_Update all_" : ["Atjaunināt visas","Atjaunināt","Atjaunināt visas"], 29 | "Type" : "Veids", 30 | "Display Name" : "Attēlojamais vārds", 31 | "Network" : "Tīkls", 32 | "Documentation" : "Dokumentācija", 33 | "Details" : "Detaļas", 34 | "Changelog" : "Izmaiņu žurnāls", 35 | "Updates" : "Atjauninājumi", 36 | "Enable" : "Iespējot", 37 | "Disable" : "Deaktivēt" 38 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" 39 | } -------------------------------------------------------------------------------- /l10n/mn.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Cancel" : "Цуцлах", 5 | "Delete" : "Устгах", 6 | "Edit" : "Өөрчлөх", 7 | "Name" : "Нэр", 8 | "Host" : "хост", 9 | "Enabled" : "Идэвхижүүлэх", 10 | "Add" : "Нэмэх", 11 | "Disabled" : "идэвхигүй", 12 | "Confirm" : "Батлах", 13 | "Save" : "Хадгалах", 14 | "Update to {version}" : "{version} хувилбар руу шинэчлэх", 15 | "Visit website" : "Цахим хуудсаар зочлох", 16 | "User documentation" : "Хэрэглэгчийн баримт бичиг", 17 | "Admin documentation" : "Админы баримт бичиг", 18 | "Featured" : "Алдартай", 19 | "Icon" : "Тэмдэгт ", 20 | "Version" : "төрөл", 21 | "Level" : "түвшин", 22 | "Actions" : "Үйл ажиллагаа", 23 | "Type" : "Төрөл", 24 | "Your apps" : "Таны аппликэйшнүүд", 25 | "Details" : "Дэлгэрэнгүй", 26 | "Disabled apps" : "Идэвхижээгүй аппликэйшнүүд" 27 | }, 28 | "nplurals=2; plural=(n != 1);"); 29 | -------------------------------------------------------------------------------- /l10n/mn.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Cancel" : "Цуцлах", 3 | "Delete" : "Устгах", 4 | "Edit" : "Өөрчлөх", 5 | "Name" : "Нэр", 6 | "Host" : "хост", 7 | "Enabled" : "Идэвхижүүлэх", 8 | "Add" : "Нэмэх", 9 | "Disabled" : "идэвхигүй", 10 | "Confirm" : "Батлах", 11 | "Save" : "Хадгалах", 12 | "Update to {version}" : "{version} хувилбар руу шинэчлэх", 13 | "Visit website" : "Цахим хуудсаар зочлох", 14 | "User documentation" : "Хэрэглэгчийн баримт бичиг", 15 | "Admin documentation" : "Админы баримт бичиг", 16 | "Featured" : "Алдартай", 17 | "Icon" : "Тэмдэгт ", 18 | "Version" : "төрөл", 19 | "Level" : "түвшин", 20 | "Actions" : "Үйл ажиллагаа", 21 | "Type" : "Төрөл", 22 | "Your apps" : "Таны аппликэйшнүүд", 23 | "Details" : "Дэлгэрэнгүй", 24 | "Disabled apps" : "Идэвхижээгүй аппликэйшнүүд" 25 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 26 | } -------------------------------------------------------------------------------- /l10n/nn_NO.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Delete" : "Slett", 5 | "Edit" : "Rediger", 6 | "Name" : "Namn", 7 | "Host" : "Tenar", 8 | "Disabled" : "Deaktivert", 9 | "Save" : "Lagre", 10 | "Visit website" : "Besøk nettstaden", 11 | "Report a bug" : "Rapporter feil", 12 | "User documentation" : "Brukardokumentasjon", 13 | "Admin documentation" : "Admin-dokumentasjon", 14 | "Version" : "Utgåve", 15 | "Actions" : "Handlingar", 16 | "Type" : "Skriv", 17 | "Documentation" : "Dokumentasjon", 18 | "Details" : "Detaljar", 19 | "Enable" : "SLå på", 20 | "Disable" : "Slå av" 21 | }, 22 | "nplurals=2; plural=(n != 1);"); 23 | -------------------------------------------------------------------------------- /l10n/nn_NO.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Slett", 3 | "Edit" : "Rediger", 4 | "Name" : "Namn", 5 | "Host" : "Tenar", 6 | "Disabled" : "Deaktivert", 7 | "Save" : "Lagre", 8 | "Visit website" : "Besøk nettstaden", 9 | "Report a bug" : "Rapporter feil", 10 | "User documentation" : "Brukardokumentasjon", 11 | "Admin documentation" : "Admin-dokumentasjon", 12 | "Version" : "Utgåve", 13 | "Actions" : "Handlingar", 14 | "Type" : "Skriv", 15 | "Documentation" : "Dokumentasjon", 16 | "Details" : "Detaljar", 17 | "Enable" : "SLå på", 18 | "Disable" : "Slå av" 19 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 20 | } -------------------------------------------------------------------------------- /l10n/oc.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Cancel" : "Anullar", 5 | "Delete" : "Suprimir", 6 | "Edit" : "Modificar", 7 | "Name" : "Nom", 8 | "Host" : "Òste", 9 | "Nextcloud URL" : "URL Nextcloud", 10 | "Enabled" : "Activada", 11 | "Remove" : "Suprimir", 12 | "From" : "De", 13 | "Add" : "Apondre", 14 | "Disabled" : "Desactivat", 15 | "Confirm" : "Confirmar", 16 | "Save" : "Enregistrar", 17 | "Register" : "S'inscriure", 18 | "Update to {version}" : "Metre a jorn cap a {version}", 19 | "View in store" : "Veire a la botiga", 20 | "Visit website" : "Veire lo site web", 21 | "Report a bug" : "Raportar un bug", 22 | "User documentation" : "Documentacion utilizaire", 23 | "Admin documentation" : "Documentacion admin", 24 | "Developer documentation" : "Documentacion desvolopaire", 25 | "Update to {update}" : "Actualizar en {update}", 26 | "Version" : "Version", 27 | "Actions" : "Accions", 28 | "Type" : "Tipe", 29 | "by {author}\n{license}" : "per {author}\n{license}", 30 | "Your apps" : "Vòstras aplicacions", 31 | "Documentation" : "Documentacion", 32 | "Details" : "Per lo Menut", 33 | "Changelog" : "Nòta de version", 34 | "Active apps" : "Aplicacions activas", 35 | "Disabled apps" : "Aplicacions desactivadas", 36 | "Updates" : "Mesas a jorn", 37 | "Disable" : "Desactivar" 38 | }, 39 | "nplurals=2; plural=(n > 1);"); 40 | -------------------------------------------------------------------------------- /l10n/oc.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Cancel" : "Anullar", 3 | "Delete" : "Suprimir", 4 | "Edit" : "Modificar", 5 | "Name" : "Nom", 6 | "Host" : "Òste", 7 | "Nextcloud URL" : "URL Nextcloud", 8 | "Enabled" : "Activada", 9 | "Remove" : "Suprimir", 10 | "From" : "De", 11 | "Add" : "Apondre", 12 | "Disabled" : "Desactivat", 13 | "Confirm" : "Confirmar", 14 | "Save" : "Enregistrar", 15 | "Register" : "S'inscriure", 16 | "Update to {version}" : "Metre a jorn cap a {version}", 17 | "View in store" : "Veire a la botiga", 18 | "Visit website" : "Veire lo site web", 19 | "Report a bug" : "Raportar un bug", 20 | "User documentation" : "Documentacion utilizaire", 21 | "Admin documentation" : "Documentacion admin", 22 | "Developer documentation" : "Documentacion desvolopaire", 23 | "Update to {update}" : "Actualizar en {update}", 24 | "Version" : "Version", 25 | "Actions" : "Accions", 26 | "Type" : "Tipe", 27 | "by {author}\n{license}" : "per {author}\n{license}", 28 | "Your apps" : "Vòstras aplicacions", 29 | "Documentation" : "Documentacion", 30 | "Details" : "Per lo Menut", 31 | "Changelog" : "Nòta de version", 32 | "Active apps" : "Aplicacions activas", 33 | "Disabled apps" : "Aplicacions desactivadas", 34 | "Updates" : "Mesas a jorn", 35 | "Disable" : "Desactivar" 36 | },"pluralForm" :"nplurals=2; plural=(n > 1);" 37 | } -------------------------------------------------------------------------------- /l10n/ro.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Cancel" : "Anulare", 5 | "Delete" : "Șterge", 6 | "Default" : "Implicită", 7 | "Edit" : "Editează", 8 | "Name" : "Nume", 9 | "Host" : "Gazdă", 10 | "Enabled" : "Activat", 11 | "Remove" : "Elimină", 12 | "From" : "De la", 13 | "To" : "Către", 14 | "Add" : "Adaugă", 15 | "Display name" : "Nume afișat", 16 | "Disabled" : "Dezactivați", 17 | "Confirm" : "Confirmă", 18 | "Save" : "Salvează", 19 | "Register" : "Înregistrează-te", 20 | "Update to {version}" : "Actualizare la {version}", 21 | "View in store" : "Vezi în magazin", 22 | "Visit website" : "Viziteaza pagina web", 23 | "Report a bug" : "Raportează un defect", 24 | "User documentation" : "Documentație utilizator", 25 | "Admin documentation" : "Documentație pentru administrare", 26 | "Developer documentation" : "Documentație pentru dezvoltatori", 27 | "Featured" : "Recomandată", 28 | "Icon" : "Pictogramă", 29 | "Version" : "Versiune", 30 | "Level" : "Nivel", 31 | "Actions" : "Acțiuni", 32 | "Type" : "Tip", 33 | "Your apps" : "Aplicațiile tale", 34 | "Documentation" : "Documentație", 35 | "Details" : "Detalii", 36 | "Changelog" : "Listă modificări", 37 | "Disabled apps" : "Aplicații inactive", 38 | "Updates" : "Actualizări", 39 | "Featured apps" : "Aplicații recomandate", 40 | "Enable" : "Activare", 41 | "Disable" : "Dezactivează" 42 | }, 43 | "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"); 44 | -------------------------------------------------------------------------------- /l10n/ro.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Cancel" : "Anulare", 3 | "Delete" : "Șterge", 4 | "Default" : "Implicită", 5 | "Edit" : "Editează", 6 | "Name" : "Nume", 7 | "Host" : "Gazdă", 8 | "Enabled" : "Activat", 9 | "Remove" : "Elimină", 10 | "From" : "De la", 11 | "To" : "Către", 12 | "Add" : "Adaugă", 13 | "Display name" : "Nume afișat", 14 | "Disabled" : "Dezactivați", 15 | "Confirm" : "Confirmă", 16 | "Save" : "Salvează", 17 | "Register" : "Înregistrează-te", 18 | "Update to {version}" : "Actualizare la {version}", 19 | "View in store" : "Vezi în magazin", 20 | "Visit website" : "Viziteaza pagina web", 21 | "Report a bug" : "Raportează un defect", 22 | "User documentation" : "Documentație utilizator", 23 | "Admin documentation" : "Documentație pentru administrare", 24 | "Developer documentation" : "Documentație pentru dezvoltatori", 25 | "Featured" : "Recomandată", 26 | "Icon" : "Pictogramă", 27 | "Version" : "Versiune", 28 | "Level" : "Nivel", 29 | "Actions" : "Acțiuni", 30 | "Type" : "Tip", 31 | "Your apps" : "Aplicațiile tale", 32 | "Documentation" : "Documentație", 33 | "Details" : "Detalii", 34 | "Changelog" : "Listă modificări", 35 | "Disabled apps" : "Aplicații inactive", 36 | "Updates" : "Actualizări", 37 | "Featured apps" : "Aplicații recomandate", 38 | "Enable" : "Activare", 39 | "Disable" : "Dezactivează" 40 | },"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));" 41 | } -------------------------------------------------------------------------------- /l10n/si.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Cancel" : "අවලංගු", 5 | "Edit" : "සංස්කරණය", 6 | "Name" : "නම", 7 | "Host" : " ධාරකය", 8 | "Enabled" : "සබල කර ඇත", 9 | "Remove" : "ඉවත් කරන්න", 10 | "Add" : "එකතු කරන්න", 11 | "Disabled" : "අබල කර ඇත", 12 | "Confirm" : "තහවුරු කරන්න", 13 | "Version" : "අනුවාදය", 14 | "Actions" : "ක්‍රියාමාර්ග", 15 | "Disable" : "අබල කරන්න" 16 | }, 17 | "nplurals=2; plural=(n != 1);"); 18 | -------------------------------------------------------------------------------- /l10n/si.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Cancel" : "අවලංගු", 3 | "Edit" : "සංස්කරණය", 4 | "Name" : "නම", 5 | "Host" : " ධාරකය", 6 | "Enabled" : "සබල කර ඇත", 7 | "Remove" : "ඉවත් කරන්න", 8 | "Add" : "එකතු කරන්න", 9 | "Disabled" : "අබල කර ඇත", 10 | "Confirm" : "තහවුරු කරන්න", 11 | "Version" : "අනුවාදය", 12 | "Actions" : "ක්‍රියාමාර්ග", 13 | "Disable" : "අබල කරන්න" 14 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 15 | } -------------------------------------------------------------------------------- /l10n/sq.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Cancel" : "Anuloje", 5 | "Delete" : "Fshi", 6 | "Default" : "Paraprake", 7 | "Edit" : "Përpuno", 8 | "Name" : "Emër", 9 | "Host" : "Strehë", 10 | "Enabled" : "E aktivizuar", 11 | "Remove" : "Hiqe", 12 | "Add" : "Shto ", 13 | "Disabled" : "I/E çaktivizuar", 14 | "Confirm" : "Konfirmo", 15 | "Save" : "Ruaje", 16 | "Register" : "Regjistrohu", 17 | "Update to {version}" : "Përditëso në {version}", 18 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Ky aplikacion nuk ka të caktuar një minimum versioni të Nextcloud. Ky do të jetë një gabim në të ardhmen.", 19 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Ky aplikacion nuk ka të caktuar një maksimum versioni të Nextcloud. Ky do të jetë një gabim në të ardhmen.", 20 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Ky aplikacion s’mund të instalohet, ngaqë për të nuk plotësohen varësitë vijuese:", 21 | "View in store" : "Shiko në dyqan", 22 | "Visit website" : "Vizitoni sajtin", 23 | "Report a bug" : "Njoftoni një të metë", 24 | "User documentation" : "Dokumentacioni i përdoruesit", 25 | "Admin documentation" : "Dokumentacioni i administratorit", 26 | "Developer documentation" : "Dokumentacioni e zhvilluesit", 27 | "Featured" : "I paraqitur", 28 | "Icon" : "Ikonë", 29 | "Version" : "Versioni", 30 | "Level" : "Nivel", 31 | "Actions" : "Veprimet", 32 | "Type" : "Tipi", 33 | "Display Name" : "Trego Emrin", 34 | "Your apps" : "Aplikacionet tuaja ", 35 | "Documentation" : "Dokumentacioni", 36 | "Details" : "Detajet", 37 | "Changelog" : "Katalogu i ndryshimeve", 38 | "Active apps" : "Aplikacionet aktive", 39 | "Disabled apps" : "Aplikacionet pa aftësi ", 40 | "Updates" : "Përditësime", 41 | "Enable" : "Aktivizoje", 42 | "Disable" : "Çaktivizoje" 43 | }, 44 | "nplurals=2; plural=(n != 1);"); 45 | -------------------------------------------------------------------------------- /l10n/sq.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Cancel" : "Anuloje", 3 | "Delete" : "Fshi", 4 | "Default" : "Paraprake", 5 | "Edit" : "Përpuno", 6 | "Name" : "Emër", 7 | "Host" : "Strehë", 8 | "Enabled" : "E aktivizuar", 9 | "Remove" : "Hiqe", 10 | "Add" : "Shto ", 11 | "Disabled" : "I/E çaktivizuar", 12 | "Confirm" : "Konfirmo", 13 | "Save" : "Ruaje", 14 | "Register" : "Regjistrohu", 15 | "Update to {version}" : "Përditëso në {version}", 16 | "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Ky aplikacion nuk ka të caktuar një minimum versioni të Nextcloud. Ky do të jetë një gabim në të ardhmen.", 17 | "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Ky aplikacion nuk ka të caktuar një maksimum versioni të Nextcloud. Ky do të jetë një gabim në të ardhmen.", 18 | "This app cannot be installed because the following dependencies are not fulfilled:" : "Ky aplikacion s’mund të instalohet, ngaqë për të nuk plotësohen varësitë vijuese:", 19 | "View in store" : "Shiko në dyqan", 20 | "Visit website" : "Vizitoni sajtin", 21 | "Report a bug" : "Njoftoni një të metë", 22 | "User documentation" : "Dokumentacioni i përdoruesit", 23 | "Admin documentation" : "Dokumentacioni i administratorit", 24 | "Developer documentation" : "Dokumentacioni e zhvilluesit", 25 | "Featured" : "I paraqitur", 26 | "Icon" : "Ikonë", 27 | "Version" : "Versioni", 28 | "Level" : "Nivel", 29 | "Actions" : "Veprimet", 30 | "Type" : "Tipi", 31 | "Display Name" : "Trego Emrin", 32 | "Your apps" : "Aplikacionet tuaja ", 33 | "Documentation" : "Dokumentacioni", 34 | "Details" : "Detajet", 35 | "Changelog" : "Katalogu i ndryshimeve", 36 | "Active apps" : "Aplikacionet aktive", 37 | "Disabled apps" : "Aplikacionet pa aftësi ", 38 | "Updates" : "Përditësime", 39 | "Enable" : "Aktivizoje", 40 | "Disable" : "Çaktivizoje" 41 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 42 | } -------------------------------------------------------------------------------- /l10n/sr@latin.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Cancel" : "Poništi", 5 | "Delete" : "Obriši", 6 | "Edit" : "Izmeni", 7 | "Name" : "Ime", 8 | "Save" : "Sačuvaj", 9 | "Update to {version}" : "Ažuriraj na verziju {version}", 10 | "Report a bug" : "Prijavi grešku", 11 | "Version" : "Verzija", 12 | "Type" : "Tip", 13 | "Documentation" : "Dokumentacija", 14 | "Details" : "Detalji", 15 | "Disable" : "Isključi" 16 | }, 17 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); 18 | -------------------------------------------------------------------------------- /l10n/sr@latin.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Cancel" : "Poništi", 3 | "Delete" : "Obriši", 4 | "Edit" : "Izmeni", 5 | "Name" : "Ime", 6 | "Save" : "Sačuvaj", 7 | "Update to {version}" : "Ažuriraj na verziju {version}", 8 | "Report a bug" : "Prijavi grešku", 9 | "Version" : "Verzija", 10 | "Type" : "Tip", 11 | "Documentation" : "Dokumentacija", 12 | "Details" : "Detalji", 13 | "Disable" : "Isključi" 14 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" 15 | } -------------------------------------------------------------------------------- /l10n/ta.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Cancel" : "ரத்து செய்", 5 | "Delete" : "நீக்குக", 6 | "Edit" : "தொகுக்க", 7 | "Name" : "பெயர்", 8 | "Host" : "ஓம்புனர்", 9 | "Remove" : "அகற்றுக", 10 | "Add" : "சேர்க்க", 11 | "Save" : "சேமிக்க ", 12 | "Actions" : "செயல்கள்", 13 | "Type" : "வகை", 14 | "Documentation" : "ஆவணமாக்கல்", 15 | "Details" : "விவரங்கள்", 16 | "Enable" : "இயலுமைப்படுத்துக", 17 | "Disable" : "இயலுமைப்ப" 18 | }, 19 | "nplurals=2; plural=(n != 1);"); 20 | -------------------------------------------------------------------------------- /l10n/ta.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Cancel" : "ரத்து செய்", 3 | "Delete" : "நீக்குக", 4 | "Edit" : "தொகுக்க", 5 | "Name" : "பெயர்", 6 | "Host" : "ஓம்புனர்", 7 | "Remove" : "அகற்றுக", 8 | "Add" : "சேர்க்க", 9 | "Save" : "சேமிக்க ", 10 | "Actions" : "செயல்கள்", 11 | "Type" : "வகை", 12 | "Documentation" : "ஆவணமாக்கல்", 13 | "Details" : "விவரங்கள்", 14 | "Enable" : "இயலுமைப்படுத்துக", 15 | "Disable" : "இயலுமைப்ப" 16 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 17 | } -------------------------------------------------------------------------------- /l10n/uz.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "app_api", 3 | { 4 | "Cancel" : "Cancel", 5 | "Delete" : "Delete", 6 | "Password confirmation failed" : "Parol tasdiqlanmadi", 7 | "Edit" : "Tahrirlash", 8 | "Name" : "Name", 9 | "Remove" : "Remove", 10 | "From" : "Dan", 11 | "To" : "Gacha", 12 | "Add" : "Qo'shish", 13 | "URL should start with http:// or https://" : "URL http:// yoki https:// bilan boshlanishi kerak", 14 | "Confirm" : "Confirm", 15 | "Save" : "Saqlash", 16 | "Register" : "Roʻyxatdan oʻtish", 17 | "Check connection" : "Ulanishni tekshiring", 18 | "Update to {version}" : "Update to {version}", 19 | "Visit website" : "Visit website", 20 | "User documentation" : "Foydalanuvchi hujjatlari", 21 | "Admin documentation" : "Admin documentation", 22 | "Developer documentation" : "developer hujjatlari", 23 | "Update to {update}" : " {update}ni yangilash", 24 | "Version" : "Versiya", 25 | "Actions" : "Actions", 26 | "Type" : "Turi", 27 | "Documentation" : "Hujjatlar", 28 | "Details" : "Details", 29 | "Enable" : "Enable", 30 | "Disable" : "Oʻchirish" 31 | }, 32 | "nplurals=1; plural=0;"); 33 | -------------------------------------------------------------------------------- /l10n/uz.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Cancel" : "Cancel", 3 | "Delete" : "Delete", 4 | "Password confirmation failed" : "Parol tasdiqlanmadi", 5 | "Edit" : "Tahrirlash", 6 | "Name" : "Name", 7 | "Remove" : "Remove", 8 | "From" : "Dan", 9 | "To" : "Gacha", 10 | "Add" : "Qo'shish", 11 | "URL should start with http:// or https://" : "URL http:// yoki https:// bilan boshlanishi kerak", 12 | "Confirm" : "Confirm", 13 | "Save" : "Saqlash", 14 | "Register" : "Roʻyxatdan oʻtish", 15 | "Check connection" : "Ulanishni tekshiring", 16 | "Update to {version}" : "Update to {version}", 17 | "Visit website" : "Visit website", 18 | "User documentation" : "Foydalanuvchi hujjatlari", 19 | "Admin documentation" : "Admin documentation", 20 | "Developer documentation" : "developer hujjatlari", 21 | "Update to {update}" : " {update}ni yangilash", 22 | "Version" : "Versiya", 23 | "Actions" : "Actions", 24 | "Type" : "Turi", 25 | "Documentation" : "Hujjatlar", 26 | "Details" : "Details", 27 | "Enable" : "Enable", 28 | "Disable" : "Oʻchirish" 29 | },"pluralForm" :"nplurals=1; plural=0;" 30 | } -------------------------------------------------------------------------------- /lib/AppAPIAuthBackend.php: -------------------------------------------------------------------------------- 1 | request->getHeader('AUTHORIZATION-APP-API')) { 29 | $davAuthenticated = $this->session->get(Auth::DAV_AUTHENTICATED); 30 | $userIdHeader = explode(':', base64_decode($this->request->getHeader('AUTHORIZATION-APP-API')), 2)[0]; 31 | $sessionUserId = $this->session->get('user_id'); 32 | if ($sessionUserId === $userIdHeader && $davAuthenticated === $sessionUserId) { 33 | $authString = 'principals/users/' . $this->session->get('user_id'); 34 | return [true, $authString]; 35 | } 36 | } 37 | return [false, 'AppAPIAuth has not passed']; 38 | } 39 | 40 | public function challenge(RequestInterface $request, ResponseInterface $response) { 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/Attribute/AppAPIAuth.php: -------------------------------------------------------------------------------- 1 | intval($this->config->getSystemValue('loglevel', 2)), 28 | 'version' => $this->appManager->getAppVersion(Application::APP_ID), 29 | ]; 30 | return [ 31 | 'app_api' => $capabilities, 32 | ]; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/Command/Daemon/ListRegistry.php: -------------------------------------------------------------------------------- 1 | setName('app_api:daemon:registry:list'); 28 | $this->setDescription('List configured Deploy daemon Docker registry mappings'); 29 | $this->addArgument('name', InputArgument::REQUIRED, 'Deploy daemon name'); 30 | } 31 | 32 | protected function execute(InputInterface $input, OutputInterface $output): int { 33 | $name = $input->getArgument('name'); 34 | if (!$name) { 35 | $output->writeln('Daemon name is required.'); 36 | return 1; 37 | } 38 | 39 | $daemonConfig = $this->daemonConfigService->getDaemonConfigByName($name); 40 | if ($daemonConfig === null) { 41 | $output->writeln('Daemon config not found.'); 42 | return 1; 43 | } 44 | 45 | if (!isset($daemonConfig->getDeployConfig()['registries']) || count($daemonConfig->getDeployConfig()['registries']) === 0) { 46 | $output->writeln(sprintf('No registries configured for daemon "%s".', $name)); 47 | return 0; 48 | } 49 | 50 | $registries = $daemonConfig->getDeployConfig()['registries']; 51 | $output->writeln(sprintf('Configured registries for daemon "%s":', $name)); 52 | foreach ($registries as $registry) { 53 | $output->writeln(sprintf(' - %s -> %s', $registry['from'], $registry['to'])); 54 | } 55 | 56 | return 0; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /lib/Command/Daemon/UnregisterDaemon.php: -------------------------------------------------------------------------------- 1 | setName('app_api:daemon:unregister'); 31 | $this->setDescription('Unregister daemon'); 32 | 33 | $this->addArgument('daemon-config-name', InputArgument::REQUIRED); 34 | } 35 | 36 | protected function execute(InputInterface $input, OutputInterface $output): int { 37 | $daemonConfigName = $input->getArgument('daemon-config-name'); 38 | 39 | $daemonConfig = $this->daemonConfigService->getDaemonConfigByName($daemonConfigName); 40 | if ($daemonConfig === null) { 41 | $output->writeln(sprintf('Daemon config %s not found.', $daemonConfigName)); 42 | return 1; 43 | } 44 | 45 | $countExApps = count($this->exAppService->getExAppsByDaemonName($daemonConfigName)); 46 | if ($countExApps > 0) { 47 | $output->writeln(sprintf('Error: %s daemon contains %d ExApps, please remove them first to proceed.', $daemonConfigName, $countExApps)); 48 | return 1; 49 | } 50 | 51 | if ($this->daemonConfigService->unregisterDaemonConfig($daemonConfig) === null) { 52 | $output->writeln(sprintf('Failed to unregister daemon config %s.', $daemonConfigName)); 53 | return 1; 54 | } 55 | 56 | $output->writeln('Daemon config unregistered.'); 57 | return 0; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /lib/Command/ExApp/Disable.php: -------------------------------------------------------------------------------- 1 | setName('app_api:app:disable'); 29 | $this->setDescription('Disable registered external app'); 30 | $this->addArgument('appid', InputArgument::REQUIRED); 31 | } 32 | 33 | protected function execute(InputInterface $input, OutputInterface $output): int { 34 | $appId = $input->getArgument('appid'); 35 | $exApp = $this->exAppService->getExApp($appId); 36 | 37 | if ($exApp === null) { 38 | $output->writeln(sprintf('ExApp %s not found. Failed to disable.', $appId)); 39 | return 1; 40 | } 41 | if (!$exApp->getEnabled()) { 42 | $output->writeln(sprintf('ExApp %s already disabled.', $appId)); 43 | return 0; 44 | } 45 | 46 | if ($this->service->disableExApp($exApp)) { 47 | $output->writeln(sprintf('ExApp %s successfully disabled.', $appId)); 48 | return 0; 49 | } 50 | 51 | $output->writeln(sprintf('Failed to disable ExApp %s.', $appId)); 52 | return 1; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /lib/Command/ExApp/Enable.php: -------------------------------------------------------------------------------- 1 | setName('app_api:app:enable'); 30 | $this->setDescription('Enable registered external app'); 31 | 32 | $this->addArgument('appid', InputArgument::REQUIRED); 33 | } 34 | 35 | protected function execute(InputInterface $input, OutputInterface $output): int { 36 | $appId = $input->getArgument('appid'); 37 | $exApp = $this->exAppService->getExApp($appId); 38 | 39 | if ($exApp === null) { 40 | $output->writeln(sprintf('ExApp %s not found. Failed to enable.', $appId)); 41 | return 1; 42 | } 43 | if ($exApp->getEnabled()) { 44 | $output->writeln(sprintf('ExApp %s already enabled.', $appId)); 45 | return 0; 46 | } 47 | 48 | if ($this->service->enableExApp($exApp)) { 49 | $output->writeln(sprintf('ExApp %s successfully enabled.', $appId)); 50 | return 0; 51 | } 52 | $output->writeln(sprintf('Failed to enable ExApp %s.', $appId)); 53 | return 1; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /lib/Command/ExApp/ListExApps.php: -------------------------------------------------------------------------------- 1 | setName('app_api:app:list'); 26 | $this->setDescription('List ExApps'); 27 | } 28 | 29 | protected function execute(InputInterface $input, OutputInterface $output): int { 30 | try { 31 | $exApps = $this->mapper->findAll(); 32 | $output->writeln('ExApps:'); 33 | foreach ($exApps as $exApp) { 34 | $enabled = $exApp->getEnabled() ? 'enabled' : 'disabled'; 35 | $output->writeln($exApp->getAppid() . ' (' . $exApp->getName() . '): ' . $exApp->getVersion() . ' [' . $enabled . ']'); 36 | } 37 | } catch (Exception) { 38 | $output->writeln('Failed to get list of ExApps'); 39 | return 1; 40 | } 41 | return 0; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/Command/ExAppConfig/DeleteConfig.php: -------------------------------------------------------------------------------- 1 | setName('app_api:app:config:delete'); 30 | $this->setDescription('Delete ExApp configs'); 31 | 32 | $this->addArgument('appid', InputArgument::REQUIRED); 33 | $this->addArgument('configkey', InputArgument::REQUIRED); 34 | } 35 | 36 | protected function execute(InputInterface $input, OutputInterface $output): int { 37 | $appId = $input->getArgument('appid'); 38 | $exApp = $this->service->getExApp($appId); 39 | if ($exApp === null) { 40 | $output->writeln(sprintf('ExApp %s not found.', $appId)); 41 | return 1; 42 | } 43 | if ($exApp->getEnabled()) { 44 | $configKey = $input->getArgument('configkey'); 45 | $exAppConfig = $this->exAppConfigService->getAppConfig($appId, $configKey); 46 | if ($exAppConfig === null) { 47 | $output->writeln(sprintf('ExApp %s config %s not found.', $appId, $configKey)); 48 | return 1; 49 | } 50 | if ($this->exAppConfigService->deleteAppConfig($exAppConfig) !== 1) { 51 | $output->writeln(sprintf('Failed to delete ExApp %s config %s.', $appId, $configKey)); 52 | return 1; 53 | } 54 | $output->writeln(sprintf('ExApp %s config %s deleted.', $appId, $configKey)); 55 | return 0; 56 | } 57 | return 1; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /lib/Controller/ConfigController.php: -------------------------------------------------------------------------------- 1 | $value) { 33 | $this->appConfig->setValueString(Application::APP_ID, $key, $value, lazy: true); 34 | } 35 | return new DataResponse(1); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /lib/DavPlugin.php: -------------------------------------------------------------------------------- 1 | on('beforeMethod:*', [$this, 'beforeMethod'], 8); 35 | } 36 | 37 | public function beforeMethod(RequestInterface $request, ResponseInterface $response) { 38 | if ($this->request->getHeader('AUTHORIZATION-APP-API')) { 39 | if ($this->service->validateExAppRequestToNC($this->request, true)) { 40 | $this->session->set(Auth::DAV_AUTHENTICATED, explode(':', base64_decode($this->request->getHeader('AUTHORIZATION-APP-API')), 2)[0]); 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lib/Db/Console/ExAppOccCommandMapper.php: -------------------------------------------------------------------------------- 1 | 19 | */ 20 | class ExAppOccCommandMapper extends QBMapper { 21 | public function __construct(IDBConnection $db) { 22 | parent::__construct($db, 'ex_occ_commands'); 23 | } 24 | 25 | /** 26 | * @throws Exception 27 | */ 28 | public function findAllEnabled(): array { 29 | $qb = $this->db->getQueryBuilder(); 30 | $result = $qb->select('exs.*') 31 | ->from($this->tableName, 'exs') 32 | ->innerJoin('exs', 'ex_apps', 'exa', $qb->expr()->eq('exa.appid', 'exs.appid')) 33 | ->where( 34 | $qb->expr()->eq('exa.enabled', $qb->createNamedParameter(1, IQueryBuilder::PARAM_INT)) 35 | ) 36 | ->executeQuery(); 37 | return $result->fetchAll(); 38 | } 39 | 40 | public function removeByAppIdOccName(string $appId, string $name): bool { 41 | $qb = $this->db->getQueryBuilder(); 42 | $qb->delete($this->tableName) 43 | ->where( 44 | $qb->expr()->eq('appid', $qb->createNamedParameter($appId, IQueryBuilder::PARAM_STR)), 45 | $qb->expr()->eq('name', $qb->createNamedParameter($name, IQueryBuilder::PARAM_STR)) 46 | ); 47 | try { 48 | $result = $qb->executeStatement(); 49 | if ($result) { 50 | return true; 51 | } 52 | } catch (Exception) { 53 | } 54 | return false; 55 | } 56 | 57 | /** 58 | * @throws Exception 59 | */ 60 | public function removeAllByAppId(string $appId): int { 61 | $qb = $this->db->getQueryBuilder(); 62 | $qb->delete($this->tableName) 63 | ->where( 64 | $qb->expr()->eq('appid', $qb->createNamedParameter($appId, IQueryBuilder::PARAM_STR)) 65 | ); 66 | return $qb->executeStatement(); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /lib/Db/DaemonConfigMapper.php: -------------------------------------------------------------------------------- 1 | 21 | */ 22 | class DaemonConfigMapper extends QBMapper { 23 | public function __construct(IDBConnection $db) { 24 | parent::__construct($db, 'ex_apps_daemons'); 25 | } 26 | 27 | /** 28 | * @throws Exception 29 | */ 30 | public function findAll(?int $limit = null, ?int $offset = null): array { 31 | $qb = $this->db->getQueryBuilder(); 32 | $qb->select('*') 33 | ->from($this->tableName) 34 | ->setMaxResults($limit) 35 | ->setFirstResult($offset); 36 | return $this->findEntities($qb); 37 | } 38 | 39 | /** 40 | * @param string $name 41 | * 42 | * @throws DoesNotExistException 43 | * @throws Exception 44 | * @throws MultipleObjectsReturnedException 45 | * 46 | * @return DaemonConfig 47 | */ 48 | public function findByName(string $name): DaemonConfig { 49 | $qb = $this->db->getQueryBuilder(); 50 | $qb->select('*') 51 | ->from($this->tableName) 52 | ->where( 53 | $qb->expr()->eq('name', $qb->createNamedParameter($name, IQueryBuilder::PARAM_STR)) 54 | ); 55 | return $this->findEntity($qb); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /lib/Db/ExAppConfig.php: -------------------------------------------------------------------------------- 1 | addType('appid', 'string'); 40 | $this->addType('configkey', 'string'); 41 | $this->addType('configvalue', 'string'); 42 | $this->addType('sensitive', 'int'); 43 | 44 | if (isset($params['id'])) { 45 | $this->setId($params['id']); 46 | } 47 | if (isset($params['appid'])) { 48 | $this->setAppid($params['appid']); 49 | } 50 | if (isset($params['configkey'])) { 51 | $this->setConfigkey($params['configkey']); 52 | } 53 | if (isset($params['configvalue'])) { 54 | $this->setConfigvalue($params['configvalue']); 55 | } 56 | if (isset($params['sensitive'])) { 57 | $this->setSensitive($params['sensitive']); 58 | } 59 | } 60 | 61 | public function jsonSerialize(): array { 62 | return [ 63 | 'id' => $this->getId(), 64 | 'appid' => $this->getAppid(), 65 | 'configkey' => $this->getConfigkey(), 66 | 'configvalue' => $this->getConfigvalue(), 67 | 'sensitive' => $this->getSensitive(), 68 | ]; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /lib/Db/ExAppDeployOption.php: -------------------------------------------------------------------------------- 1 | addType('appid', 'string'); 38 | $this->addType('name', 'string'); 39 | $this->addType('type', 'string'); 40 | $this->addType('value', 'json'); 41 | 42 | if (isset($params['id'])) { 43 | $this->setId($params['id']); 44 | } 45 | if (isset($params['appid'])) { 46 | $this->setAppid($params['appid']); 47 | } 48 | if (isset($params['type'])) { 49 | $this->setType($params['type']); 50 | } 51 | if (isset($params['value'])) { 52 | $this->setValue($params['value']); 53 | } 54 | } 55 | 56 | public function jsonSerialize(): array { 57 | return [ 58 | 'id' => $this->getId(), 59 | 'appid' => $this->getAppid(), 60 | 'type' => $this->getType(), 61 | 'value' => $this->getValue(), 62 | ]; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /lib/Db/ExAppDeployOptionsMapper.php: -------------------------------------------------------------------------------- 1 | 19 | */ 20 | class ExAppDeployOptionsMapper extends QBMapper { 21 | public function __construct(IDBConnection $db) { 22 | parent::__construct($db, 'ex_deploy_options'); 23 | } 24 | 25 | /** 26 | * @throws Exception 27 | */ 28 | public function findAll(): array { 29 | $qb = $this->db->getQueryBuilder(); 30 | $result = $qb->select('exs.*') 31 | ->from($this->tableName, 'exs') 32 | ->executeQuery(); 33 | return $result->fetchAll(); 34 | } 35 | 36 | /** 37 | * @throws Exception 38 | */ 39 | public function removeAllByAppId(string $appId): int { 40 | $qb = $this->db->getQueryBuilder(); 41 | $qb->delete($this->tableName) 42 | ->where( 43 | $qb->expr()->eq('appid', $qb->createNamedParameter($appId, IQueryBuilder::PARAM_STR)) 44 | ); 45 | return $qb->executeStatement(); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /lib/Db/UI/InitialState.php: -------------------------------------------------------------------------------- 1 | addType('appid', 'string'); 43 | $this->addType('type', 'string'); 44 | $this->addType('name', 'string'); 45 | $this->addType('key', 'string'); 46 | $this->addType('value', 'json'); 47 | 48 | if (isset($params['id'])) { 49 | $this->setId($params['id']); 50 | } 51 | if (isset($params['appid'])) { 52 | $this->setAppid($params['appid']); 53 | } 54 | if (isset($params['type'])) { 55 | $this->setType($params['type']); 56 | } 57 | if (isset($params['name'])) { 58 | $this->setName($params['name']); 59 | } 60 | if (isset($params['key'])) { 61 | $this->setKey($params['key']); 62 | } 63 | if (isset($params['value'])) { 64 | $this->setValue($params['value']); 65 | } 66 | } 67 | 68 | public function jsonSerialize(): array { 69 | return [ 70 | 'id' => $this->getId(), 71 | 'appid' => $this->getAppid(), 72 | 'type' => $this->getType(), 73 | 'name' => $this->getName(), 74 | 'key' => $this->getKey(), 75 | 'value' => $this->getValue(), 76 | ]; 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /lib/Db/UI/SettingsForm.php: -------------------------------------------------------------------------------- 1 | addType('appid', 'string'); 33 | $this->addType('formid', 'string'); 34 | $this->addType('scheme', 'json'); 35 | 36 | if (isset($params['id'])) { 37 | $this->setId($params['id']); 38 | } 39 | if (isset($params['appid'])) { 40 | $this->setAppid($params['appid']); 41 | } 42 | if (isset($params['formid'])) { 43 | $this->setFormid($params['formid']); 44 | } 45 | if (isset($params['scheme'])) { 46 | $this->setScheme($params['scheme']); 47 | } 48 | } 49 | 50 | public function getSchemaField(string $fieldId): ?array { 51 | $scheme = $this->getScheme(); 52 | foreach ($scheme['fields'] as $field) { 53 | if ($field['id'] === $fieldId) { 54 | return $field; 55 | } 56 | } 57 | return null; 58 | } 59 | 60 | public function jsonSerialize(): array { 61 | return [ 62 | 'id' => $this->getId(), 63 | 'appid' => $this->getAppid(), 64 | 'formid' => $this->getFormid(), 65 | 'scheme' => $this->getScheme(), 66 | ]; 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /lib/Db/UI/Style.php: -------------------------------------------------------------------------------- 1 | addType('appid', 'string'); 40 | $this->addType('type', 'string'); 41 | $this->addType('name', 'string'); 42 | $this->addType('path', 'string'); 43 | 44 | if (isset($params['id'])) { 45 | $this->setId($params['id']); 46 | } 47 | if (isset($params['appid'])) { 48 | $this->setAppid($params['appid']); 49 | } 50 | if (isset($params['type'])) { 51 | $this->setType($params['type']); 52 | } 53 | if (isset($params['name'])) { 54 | $this->setName($params['name']); 55 | } 56 | if (isset($params['path'])) { 57 | $this->setPath($params['path']); 58 | } 59 | } 60 | 61 | public function jsonSerialize(): array { 62 | return [ 63 | 'id' => $this->getId(), 64 | 'appid' => $this->getAppid(), 65 | 'type' => $this->getType(), 66 | 'name' => $this->getName(), 67 | 'path' => $this->getPath(), 68 | ]; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /lib/DeployActions/IDeployActions.php: -------------------------------------------------------------------------------- 1 | 19 | */ 20 | class RegisterDeclarativeSettingsListener implements IEventListener { 21 | public function __construct( 22 | private readonly SettingsService $service, 23 | ) { 24 | } 25 | 26 | public function handle(Event $event): void { 27 | if (!$event instanceof DeclarativeSettingsRegisterFormEvent) { 28 | return; 29 | } 30 | 31 | foreach ($this->service->getRegisteredForms() as $form) { 32 | $event->registerSchema($form->getAppid(), $form->getScheme()); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/Listener/LoadFilesPluginListener.php: -------------------------------------------------------------------------------- 1 | 23 | */ 24 | class LoadFilesPluginListener implements IEventListener { 25 | 26 | public function __construct( 27 | private IInitialState $initialState, 28 | private FilesActionsMenuService $service, 29 | private IConfig $config, 30 | ) { 31 | } 32 | 33 | public function handle(Event $event): void { 34 | if (!$event instanceof LoadAdditionalScriptsEvent) { 35 | return; 36 | } 37 | 38 | $exFilesActions = $this->service->getRegisteredFileActions(); 39 | if (!empty($exFilesActions)) { 40 | $this->initialState->provideInitialState('ex_files_actions_menu', [ 41 | 'fileActions' => $exFilesActions, 42 | 'instanceId' => $this->config->getSystemValue('instanceid'), 43 | ]); 44 | Util::addScript(Application::APP_ID, Application::APP_ID . '-filesplugin'); 45 | Util::addStyle(Application::APP_ID, 'filesactions'); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /lib/Listener/SabrePluginAuthInitListener.php: -------------------------------------------------------------------------------- 1 | 20 | */ 21 | class SabrePluginAuthInitListener implements IEventListener { 22 | private AppAPIAuthBackend $authBackend; 23 | 24 | public function __construct(AppAPIAuthBackend $authBackend) { 25 | $this->authBackend = $authBackend; 26 | } 27 | 28 | public function handle(Event $event): void { 29 | if (!$event instanceof SabrePluginAuthInitEvent) { 30 | return; 31 | } 32 | 33 | $server = $event->getServer(); 34 | $authPlugin = $server->getPlugin('auth'); 35 | if ($authPlugin instanceof \Sabre\DAV\Auth\Plugin) { 36 | $authPlugin->addBackend($this->authBackend); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/Middleware/ExAppUiMiddleware.php: -------------------------------------------------------------------------------- 1 | postprocess)) { 31 | $output = preg_replace( 32 | '/(href=")(\/.*?)(\/app_api\/css\/)(proxy\/.*css.*")/', 33 | '$1/index.php/apps/app_api/$4', 34 | $output); 35 | foreach ($controller->jsProxyMap as $key => $value) { 36 | $output = preg_replace( 37 | '/(src=")(\/.*?)(\/app_api\/js\/)(proxy_js\/' . $key . '.js)(.*")/', 38 | '$1/index.php/apps/app_api/proxy/' . $value . '.js$5', 39 | $output, 40 | limit: 1); 41 | } 42 | } 43 | return $output; 44 | } 45 | 46 | public function afterController(Controller $controller, string $methodName, Response $response) { 47 | if (($controller instanceof TopMenuController) && ($controller->postprocess)) { 48 | $exAppId = $this->request->getParam('appId'); 49 | $menuEntryName = $this->request->getParam('name'); 50 | // Setting Navigation active entry manually because they have been added dynamically with custom id 51 | $this->navigationManager->setActiveEntry(Application::APP_ID . '_' . $exAppId . '_' . $menuEntryName); 52 | } 53 | return $response; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /lib/Migration/DataInitializationStep.php: -------------------------------------------------------------------------------- 1 | AIODockerActions->isAIO()) { 30 | $output->info('AIO installation detected. Registering default daemon'); 31 | if ($this->AIODockerActions->registerAIODaemonConfig() !== null) { 32 | $output->info('AIO DaemonConfig successfully registered'); 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lib/Migration/Version032000Date20250109162434.php: -------------------------------------------------------------------------------- 1 | hasTable('ex_task_processing')) { 29 | $table = $schema->getTable('ex_task_processing'); 30 | 31 | $name = $table->getColumn('name'); 32 | if ($name->getLength() < 255) { 33 | $name->setLength(255); 34 | } 35 | 36 | $displayName = $table->getColumn('display_name'); 37 | if ($displayName->getLength() < 255) { 38 | $displayName->setLength(255); 39 | } 40 | 41 | $taskType = $table->getColumn('task_type'); 42 | if ($taskType->getLength() < 255) { 43 | $taskType->setLength(255); 44 | } 45 | } 46 | 47 | return $schema; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /lib/Migration/Version032001Date20250115164140.php: -------------------------------------------------------------------------------- 1 | hasTable('ex_deploy_options')) { 34 | $table = $schema->createTable('ex_deploy_options'); 35 | 36 | $table->addColumn('id', Types::BIGINT, [ 37 | 'notnull' => true, 38 | 'autoincrement' => true, 39 | ]); 40 | $table->addColumn('appid', Types::STRING, [ 41 | 'notnull' => true, 42 | 'length' => 32, 43 | ]); 44 | $table->addColumn('type', Types::STRING, [ // environment_variables/mounts/ports 45 | 'notnull' => true, 46 | 'length' => 32, 47 | ]); 48 | $table->addColumn('value', Types::JSON, [ 49 | 'notnull' => true, 50 | ]); 51 | 52 | $table->setPrimaryKey(['id']); 53 | $table->addUniqueIndex(['appid', 'type'], 'deploy_options__idx'); 54 | } 55 | 56 | 57 | return $schema; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /lib/Migration/Version2000Date20240120094952.php: -------------------------------------------------------------------------------- 1 | getTable('ex_apps'); 30 | if ($table->hasColumn('protocol')) { 31 | $table->dropColumn('protocol'); 32 | } 33 | if ($table->hasColumn('host')) { 34 | $table->dropColumn('host'); 35 | } 36 | $table->dropIndex('ex_apps_c_port__idx'); 37 | $table->addUniqueIndex(['daemon_config_name', 'port'], 'ex_apps_c_port__idx'); 38 | 39 | $table = $schema->getTable('ex_apps_daemons'); 40 | $table->changeColumn('deploy_config', [ 41 | 'notnull' => true, 42 | ]); 43 | 44 | return $schema; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /lib/Migration/Version2005Date20240209094951.php: -------------------------------------------------------------------------------- 1 | hasTable('ex_settings_forms')) { 31 | $table = $schema->createTable('ex_settings_forms'); 32 | 33 | $table->addColumn('id', Types::BIGINT, [ 34 | 'autoincrement' => true, 35 | 'notnull' => true, 36 | ]); 37 | $table->addColumn('appid', Types::STRING, [ 38 | 'notnull' => true, 39 | 'length' => 32, 40 | ]); 41 | $table->addColumn('formid', Types::STRING, [ 42 | 'notnull' => true, 43 | 'length' => 64, 44 | ]); 45 | $table->addColumn('scheme', Types::JSON, [ 46 | 'notnull' => true, 47 | ]); 48 | 49 | $table->setPrimaryKey(['id']); 50 | $table->addUniqueIndex(['appid', 'formid'], 'ex_settings_forms__idx'); 51 | } 52 | 53 | return $schema; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /lib/Migration/Version2201Date20240221124152.php: -------------------------------------------------------------------------------- 1 | getTable('ex_apps'); 31 | 32 | $table->addColumn('is_system', Types::SMALLINT, [ 33 | 'notnull' => true, 34 | 'default' => 0, 35 | 'length' => 1, 36 | 'unsigned' => true, 37 | ]); 38 | 39 | return $schema; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /lib/Migration/Version2203Date20240325124149.php: -------------------------------------------------------------------------------- 1 | getTable('ex_apps'); 31 | 32 | $table->addColumn('api_scopes', Types::JSON, [ 33 | 'notnull' => false, 34 | ]); 35 | 36 | return $schema; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/Migration/Version2204Date20240403125002.php: -------------------------------------------------------------------------------- 1 | hasTable('ex_apps_api_scopes')) { 30 | $schema->dropTable('ex_apps_api_scopes'); 31 | } 32 | 33 | return $schema; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/Migration/Version2206Date20240502145029.php: -------------------------------------------------------------------------------- 1 | hasTable('ex_ui_files_actions')) { 31 | $table = $schema->getTable('ex_ui_files_actions'); 32 | 33 | $table->addColumn('version', Types::STRING, [ 34 | 'notnull' => true, 35 | 'length' => 64, 36 | 'default' => '1.0', 37 | ]); 38 | } 39 | 40 | return $schema; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/Migration/Version2207Date20240502145029.php: -------------------------------------------------------------------------------- 1 | hasTable('ex_apps_scopes')) { 30 | $schema->dropTable('ex_apps_scopes'); 31 | } 32 | 33 | return $schema; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/Migration/Version2700Date20240515092246.php: -------------------------------------------------------------------------------- 1 | hasTable('ex_task_processing')) { 30 | $table = $schema->createTable('ex_task_processing'); 31 | 32 | $table->addColumn('id', Types::BIGINT, [ 33 | 'autoincrement' => true, 34 | 'notnull' => true, 35 | ]); 36 | $table->addColumn('app_id', Types::STRING, [ 37 | 'notnull' => true, 38 | 'length' => 32, 39 | ]); 40 | $table->addColumn('name', Types::STRING, [ 41 | 'notnull' => true, 42 | 'length' => 64, 43 | ]); 44 | $table->addColumn('display_name', Types::STRING, [ 45 | 'notnull' => true, 46 | 'length' => 64, 47 | ]); 48 | $table->addColumn('task_type', Types::STRING, [ 49 | 'notnull' => true, 50 | 'length' => 64, 51 | ]); 52 | 53 | $table->setPrimaryKey(['id']); 54 | $table->addUniqueIndex(['app_id', 'name', 'task_type'], 'task_processing_idx'); 55 | } 56 | 57 | return $schema; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /lib/Migration/Version2800Date20240710220000.php: -------------------------------------------------------------------------------- 1 | hasTable('ex_apps')) { 32 | $table = $schema->getTable('ex_apps'); 33 | if ($table->hasColumn('is_system')) { 34 | $table->dropColumn('is_system'); 35 | } 36 | } 37 | 38 | if ($schema->hasTable('ex_apps_users')) { 39 | $schema->dropTable('ex_apps_users'); 40 | } 41 | 42 | return $schema; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lib/Migration/Version2800Date20240711080316.php: -------------------------------------------------------------------------------- 1 | getTable('ex_task_processing'); 30 | if (!$table->hasColumn('custom_task_type')) { 31 | $table->addColumn('custom_task_type', Types::TEXT, [ 32 | 'notnull' => false, 33 | ]); 34 | } 35 | 36 | return $schema; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/Migration/Version3000Date20240715170800.php: -------------------------------------------------------------------------------- 1 | hasTable('ex_apps_routes')) { 29 | $table = $schema->createTable('ex_apps_routes'); 30 | 31 | $table->addColumn('id', 'integer', [ 32 | 'autoincrement' => true, 33 | 'notnull' => true, 34 | ]); 35 | $table->addColumn('appid', 'string', [ 36 | 'notnull' => true, 37 | 'length' => 32, 38 | ]); 39 | // regex route on the ExApp side that is being called from Nextcloud, 40 | // or other origins (in case of public routes) 41 | $table->addColumn('url', 'string', [ 42 | 'notnull' => true, 43 | 'length' => 512, 44 | ]); 45 | $table->addColumn('verb', 'string', [ 46 | 'notnull' => true, 47 | 'length' => 64, 48 | ]); 49 | $table->addColumn('access_level', 'integer', [ 50 | 'notnull' => true, 51 | 'default' => 0, // 0 = user, 1 = admin, 2 = public 52 | ]); 53 | $table->addColumn('headers_to_exclude', 'string', [ 54 | 'notnull' => false, 55 | 'length' => 512, 56 | ]); 57 | 58 | $table->setPrimaryKey(['id']); 59 | $table->addIndex(['appid'], 'ex_apps_routes_appid'); 60 | } 61 | 62 | return $schema; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /lib/Migration/Version3000Date20240807085759.php: -------------------------------------------------------------------------------- 1 | getTable('ex_task_processing'); 30 | if (!$table->hasColumn('provider')) { 31 | $table->addColumn('provider', Types::TEXT, [ 32 | 'notnull' => true, 33 | ]); 34 | } 35 | 36 | return $schema; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/Migration/Version3100Date20240822080316.php: -------------------------------------------------------------------------------- 1 | getTable('ex_apps_routes'); 30 | if (!$table->hasColumn('bruteforce_protection')) { 31 | $table->addColumn('bruteforce_protection', Types::STRING, [ 32 | 'notnull' => false, 33 | 'length' => 512, 34 | ]); 35 | } 36 | 37 | return $schema; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/Migration/Version3200Date20240905080316.php: -------------------------------------------------------------------------------- 1 | getTable('ex_apps'); 29 | if ($table->hasColumn('last_check_time')) { 30 | $table->dropColumn('last_check_time'); 31 | } 32 | if ($table->hasColumn('api_scopes')) { 33 | $table->dropColumn('api_scopes'); 34 | } 35 | 36 | return $schema; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/Migration/Version5000Date20241120135411.php: -------------------------------------------------------------------------------- 1 | connection->getQueryBuilder(); 37 | $qbSelect->select(['id', 'deploy_config']) 38 | ->from('ex_apps_daemons'); 39 | $req = $qbSelect->executeQuery(); 40 | 41 | while ($row = $req->fetch()) { 42 | $deployConfig = $row['deploy_config']; 43 | $deployConfig = json_decode($deployConfig, true); 44 | if (!empty($deployConfig['haproxy_password'])) { 45 | $deployConfig['haproxy_password'] = $this->crypto->encrypt($deployConfig['haproxy_password']); 46 | $encodedDeployConfig = json_encode($deployConfig); 47 | $qbUpdate = $this->connection->getQueryBuilder(); 48 | $qbUpdate->update('ex_apps_daemons') 49 | ->set('deploy_config', $qbUpdate->createNamedParameter($encodedDeployConfig)) 50 | ->where( 51 | $qbUpdate->expr()->eq('id', $qbUpdate->createNamedParameter($row['id'])) 52 | ); 53 | $qbUpdate->executeStatement(); 54 | } 55 | } 56 | $req->closeCursor(); 57 | return null; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /lib/Notifications/ExNotificationsManager.php: -------------------------------------------------------------------------------- 1 | notificationManager->createNotification(); 30 | $notification 31 | ->setApp($appId) 32 | ->setUser($userId) 33 | ->setDateTime(new DateTime()) 34 | ->setObject($params['object'], $params['object_id']) 35 | ->setSubject($params['subject_type'], $params['subject_params']); 36 | $this->notificationManager->notify($notification); 37 | return $notification; 38 | } 39 | 40 | public function sendAdminsNotification(string $appId, array $params = []): array { 41 | $admins = $this->groupManager->get("admin")->getUsers(); 42 | $notifications = []; 43 | foreach ($admins as $adminUser) { 44 | $notification = $this->notificationManager->createNotification(); 45 | $notification 46 | ->setApp($appId) 47 | ->setUser($adminUser->getUID()) 48 | ->setDateTime(new DateTime()) 49 | ->setObject($params['object'], $params['object_id']) 50 | ->setSubject($params['subject_type'], $params['subject_params']); 51 | $this->notificationManager->notify($notification); 52 | $notifications[] = $notification; 53 | } 54 | return $notifications; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /lib/ProxyResponse.php: -------------------------------------------------------------------------------- 1 | > */ 18 | class ProxyResponse extends Response implements ICallbackResponse { 19 | private mixed $data; 20 | 21 | public function __construct(int $status = HttpAlias::STATUS_OK, 22 | array $headers = [], mixed $data = null, int $lastModified = 0) { 23 | parent::__construct(); 24 | $this->data = $data; 25 | $this->setStatus($status); 26 | $this->setHeaders(array_merge($this->getHeaders(), $headers)); 27 | if ($lastModified !== 0) { 28 | $lastModifiedDate = new \DateTime(); 29 | $lastModifiedDate->setTimestamp($lastModified); 30 | $this->setLastModified($lastModifiedDate); 31 | } 32 | } 33 | 34 | public function callback(IOutput $output): void { 35 | if ($output->getHttpResponseCode() !== HttpAlias::STATUS_NOT_MODIFIED) { 36 | if (is_resource($this->data)) { 37 | fpassthru($this->data); 38 | } else { 39 | print $this->data; 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/PublicCapabilities.php: -------------------------------------------------------------------------------- 1 | $this->appManager->getAppVersion(Application::APP_ID), 27 | ]; 28 | return [ 29 | 'app_api' => $capabilities, 30 | ]; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lib/Settings/AdminSection.php: -------------------------------------------------------------------------------- 1 | l->t('AppAPI'); 38 | } 39 | 40 | /** 41 | * @inheritDoc 42 | */ 43 | public function getPriority(): int { 44 | return 50; 45 | } 46 | 47 | /** 48 | * @inheritDoc 49 | */ 50 | public function getIcon(): ?string { 51 | return $this->urlGenerator->imagePath(Application::APP_ID, 'app-dark.svg'); 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /lib/Settings/DeclarativeSettings/AiIntegrationTeam.php: -------------------------------------------------------------------------------- 1 | l->t('AI Integration Team'); 37 | } 38 | 39 | /** 40 | * @inheritDoc 41 | */ 42 | public function getPriority(): int { 43 | return 30; 44 | } 45 | 46 | /** 47 | * @inheritDoc 48 | */ 49 | public function getIcon(): ?string { 50 | return $this->urlGenerator->imagePath(Application::APP_ID, 'app-dark.svg'); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /lib/Settings/DeclarativeSettings/DeclarativeSettings.php: -------------------------------------------------------------------------------- 1 | l->t('ExApps Settings'); 37 | } 38 | 39 | /** 40 | * @inheritDoc 41 | */ 42 | public function getPriority(): int { 43 | return 40; 44 | } 45 | 46 | /** 47 | * @inheritDoc 48 | */ 49 | public function getIcon(): ?string { 50 | return $this->urlGenerator->imagePath(Application::APP_ID, 'app-dark.svg'); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /screenshots/app_api_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/app_api/db0f559e8ac6c0b333dd3e25405e1ebd1e629a3c/screenshots/app_api_1.png -------------------------------------------------------------------------------- /screenshots/app_api_1.png.license: -------------------------------------------------------------------------------- 1 | SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors 2 | SPDX-License-Identifier: AGPL-3.0-or-later 3 | -------------------------------------------------------------------------------- /screenshots/app_api_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/app_api/db0f559e8ac6c0b333dd3e25405e1ebd1e629a3c/screenshots/app_api_2.png -------------------------------------------------------------------------------- /screenshots/app_api_2.png.license: -------------------------------------------------------------------------------- 1 | SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors 2 | SPDX-License-Identifier: AGPL-3.0-or-later 3 | -------------------------------------------------------------------------------- /screenshots/app_api_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/app_api/db0f559e8ac6c0b333dd3e25405e1ebd1e629a3c/screenshots/app_api_3.png -------------------------------------------------------------------------------- /screenshots/app_api_3.png.license: -------------------------------------------------------------------------------- 1 | SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors 2 | SPDX-License-Identifier: AGPL-3.0-or-later 3 | -------------------------------------------------------------------------------- /screenshots/app_api_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/app_api/db0f559e8ac6c0b333dd3e25405e1ebd1e629a3c/screenshots/app_api_4.png -------------------------------------------------------------------------------- /screenshots/app_api_4.png.license: -------------------------------------------------------------------------------- 1 | SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors 2 | SPDX-License-Identifier: AGPL-3.0-or-later 3 | -------------------------------------------------------------------------------- /src/adminSettings.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | 6 | import Vue from 'vue' 7 | import './bootstrap.js' 8 | import AdminSettings from './components/AdminSettings.vue' 9 | import { generateFilePath } from '@nextcloud/router' 10 | import { Tooltip } from '@nextcloud/vue' 11 | 12 | Vue.directive('tooltip', Tooltip) 13 | 14 | // eslint-disable-next-line 15 | __webpack_public_path__ = generateFilePath(appName, '', 'js/') 16 | 17 | // eslint-disable-next-line 18 | 'use strict' 19 | 20 | // eslint-disable-next-line 21 | new Vue({ 22 | el: '#app_api_settings', 23 | render: h => h(AdminSettings), 24 | }) 25 | -------------------------------------------------------------------------------- /src/bootstrap.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | 6 | import Vue from 'vue' 7 | import { translate, translatePlural } from '@nextcloud/l10n' 8 | import { generateFilePath } from '@nextcloud/router' 9 | 10 | Vue.prototype.t = translate 11 | Vue.prototype.n = translatePlural 12 | Vue.prototype.OC = window.OC 13 | Vue.prototype.OCA = window.OCA 14 | 15 | // eslint-disable-next-line 16 | __webpack_public_path__ = generateFilePath('app_api', '', 'js/') 17 | -------------------------------------------------------------------------------- /src/components/DaemonConfig/InfoTooltip.vue: -------------------------------------------------------------------------------- 1 | 5 | 15 | 16 | 60 | -------------------------------------------------------------------------------- /src/utils.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | 6 | export function Timer(callback, mydelay) { 7 | let timerId 8 | let start 9 | let remaining = mydelay 10 | 11 | this.pause = function() { 12 | window.clearTimeout(timerId) 13 | remaining -= new Date() - start 14 | } 15 | 16 | this.resume = function() { 17 | start = new Date() 18 | window.clearTimeout(timerId) 19 | timerId = window.setTimeout(callback, remaining) 20 | } 21 | 22 | this.resume() 23 | } 24 | 25 | let mytimer = 0 26 | export function delay(callback, ms) { 27 | return function() { 28 | const context = this 29 | const args = arguments 30 | clearTimeout(mytimer) 31 | mytimer = setTimeout(function() { 32 | callback.apply(context, args) 33 | }, ms || 0) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /stylelint.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | 6 | module.exports = { 7 | extends: 'stylelint-config-recommended-vue', 8 | rules: { 9 | 'selector-type-no-unknown': null, 10 | 'rule-empty-line-before': [ 11 | 'always', 12 | { 13 | ignore: ['after-comment', 'inside-block'], 14 | }, 15 | ], 16 | 'declaration-empty-line-before': [ 17 | 'never', 18 | { 19 | ignore: ['after-declaration'], 20 | }, 21 | ], 22 | 'comment-empty-line-before': null, 23 | 'selector-type-case': null, 24 | 'no-descending-specificity': null, 25 | 'selector-pseudo-element-no-unknown': [ 26 | true, 27 | { 28 | ignorePseudoElements: ['v-deep'], 29 | }, 30 | ], 31 | }, 32 | plugins: ['stylelint-scss'], 33 | } 34 | -------------------------------------------------------------------------------- /templates/adminSettings.php: -------------------------------------------------------------------------------- 1 | 12 | 13 |
14 | -------------------------------------------------------------------------------- /templates/embedded.php: -------------------------------------------------------------------------------- 1 | 8 | 9 |
10 | -------------------------------------------------------------------------------- /tests/install_no_init.py: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 3 | # SPDX-License-Identifier: AGPL-3.0-or-later 4 | # 5 | from typing import Annotated 6 | 7 | from fastapi import Depends, FastAPI 8 | from fastapi.responses import JSONResponse 9 | 10 | from nc_py_api import NextcloudApp, ex_app 11 | 12 | 13 | APP = FastAPI() 14 | 15 | 16 | @APP.put("/enabled") 17 | async def enabled_callback( 18 | enabled: bool, 19 | nc: Annotated[NextcloudApp, Depends(ex_app.nc_app)], 20 | ): 21 | if enabled: 22 | nc.log(ex_app.LogLvl.WARNING, f"Hello from {nc.app_cfg.app_name} :)") 23 | else: 24 | nc.log(ex_app.LogLvl.WARNING, f"Bye bye from {nc.app_cfg.app_name} :(") 25 | return JSONResponse(content={"error": ""}, status_code=200) 26 | 27 | 28 | @APP.get("/heartbeat") 29 | async def heartbeat_callback(): 30 | return JSONResponse(content={"status": "ok"}, status_code=200) 31 | 32 | 33 | if __name__ == "__main__": 34 | ex_app.run_app("install_no_init:APP", log_level="trace") 35 | -------------------------------------------------------------------------------- /tests/simple-nginx-NOT-FOR-PRODUCTION.conf: -------------------------------------------------------------------------------- 1 | # 2 | # SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors 3 | # SPDX-License-Identifier: AGPL-3.0-or-later 4 | # 5 | server { 6 | listen 80; 7 | resolver 127.0.0.11; 8 | 9 | location / { 10 | proxy_set_header Host $host; 11 | proxy_set_header X-Forwarded-Scheme $scheme; 12 | proxy_set_header X-Forwarded-Proto $scheme; 13 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 14 | proxy_set_header X-Real-IP $remote_addr; 15 | proxy_pass http://127.0.0.1:8080; 16 | } 17 | 18 | location /exapps/ { 19 | set $harp_addr 127.0.0.1:8780; 20 | proxy_set_header Host $host; 21 | proxy_set_header X-Forwarded-Scheme $scheme; 22 | proxy_set_header X-Forwarded-Proto $scheme; 23 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 24 | proxy_set_header X-Real-IP $remote_addr; 25 | proxy_pass http://$harp_addr; 26 | } 27 | } 28 | --------------------------------------------------------------------------------