diff --git a/docs/developer.rst b/docs/developer.rst
index 888133105f2..90b0545cd8b 100644
--- a/docs/developer.rst
+++ b/docs/developer.rst
@@ -335,7 +335,25 @@ version
* must be a `semantic version `_ without build metadata, e.g. 9.0.1 or 9.1.0-alpha.1
licence
* required
- * must contain **agpl**, **mpl*** and/or **apache** as the only valid values. These refer to the AGPLv3, MPL 2.0 and Apache License 2.0
+ * can occur multiple times with different licenses
+ * must contain one of the following licenses (see the `SPDX License List `_ for details):
+
+ * **AGPL-3.0-only**
+ * **AGPL-3.0-or-later**
+ * **Apache-2.0**
+ * **GPL-3.0-only**
+ * **GPL-3.0-or-later**
+ * **MIT**
+ * **MPL-2.0**
+
+ * (deprecated) the following shorthand aliases are also used:
+
+ * **agpl** (AGPL-3.0)
+ * **apache** (Apache-2.0)
+ * **gpl3** (GPL-3.0)
+ * **mit** (MIT)
+ * **mpl** (MPL-2.0)
+
author
* required
* can occur multiple times with different authors
diff --git a/nextcloudappstore/api/v1/release/info.xsd b/nextcloudappstore/api/v1/release/info.xsd
index cd716e0052b..d5244d4eef8 100644
--- a/nextcloudappstore/api/v1/release/info.xsd
+++ b/nextcloudappstore/api/v1/release/info.xsd
@@ -369,6 +369,15 @@
+
+
+
+
+
+
+
+
+
diff --git a/nextcloudappstore/api/v1/release/pre-info.xslt b/nextcloudappstore/api/v1/release/pre-info.xslt
index 915aafb4575..a1297b33540 100644
--- a/nextcloudappstore/api/v1/release/pre-info.xslt
+++ b/nextcloudappstore/api/v1/release/pre-info.xslt
@@ -16,7 +16,21 @@
-
+
+
+
+ agpl
+ Apache-2.0
+ gpl3
+ MIT
+ MPL-2.0
+
+
+
+
diff --git a/nextcloudappstore/api/v1/tests/data/infoxmls/app_api.xml b/nextcloudappstore/api/v1/tests/data/infoxmls/app_api.xml
index afb9bc28d83..188c0f732af 100644
--- a/nextcloudappstore/api/v1/tests/data/infoxmls/app_api.xml
+++ b/nextcloudappstore/api/v1/tests/data/infoxmls/app_api.xml
@@ -4,7 +4,7 @@
AppAPI Skeleton2
Testing info.xml
2.0.0
- AGPL
+ AGPL-3.0-or-later
Andrey Borysenko
tools
https://github.com/cloud-py-api/nc_py_api/issues
diff --git a/nextcloudappstore/api/v1/tests/data/infoxmls/fullimport.xml b/nextcloudappstore/api/v1/tests/data/infoxmls/fullimport.xml
index 5a439d1db9b..f2eef64a4ad 100644
--- a/nextcloudappstore/api/v1/tests/data/infoxmls/fullimport.xml
+++ b/nextcloudappstore/api/v1/tests/data/infoxmls/fullimport.xml
@@ -16,7 +16,7 @@
8.8.2
- agpl
+ AGPL-3.0-or-later
Bernhard Posselt
diff --git a/nextcloudappstore/api/v1/tests/data/infoxmls/minimal.xml b/nextcloudappstore/api/v1/tests/data/infoxmls/minimal.xml
index 62d27ef85ef..6b3f17a3ebf 100644
--- a/nextcloudappstore/api/v1/tests/data/infoxmls/minimal.xml
+++ b/nextcloudappstore/api/v1/tests/data/infoxmls/minimal.xml
@@ -5,7 +5,7 @@
An RSS/Atom feed reader
An RSS/Atom feed reader
8.8.2
- agpl
+ AGPL-3.0-or-later
Bernhard Posselt
multimedia
https://github.com/nextcloud/news/issues
diff --git a/nextcloudappstore/api/v1/tests/test_parser.py b/nextcloudappstore/api/v1/tests/test_parser.py
index dbe568faeca..12165a35d1e 100644
--- a/nextcloudappstore/api/v1/tests/test_parser.py
+++ b/nextcloudappstore/api/v1/tests/test_parser.py
@@ -46,7 +46,7 @@ def test_parse_minimal(self):
"donations": [],
"release": {
"databases": [],
- "licenses": [{"license": {"id": "agpl"}}],
+ "licenses": [{"license": {"id": "AGPL-3.0-or-later"}}],
"min_int_size": 32,
"php_extensions": [],
"php_max_version": "*",
diff --git a/nextcloudappstore/api/v1/tests/test_release_importer.py b/nextcloudappstore/api/v1/tests/test_release_importer.py
index 764174a3f78..0de358570b9 100644
--- a/nextcloudappstore/api/v1/tests/test_release_importer.py
+++ b/nextcloudappstore/api/v1/tests/test_release_importer.py
@@ -66,7 +66,7 @@ def test_import_minimal(self):
self.assertEqual(0, release.shell_commands.count())
self.assertEqual(0, release.shell_commands.count())
self.assertEqual(1, release.licenses.count())
- self.assertEqual("agpl", release.licenses.all()[0].id)
+ self.assertEqual("AGPL-3.0-or-later", release.licenses.all()[0].id)
self.assertEqual(None, release.aa_is_system)
def test_full(self):
@@ -230,7 +230,7 @@ def test_import_minimal(self):
self.assertEqual(0, release.php_extensions.count())
self.assertEqual(0, release.databases.count())
self.assertEqual(0, release.shell_commands.count())
- self.assertEqual("mit", release.licenses.all()[0].id)
+ self.assertEqual("MIT", release.licenses.all()[0].id)
self.assertEqual(False, release.aa_is_system)
self.assertEqual(1, release.deploy_methods.count())
all_scopes = release.api_scopes.all()
@@ -275,7 +275,7 @@ def test_full(self):
self.assertEqual("*", release.raw_php_version_spec)
self._assert_all_empty(release, ["signature", "download"])
self.assertEqual(1, release.licenses.count())
- self.assertEqual("agpl", release.licenses.all()[0].id)
+ self.assertEqual("AGPL-3.0-or-later", release.licenses.all()[0].id)
self.assertEqual(True, release.aa_is_system)
self.assertEqual(1, release.deploy_methods.count())
all_scopes = release.api_scopes.all()
diff --git a/nextcloudappstore/core/fixtures/licenses.json b/nextcloudappstore/core/fixtures/licenses.json
index 577e1596f58..61280911c01 100644
--- a/nextcloudappstore/core/fixtures/licenses.json
+++ b/nextcloudappstore/core/fixtures/licenses.json
@@ -1,4 +1,53 @@
[
+ {
+ "model": "core.license",
+ "pk": "AGPL-3.0-only",
+ "fields": {
+ "name": "GNU Affero General Public License v3.0 only"
+ }
+ },
+ {
+ "model": "core.license",
+ "pk": "AGPL-3.0-or-later",
+ "fields": {
+ "name": "GNU Affero General Public License v3.0 or later"
+ }
+ },
+ {
+ "model": "core.license",
+ "pk": "Apache-2.0",
+ "fields": {
+ "name": "Apache License 2.0"
+ }
+ },
+ {
+ "model": "core.license",
+ "pk": "GPL-3.0-only",
+ "fields": {
+ "name": "GNU General Public License v3.0 only"
+ }
+ },
+ {
+ "model": "core.license",
+ "pk": "GPL-3.0-or-later",
+ "fields": {
+ "name": "GNU General Public License v3.0 or later"
+ }
+ },
+ {
+ "model": "core.license",
+ "pk": "MIT",
+ "fields": {
+ "name": "MIT License"
+ }
+ },
+ {
+ "model": "core.license",
+ "pk": "MPL-2.0",
+ "fields": {
+ "name": "Mozilla Public License 2.0"
+ }
+ },
{
"model": "core.license",
"pk": "agpl",