Congratulations, github.com/nextcloud/end_to_end_encryption is REUSE compliant! This project adopts the recommendations to make software licensing easy for humans and machines alike.
To add the badge to your project's README.md
file,
use the following snippet:
[](https://api.reuse.software/info/github.com/nextcloud/end_to_end_encryption)
The API provides machine-readable artifacts for automatic analysis.
reuse spdx
command.
Commit 894f3d810c546ec9f74870c7a49835cc9d0207a5
was checked on 11 Jun 2025 22:37:08 UTC
with the following result:
reuse.extract - ERROR - Could not parse 'AGPL-3.0-or-later\n */\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nconst getLogger = user => {\n\tif (user === null) {\n\t\treturn getLoggerBuilder()\n\t\t\t.setApp('end_to_end_encryption')\n\t\t\t.build()\n\t}\n\treturn getLoggerBuilder()\n\t\t.setApp('end_to_end_encryption')\n\t\t.setUid(user.uid)\n\t\t.build()\n}\n\nexport default getLogger(getCurrentUser())\n"],"names":["getLogger","user","getLoggerBuilder","logger","getCurrentUser"],"mappings":"wEAQA,MAAMA,EAAYC,GACbA,IAAS,KACLC,EAAgB,EACrB,OAAO,uBAAuB,EAC9B,MAAK,EAEDA,EAAgB,EACrB,OAAO,uBAAuB,EAC9B,OAAOD,EAAK,GAAG,EACf,MAAK,EAGOE,EAAAH,EAAUI,EAAgB,CAAA"' reuse.extract - ERROR - 'js/logger-BZImfieP.chunk.mjs.map' holds an SPDX expression that cannot be parsed, skipping the file reuse.extract - ERROR - Could not parse 'AGPL-3.0-or-later\n */\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { encryptStringAsymmetric, encryptWithAES, getRandomEncryptionParams } from './crypto.js'\nimport logger from './logger.js'\n\n/**\n * @typedef {object} FileMetadata\n * @property {string} filename - Original file name (ex: \"/foo/test.txt\")\n * @property {string} mimetype - Mimetype, if unknown use \"application/octet-s' reuse.extract - ERROR - 'js/end_to_end_encryption-filedrop.mjs.map' holds an SPDX expression that cannot be parsed, skipping the file reuse.extract - ERROR - Could not parse 'AGPL-3.0-or-later\n -->\n\n<template>\n\t<NcSettingsSection :name=\"t('end_to_end_encryption', 'End-to-end encryption')\"\n\t\t:description=\"encryptionState\">\n\t\t<NcButton v-if=\"!shouldDisplayE2EEInBrowserWarning && userConfig['e2eeInBrowserEnabled'] === false\"\n\t\t\tclass=\"margin-bottom\"\n\t\t\t:disabled=\"!hasKey\"\n\t\t\ttype=\"secondary\"\n\t\t\t@click=\"shouldDisplayE2EEInBrowserWarning = true\">\n\t\t\t{{ t('end_to_end_encryption', 'Enable E2EE navigation in browser') }}\n\t\t</NcButton>\n\t\t<NcNoteCard v-else\n\t\t\tclass=\"notecard\"\n\t\t\ttype=\"warning\"\n\t\t\t:show-alert=\"true\"\n\t\t\t:heading=\"t('end_to_end_encryption', 'Enabling E2EE in the browser can weaken security')\">\n\t\t\t<NcButton v-if=\"userConfig['e2eeInBrowserEnabled'] === false\"\n\t\t\t\tclass=\"close-button\"\n\t\t\t\t:aria-label=\"t('end_to_end_encryption', 'Close')\"\n\t\t\t\ttype=\"tertiary-no-background\"\n\t\t\t\t@click=\"shouldDisplayE2EEInBrowserWarning = false\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconClose :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\n\t\t\t{{ t('end_to_end_encryption', 'The server could serve malicious source code to extract the secret that protects your files.') }}\n\n\t\t\t<NcCheckboxRadioSwitch :disabled=\"!hasKey\"\n\t\t\t\tdata-cy-e2ee-settings-setting=\"e2ee_in_browser_enabled\"\n\t\t\t\t:checked=\"userConfig.e2eeInBrowserEnabled\"\n\t\t\t\tclass=\"margin-bottom\"\n\t\t\t\ttype=\"switch\"\n\t\t\t\t@update:checked=\"value => setConfig('e2eeInBrowserEnabled', value)\">\n\t\t\t\t{{ t('end_to_end_encryption', 'Enable E2EE navigation in browser') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</NcNoteCard>\n\n\t\t<NcButton v-if=\"!shouldDisplayWarning\"\n\t\t\t:disabled=\"!hasKey\"\n\t\t\t:type=\"(hasKey && !shouldDisplayWarning) ? 'error' : 'secondary'\"\n\t\t\t@click=\"startResetProcess()\">\n\t\t\t{{ t('end_to_end_encryption', 'Reset end-to-end encryption') }}\n\t\t</NcButton>\n\t\t<NcNoteCard v-else\n\t\t\tclass=\"notecard\"\n\t\t\ttype=\"warning\"\n\t\t\t:show-alert=\"true\"\n\t\t\t:heading=\"t('end_to_end_encryption', 'Please read carefully before resetting your end-to-end encryption keys')\">\n\t\t\t<NcButton class=\"close-button\"\n\t\t\t\t:aria-label=\"t('end_to_end_encryption', 'Close')\"\n\t\t\t\ttype=\"tertiary-no-background\"\n\t\t\t\t@click=\"shouldDisplayWarning = false\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconClose :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\n\t\t\t<ul>\n\t\t\t\t<li>{{ t('end_to_end_encryption', 'Once your end-to-end encryption keys are reset, all files stored in your encrypted folder will be inaccessible.') }}</li>\n\t\t\t\t<li>{{ t('end_to_end_encryption', 'You should only reset your end-to-end encryption keys if you lost your secure key words (mnemonic).') }}</li>\n\t\t\t\t<li>{{ t('end_to_end_encryption', 'Check on all connected devices' reuse.extract - ERROR - 'js/end_to_end_encryption-settings.mjs.map' holds an SPDX expression that cannot be parsed, skipping the file reuse.extract - ERROR - Could not parse 'AGPL-3.0-or-later\n */\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nconst getLogger = user => {\n\tif (user === null) {\n\t\treturn getLoggerBuilder()\n\t\t\t.setApp('end_to_end_encryption')\n\t\t\t.build()\n\t}\n\treturn getLoggerBuilder()\n\t\t.setApp('end_to_end_encryption')\n\t\t.setUid(user.uid)\n\t\t.build()\n}\n\nexport default getLogger(getCurrentUser())\n"],"names":["getLogger","user","getLoggerBuilder","logger","getCurrentUser"],"mappings":"wEAQA,MAAMA,EAAYC,GACbA,IAAS,KACLC,EAAgB,EACrB,OAAO,uBAAuB,EAC9B,MAAK,EAEDA,EAAgB,EACrB,OAAO,uBAAuB,EAC9B,OAAOD,EAAK,GAAG,EACf,MAAK,EAGOE,EAAAH,EAAUI,EAAgB,CAAA"' reuse.extract - ERROR - 'js/logger-BZImfieP.chunk.mjs.map' holds an SPDX expression that cannot be parsed, skipping the file reuse.extract - ERROR - Could not parse 'AGPL-3.0-or-later\n */\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { encryptStringAsymmetric, encryptWithAES, getRandomEncryptionParams } from './crypto.js'\nimport logger from './logger.js'\n\n/**\n * @typedef {object} FileMetadata\n * @property {string} filename - Original file name (ex: \"/foo/test.txt\")\n * @property {string} mimetype - Mimetype, if unknown use \"application/octet-s' reuse.extract - ERROR - 'js/end_to_end_encryption-filedrop.mjs.map' holds an SPDX expression that cannot be parsed, skipping the file reuse.extract - ERROR - Could not parse 'AGPL-3.0-or-later\n -->\n\n<template>\n\t<NcSettingsSection :name=\"t('end_to_end_encryption', 'End-to-end encryption')\"\n\t\t:description=\"encryptionState\">\n\t\t<NcButton v-if=\"!shouldDisplayE2EEInBrowserWarning && userConfig['e2eeInBrowserEnabled'] === false\"\n\t\t\tclass=\"margin-bottom\"\n\t\t\t:disabled=\"!hasKey\"\n\t\t\ttype=\"secondary\"\n\t\t\t@click=\"shouldDisplayE2EEInBrowserWarning = true\">\n\t\t\t{{ t('end_to_end_encryption', 'Enable E2EE navigation in browser') }}\n\t\t</NcButton>\n\t\t<NcNoteCard v-else\n\t\t\tclass=\"notecard\"\n\t\t\ttype=\"warning\"\n\t\t\t:show-alert=\"true\"\n\t\t\t:heading=\"t('end_to_end_encryption', 'Enabling E2EE in the browser can weaken security')\">\n\t\t\t<NcButton v-if=\"userConfig['e2eeInBrowserEnabled'] === false\"\n\t\t\t\tclass=\"close-button\"\n\t\t\t\t:aria-label=\"t('end_to_end_encryption', 'Close')\"\n\t\t\t\ttype=\"tertiary-no-background\"\n\t\t\t\t@click=\"shouldDisplayE2EEInBrowserWarning = false\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconClose :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\n\t\t\t{{ t('end_to_end_encryption', 'The server could serve malicious source code to extract the secret that protects your files.') }}\n\n\t\t\t<NcCheckboxRadioSwitch :disabled=\"!hasKey\"\n\t\t\t\tdata-cy-e2ee-settings-setting=\"e2ee_in_browser_enabled\"\n\t\t\t\t:checked=\"userConfig.e2eeInBrowserEnabled\"\n\t\t\t\tclass=\"margin-bottom\"\n\t\t\t\ttype=\"switch\"\n\t\t\t\t@update:checked=\"value => setConfig('e2eeInBrowserEnabled', value)\">\n\t\t\t\t{{ t('end_to_end_encryption', 'Enable E2EE navigation in browser') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</NcNoteCard>\n\n\t\t<NcButton v-if=\"!shouldDisplayWarning\"\n\t\t\t:disabled=\"!hasKey\"\n\t\t\t:type=\"(hasKey && !shouldDisplayWarning) ? 'error' : 'secondary'\"\n\t\t\t@click=\"startResetProcess()\">\n\t\t\t{{ t('end_to_end_encryption', 'Reset end-to-end encryption') }}\n\t\t</NcButton>\n\t\t<NcNoteCard v-else\n\t\t\tclass=\"notecard\"\n\t\t\ttype=\"warning\"\n\t\t\t:show-alert=\"true\"\n\t\t\t:heading=\"t('end_to_end_encryption', 'Please read carefully before resetting your end-to-end encryption keys')\">\n\t\t\t<NcButton class=\"close-button\"\n\t\t\t\t:aria-label=\"t('end_to_end_encryption', 'Close')\"\n\t\t\t\ttype=\"tertiary-no-background\"\n\t\t\t\t@click=\"shouldDisplayWarning = false\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconClose :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\n\t\t\t<ul>\n\t\t\t\t<li>{{ t('end_to_end_encryption', 'Once your end-to-end encryption keys are reset, all files stored in your encrypted folder will be inaccessible.') }}</li>\n\t\t\t\t<li>{{ t('end_to_end_encryption', 'You should only reset your end-to-end encryption keys if you lost your secure key words (mnemonic).') }}</li>\n\t\t\t\t<li>{{ t('end_to_end_encryption', 'Check on all connected devices' reuse.extract - ERROR - 'js/end_to_end_encryption-settings.mjs.map' holds an SPDX expression that cannot be parsed, skipping the file # SUMMARY * Bad licenses: 0 * Deprecated licenses: 0 * Licenses without file extension: 0 * Missing licenses: 0 * Unused licenses: 0 * Used licenses: ISC, MIT, BSD-3-Clause, AGPL-3.0-or-later, GPL-3.0-or-later, MPL-2.0, CC0-1.0, Apache-2.0, 0BSD * Read errors: 0 * Files with copyright information: 357 / 357 * Files with license information: 357 / 357 Congratulations! Your project is compliant with version 3.3 of the REUSE Specification :-)