From 271acacb1d5f634ef68684d8db52bbc32b70ebf8 Mon Sep 17 00:00:00 2001 From: Giuseppe Naponiello Date: Fri, 3 Jul 2026 12:47:47 +0200 Subject: [PATCH] license: built full stack, test and documentation --- .github/workflows/docs.yml | 54 +++ CLAUDE.md | 6 +- LICENSES/CC0-1.0.txt | 121 +++++ Makefile | 14 +- REUSE.toml | 15 +- backend/app/Enums/LicenseKind.php | 32 ++ .../Http/Controllers/LicenseController.php | 96 ++++ .../app/Http/Requests/IndexLicenseRequest.php | 33 ++ .../app/Http/Requests/StoreLicenseRequest.php | 41 ++ .../Http/Requests/UpdateLicenseRequest.php | 43 ++ backend/app/Models/Lists/License.php | 99 ++++ .../factories/Lists/LicenseFactory.php | 63 +++ ...026_07_03_100000_create_licenses_table.php | 49 ++ backend/database/seeders/DatabaseSeeder.php | 1 + backend/database/seeders/LicenseSeeder.php | 223 +++++++++ backend/routes/api/licenses.php | 24 + backend/storage/app/public/.gitignore | 2 + .../storage/app/public/licenses/CC-BY-4.0.txt | 396 ++++++++++++++++ .../app/public/licenses/CC-BY-NC-4.0.txt | 408 ++++++++++++++++ .../app/public/licenses/CC-BY-NC-ND-4.0.txt | 403 ++++++++++++++++ .../app/public/licenses/CC-BY-NC-SA-4.0.txt | 438 ++++++++++++++++++ .../app/public/licenses/CC-BY-ND-4.0.txt | 393 ++++++++++++++++ .../app/public/licenses/CC-BY-SA-4.0.txt | 428 +++++++++++++++++ .../storage/app/public/licenses/CC0-1.0.txt | 121 +++++ .../tests/Feature/LicenseControllerTest.php | 177 +++++++ backend/tests/Feature/LicenseSeederTest.php | 107 +++++ backend/tests/Unit/LicenseKindTest.php | 27 ++ docker-compose.override.yml | 3 +- docker-compose.yml | 15 +- docs/assets/logo_dyncoll_graphic.png | Bin 0 -> 78129 bytes docs/developer/index.md | 17 + docs/developer/licenses.md | 67 +++ docs/index.md | 22 + docs/stylesheets/extra.css | 29 ++ docs/user/index.md | 11 + docs/user/licenses.md | 66 +++ documentation/docs/index.md | 16 - documentation/mkdocs.yml | 22 - mkdocs.yml | 53 +++ 39 files changed, 4078 insertions(+), 57 deletions(-) create mode 100644 .github/workflows/docs.yml create mode 100644 LICENSES/CC0-1.0.txt create mode 100644 backend/app/Enums/LicenseKind.php create mode 100644 backend/app/Http/Controllers/LicenseController.php create mode 100644 backend/app/Http/Requests/IndexLicenseRequest.php create mode 100644 backend/app/Http/Requests/StoreLicenseRequest.php create mode 100644 backend/app/Http/Requests/UpdateLicenseRequest.php create mode 100644 backend/app/Models/Lists/License.php create mode 100644 backend/database/factories/Lists/LicenseFactory.php create mode 100644 backend/database/migrations/2026_07_03_100000_create_licenses_table.php create mode 100644 backend/database/seeders/LicenseSeeder.php create mode 100644 backend/routes/api/licenses.php create mode 100644 backend/storage/app/public/licenses/CC-BY-4.0.txt create mode 100644 backend/storage/app/public/licenses/CC-BY-NC-4.0.txt create mode 100644 backend/storage/app/public/licenses/CC-BY-NC-ND-4.0.txt create mode 100644 backend/storage/app/public/licenses/CC-BY-NC-SA-4.0.txt create mode 100644 backend/storage/app/public/licenses/CC-BY-ND-4.0.txt create mode 100644 backend/storage/app/public/licenses/CC-BY-SA-4.0.txt create mode 100644 backend/storage/app/public/licenses/CC0-1.0.txt create mode 100644 backend/tests/Feature/LicenseControllerTest.php create mode 100644 backend/tests/Feature/LicenseSeederTest.php create mode 100644 backend/tests/Unit/LicenseKindTest.php create mode 100644 docs/assets/logo_dyncoll_graphic.png create mode 100644 docs/developer/index.md create mode 100644 docs/developer/licenses.md create mode 100644 docs/index.md create mode 100644 docs/stylesheets/extra.css create mode 100644 docs/user/index.md create mode 100644 docs/user/licenses.md delete mode 100644 documentation/docs/index.md delete mode 100644 documentation/mkdocs.yml create mode 100644 mkdocs.yml diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000..613347d --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,54 @@ +# Builds the MkDocs documentation and publishes it to GitHub Pages using the +# native Pages flow (no gh-pages branch). Runs on every push to main that +# touches the docs. +# +# One-time repository setup: Settings → Pages → Source: "GitHub Actions". +name: docs + +on: + push: + branches: [main] + paths: + - "docs/**" + - "mkdocs.yml" + - ".github/workflows/docs.yml" + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: pages + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.x" + + # Pinned to the version served by the local `docs` compose service + # (squidfunk/mkdocs-material): keep the two in sync when upgrading. + - run: pip install mkdocs-material==9.7.6 + + - run: mkdocs build --strict + + - uses: actions/upload-pages-artifact@v3 + with: + path: site + + deploy: + needs: build + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - id: deployment + uses: actions/deploy-pages@v4 diff --git a/CLAUDE.md b/CLAUDE.md index 897b1ce..8acbeba 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -25,7 +25,7 @@ nazionale svedese. | OpenAPI | **scegliere UNO** tra `darkaonline/l5-swagger` o `dedoc/scramble` (ora ci sono entrambi) | | Linked Art | `ml/json-ld` (serializzazione) + `opis/json-schema` (validazione contro gli schema RAÄ) | | Frontend | Vite + TypeScript, MPA con isole, Tailwind v4 + daisyUI, Leaflet | -| Docs | MkDocs Material (`documentation/`) | +| Docs | MkDocs Material (`docs/` + `mkdocs.yml` alla root; publish via GitHub Pages, `.github/workflows/docs.yml`) | | Qualità | SonarQube locale (`http://sonar.local`) | ## 3. Architettura dati (decisione chiave) @@ -115,13 +115,15 @@ Motivi e asimmetria backend/frontend: Usare i target del `Makefile` (incapsulano la strategia host/container del §6bis): ```bash -make up # avvia l'intero stack dev (Vite HMR + backend + db + redis + docs + mailpit) +make up # avvia l'intero stack dev (Vite HMR + backend + db + redis + mailpit) make migrate # artisan migrate (container come UID host) make import # ETL da v1 (quando implementato) make artisan c="test --coverage-clover=coverage.xml" # test backend make be-update # composer update (host) make fe-install # npm install host (package-lock + type-check IDE) make fe-rebuild # ricostruisce l'immagine frontend dopo modifiche a package.json +make docs # anteprima MkDocs (http://localhost:8001/adc/) — publish: GitHub Pages +make docs-check # build --strict della doc, come in CI (prima del push) make permissions # fix permessi storage (una tantum, sudo) make help # elenco completo ``` diff --git a/LICENSES/CC0-1.0.txt b/LICENSES/CC0-1.0.txt new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/LICENSES/CC0-1.0.txt @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/Makefile b/Makefile index 9a66a0b..1e977a5 100644 --- a/Makefile +++ b/Makefile @@ -12,13 +12,17 @@ DC := docker compose EXEC := $(DC) exec -u $(UID):$(GID) backend .DEFAULT_GOAL := help -.PHONY: help up down build logs composer be-install be-update artisan migrate import tinker test fe-install fe-add fe-rebuild fe-dev fe-build fe-lint-css fe-lint-css-fix permissions +.PHONY: help up down build logs composer be-install be-update artisan migrate import tinker test fe-install fe-add fe-rebuild fe-dev fe-build fe-lint-css fe-lint-css-fix docs docs-check permissions + +# Stessa versione pinnata nella CI (.github/workflows/docs.yml): allineare insieme. +MKDOCS_IMG := squidfunk/mkdocs-material:9.7.6 +MKDOCS_VOL := -v $(CURDIR)/mkdocs.yml:/docs/mkdocs.yml:ro -v $(CURDIR)/docs:/docs/docs:ro help: ## Mostra questo aiuto @grep -hE '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) | awk 'BEGIN{FS=":.*?## "}{printf " \033[36m%-14s\033[0m %s\n",$$1,$$2}' ## --- Stack --- -up: ## Avvia l'intero stack dev: Vite HMR + backend(serve) + db + redis + docs + mailpit +up: ## Avvia l'intero stack dev: Vite HMR + backend(serve) + db + redis + mailpit $(DC) up -d down: ## Ferma lo stack $(DC) down @@ -76,6 +80,12 @@ fe-lint-css: ## Stylelint (check) nel container — gira anche nel pre-commit $(DC) exec -T frontend npm run lint:css fe-lint-css-fix: ## Stylelint con --fix (container come UID host: scrive sul bind-mount) $(DC) exec -u $(UID):$(GID) -T frontend npm run lint:css:fix +## --- Documentazione (pubblicata da GitHub Pages, .github/workflows/docs.yml) --- +docs: ## Anteprima locale MkDocs con live reload su http://localhost:8001/adc/ (Ctrl+C per uscire; la 8000 è del backend) + docker run --rm -p 8001:8000 $(MKDOCS_VOL) $(MKDOCS_IMG) serve --dev-addr=0.0.0.0:8000 +docs-check: ## Build --strict come in CI (fallisce su link rotti): da lanciare prima del push + docker run --rm $(MKDOCS_VOL) $(MKDOCS_IMG) build --strict --site-dir /tmp/site + ## --- Manutenzione --- permissions: ## Permessi storage scrivibili da php-fpm (www-data) — richiede sudo, una tantum sudo chgrp -R www-data backend/storage backend/bootstrap/cache diff --git a/REUSE.toml b/REUSE.toml index 534080a..57d8dde 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -15,7 +15,7 @@ SPDX-License-Identifier = "EUPL-1.2" # Documentazione utente (sito MkDocs): CC-BY-4.0. [[annotations]] -path = "documentation/**" +path = ["docs/**", "mkdocs.yml"] precedence = "override" SPDX-FileCopyrightText = "2026 Giuseppe Naponiello" SPDX-License-Identifier = "CC-BY-4.0" @@ -27,3 +27,16 @@ path = "frontend/public/vendor/3dhop/**" precedence = "override" SPDX-FileCopyrightText = "2014-2020 Visual Computing Lab, ISTI - CNR" SPDX-License-Identifier = "GPL-3.0-or-later" + +# Testi delle licenze offerti in download insieme ai media (colonna `file` della +# tabella `licenses`, vedi LicenseSeeder), serviti al frontend via storage:link. +# NON sono le licenze del repository: non possono stare in LICENSES/ (un testo +# non referenziato dal codice fa fallire `reuse lint` come "unused license"). +# Creative Commons dedica il testo delle proprie licenze al pubblico dominio (CC0): +# https://creativecommons.org/policies/#license — da qui l'annotazione, che a sua +# volta richiede LICENSES/CC0-1.0.txt nella root. +[[annotations]] +path = "backend/storage/app/public/licenses/**" +precedence = "override" +SPDX-FileCopyrightText = "Creative Commons Corporation" +SPDX-License-Identifier = "CC0-1.0" diff --git a/backend/app/Enums/LicenseKind.php b/backend/app/Enums/LicenseKind.php new file mode 100644 index 0000000..03284d2 --- /dev/null +++ b/backend/app/Enums/LicenseKind.php @@ -0,0 +1,32 @@ + 'License', + self::Mark => 'Public domain mark', + self::RightsStatement => 'Rights statement', + }; + } +} diff --git a/backend/app/Http/Controllers/LicenseController.php b/backend/app/Http/Controllers/LicenseController.php new file mode 100644 index 0000000..e2f9a4a --- /dev/null +++ b/backend/app/Http/Controllers/LicenseController.php @@ -0,0 +1,96 @@ +orderBy('sort_order')->orderBy('acronym'); + + match ($request->input('scope')) { + 'record' => $query->forRecord(), + 'media' => $query->forMedia(), + default => null, + }; + + if ($request->filled('active')) { + $query->where('active', $request->boolean('active')); + } + + return $this->collectionResponse($query->get()); + } + + /** + * Crea una licenza. + */ + public function store(StoreLicenseRequest $request): JsonResponse + { + $license = License::create($request->validated()); + + return $this->createdResponse($license); + } + + /** + * Dettaglio di una licenza. + */ + public function show(License $license): JsonResponse + { + return $this->okResponse($license); + } + + /** + * Aggiorna una licenza (anche parzialmente, es. solo `active`). + */ + public function update(UpdateLicenseRequest $request, License $license): JsonResponse + { + $license->update($request->validated()); + + return $this->updatedResponse($license); + } + + /** + * Elimina una licenza (se non assegnata ad alcun contenuto). + */ + public function destroy(License $license): JsonResponse + { + if ($license->isInUse()) { + return $this->conflictResponse('Cannot delete: license assigned to at least one record or media file.'); + } + + $license->delete(); + + return $this->deletedResponse(); + } + + /** + * Indica se la licenza è in uso (bloccata per l'eliminazione). + */ + public function usage(License $license): JsonResponse + { + return response()->json([ + 'in_use' => $license->isInUse(), + ]); + } +} diff --git a/backend/app/Http/Requests/IndexLicenseRequest.php b/backend/app/Http/Requests/IndexLicenseRequest.php new file mode 100644 index 0000000..747bba6 --- /dev/null +++ b/backend/app/Http/Requests/IndexLicenseRequest.php @@ -0,0 +1,33 @@ +|string> + */ + public function rules(): array + { + return [ + 'scope' => ['nullable', Rule::in(['record', 'media'])], + 'active' => ['nullable', 'boolean'], + ]; + } +} diff --git a/backend/app/Http/Requests/StoreLicenseRequest.php b/backend/app/Http/Requests/StoreLicenseRequest.php new file mode 100644 index 0000000..c59b4de --- /dev/null +++ b/backend/app/Http/Requests/StoreLicenseRequest.php @@ -0,0 +1,41 @@ +|string> + */ + public function rules(): array + { + return [ + 'name' => ['required', 'string', 'max:200', 'unique:licenses,name'], + 'acronym' => ['required', 'string', 'max:50', 'unique:licenses,acronym'], + // Solo id della SPDX License List ufficiale: per marchi e rights + // statement (che non vi compaiono) deve restare NULL. + 'spdx_id' => ['nullable', 'string', 'max:50', 'unique:licenses,spdx_id'], + 'kind' => ['required', Rule::enum(LicenseKind::class)], + 'description' => ['nullable', 'string'], + 'uri' => ['nullable', 'url', 'max:2000'], + 'file' => ['nullable', 'string', 'max:512'], + 'for_record' => ['sometimes', 'boolean'], + 'for_media' => ['sometimes', 'boolean'], + 'sort_order' => ['sometimes', 'integer', 'min:0'], + 'active' => ['sometimes', 'boolean'], + ]; + } +} diff --git a/backend/app/Http/Requests/UpdateLicenseRequest.php b/backend/app/Http/Requests/UpdateLicenseRequest.php new file mode 100644 index 0000000..7cd46c3 --- /dev/null +++ b/backend/app/Http/Requests/UpdateLicenseRequest.php @@ -0,0 +1,43 @@ +|string> + */ + public function rules(): array + { + $id = $this->route('license')->id; + + return [ + 'name' => ['sometimes', 'required', 'string', 'max:200', Rule::unique('licenses', 'name')->ignore($id)], + 'acronym' => ['sometimes', 'required', 'string', 'max:50', Rule::unique('licenses', 'acronym')->ignore($id)], + 'spdx_id' => ['nullable', 'string', 'max:50', Rule::unique('licenses', 'spdx_id')->ignore($id)], + 'kind' => ['sometimes', 'required', Rule::enum(LicenseKind::class)], + 'description' => ['nullable', 'string'], + 'uri' => ['nullable', 'url', 'max:2000'], + 'file' => ['nullable', 'string', 'max:512'], + 'for_record' => ['sometimes', 'boolean'], + 'for_media' => ['sometimes', 'boolean'], + 'sort_order' => ['sometimes', 'integer', 'min:0'], + 'active' => ['sometimes', 'boolean'], + ]; + } +} diff --git a/backend/app/Models/Lists/License.php b/backend/app/Models/Lists/License.php new file mode 100644 index 0000000..cc1060b --- /dev/null +++ b/backend/app/Models/Lists/License.php @@ -0,0 +1,99 @@ + + */ + protected function casts(): array + { + return [ + 'kind' => LicenseKind::class, + 'for_record' => 'boolean', + 'for_media' => 'boolean', + 'sort_order' => 'integer', + 'active' => 'boolean', + ]; + } + + /** + * Licenze ammesse per i record (artifact/model): solo quelle aperte. + * + * @param Builder $query + */ + public function scopeForRecord(Builder $query): void + { + $query->where('for_record', true); + } + + /** + * Licenze ammesse per i media (immagini, documenti, video, modelli 3D). + * + * @param Builder $query + */ + public function scopeForMedia(Builder $query): void + { + $query->where('for_media', true); + } + + /** + * Solo le licenze attive (proposte nei form di inserimento/modifica). + * + * @param Builder $query + */ + public function scopeActive(Builder $query): void + { + $query->where('active', true); + } + + /** + * La licenza è assegnata ad almeno un contenuto. + * + * NB: oggi nessuna tabella referenzia `licenses`, quindi nessuna riga + * risulta in uso; quando arriveranno le tabelle di artifact/model/media + * (con FK su `licenses`) questo metodo dovrà controllarne l'esistenza, + * come fa InstitutionCategory::isInUse(). + */ + public function isInUse(): bool + { + return false; + } +} diff --git a/backend/database/factories/Lists/LicenseFactory.php b/backend/database/factories/Lists/LicenseFactory.php new file mode 100644 index 0000000..e400849 --- /dev/null +++ b/backend/database/factories/Lists/LicenseFactory.php @@ -0,0 +1,63 @@ + + */ +class LicenseFactory extends Factory +{ + protected $model = License::class; + + /** + * @return array + */ + public function definition(): array + { + return [ + 'name' => ucfirst(fake()->unique()->words(3, true)), + 'acronym' => strtoupper(fake()->unique()->bothify('??-#.#')), + 'spdx_id' => null, + 'kind' => LicenseKind::License, + 'description' => fake()->sentence(), + 'uri' => fake()->url(), + 'file' => null, + 'for_record' => false, + 'for_media' => true, + 'sort_order' => fake()->numberBetween(0, 100), + 'active' => true, + ]; + } + + /** + * Licenza aperta ammessa anche per i record. + */ + public function forRecord(): static + { + return $this->state(fn () => ['for_record' => true]); + } + + /** + * Rights statement (nessun testo legale, nessun id SPDX). + */ + public function rightsStatement(): static + { + return $this->state(fn () => [ + 'kind' => LicenseKind::RightsStatement, + 'spdx_id' => null, + 'file' => null, + ]); + } + + /** + * Licenza ritirata dagli admin (esclusa dalle select dei form). + */ + public function inactive(): static + { + return $this->state(fn () => ['active' => false]); + } +} diff --git a/backend/database/migrations/2026_07_03_100000_create_licenses_table.php b/backend/database/migrations/2026_07_03_100000_create_licenses_table.php new file mode 100644 index 0000000..207af8d --- /dev/null +++ b/backend/database/migrations/2026_07_03_100000_create_licenses_table.php @@ -0,0 +1,49 @@ +id(); + $table->string('name', 200)->unique(); + $table->string('acronym', 50)->unique(); + $table->string('spdx_id', 50)->nullable()->unique(); + $table->string('kind', 20)->default('license'); + $table->text('description')->nullable(); + $table->string('uri', 2000)->nullable(); + $table->string('file', 512)->nullable(); + $table->boolean('for_record')->default(false); + $table->boolean('for_media')->default(true); + $table->unsignedInteger('sort_order')->default(0); + $table->boolean('active')->default(true); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('licenses'); + } +}; diff --git a/backend/database/seeders/DatabaseSeeder.php b/backend/database/seeders/DatabaseSeeder.php index 7f988f7..5ca5bd7 100644 --- a/backend/database/seeders/DatabaseSeeder.php +++ b/backend/database/seeders/DatabaseSeeder.php @@ -20,6 +20,7 @@ class DatabaseSeeder extends Seeder SystemUserSeeder::class, InstitutionCategorySeeder::class, UserPositionSeeder::class, + LicenseSeeder::class, ]); } } diff --git a/backend/database/seeders/LicenseSeeder.php b/backend/database/seeders/LicenseSeeder.php new file mode 100644 index 0000000..a3833b3 --- /dev/null +++ b/backend/database/seeders/LicenseSeeder.php @@ -0,0 +1,223 @@ +licenses() as $id => $license) { + License::updateOrCreate(['id' => $id], $license); + } + } + + /** + * @return array> + */ + private function licenses(): array + { + return $this->openLicenses() + $this->rightsStatements(); + } + + /** + * Public Domain Mark + famiglia Creative Commons 4.0. + * + * @return array> + */ + private function openLicenses(): array + { + return [ + 1 => [ + 'name' => 'Public Domain Mark 1.0', + 'acronym' => 'PDM 1.0', + 'spdx_id' => null, + 'kind' => LicenseKind::Mark, + 'description' => 'Marks works that are already free of known copyright worldwide (for ' + .'instance because copyright has expired). It is not a license: it declares ' + .'an existing status and grants no new permission.', + 'uri' => 'https://creativecommons.org/publicdomain/mark/1.0/', + 'file' => null, + 'for_record' => false, + 'for_media' => true, + 'sort_order' => 10, + 'active' => true, + ], + 2 => [ + 'name' => 'CC0 1.0 Universal', + 'acronym' => 'CC0 1.0', + 'spdx_id' => 'CC0-1.0', + 'kind' => LicenseKind::License, + 'description' => 'Public domain dedication: the rights holder waives all copyright and ' + .'related rights worldwide. The work can be copied, modified and reused for ' + .'any purpose, even commercially, without attribution.', + 'uri' => 'https://creativecommons.org/publicdomain/zero/1.0/', + 'file' => 'CC0-1.0.txt', + 'for_record' => true, + 'for_media' => true, + 'sort_order' => 20, + 'active' => true, + ], + 3 => [ + 'name' => 'Attribution 4.0 International', + 'acronym' => 'CC BY 4.0', + 'spdx_id' => 'CC-BY-4.0', + 'kind' => LicenseKind::License, + 'description' => 'Reuse, redistribution and modification allowed for any purpose, including ' + .'commercial, provided that credit is given to the creator.', + 'uri' => 'https://creativecommons.org/licenses/by/4.0/', + 'file' => 'CC-BY-4.0.txt', + 'for_record' => true, + 'for_media' => true, + 'sort_order' => 30, + 'active' => true, + ], + 4 => [ + 'name' => 'Attribution-ShareAlike 4.0 International', + 'acronym' => 'CC BY-SA 4.0', + 'spdx_id' => 'CC-BY-SA-4.0', + 'kind' => LicenseKind::License, + 'description' => 'Same permissions as CC BY, but derivative works must be distributed under ' + .'the same license (share-alike).', + 'uri' => 'https://creativecommons.org/licenses/by-sa/4.0/', + 'file' => 'CC-BY-SA-4.0.txt', + 'for_record' => false, + 'for_media' => true, + 'sort_order' => 40, + 'active' => true, + ], + 5 => [ + 'name' => 'Attribution-NonCommercial 4.0 International', + 'acronym' => 'CC BY-NC 4.0', + 'spdx_id' => 'CC-BY-NC-4.0', + 'kind' => LicenseKind::License, + 'description' => 'Reuse and modification allowed with attribution, for non-commercial ' + .'purposes only.', + 'uri' => 'https://creativecommons.org/licenses/by-nc/4.0/', + 'file' => 'CC-BY-NC-4.0.txt', + 'for_record' => false, + 'for_media' => true, + 'sort_order' => 50, + 'active' => true, + ], + 6 => [ + 'name' => 'Attribution-NonCommercial-ShareAlike 4.0 International', + 'acronym' => 'CC BY-NC-SA 4.0', + 'spdx_id' => 'CC-BY-NC-SA-4.0', + 'kind' => LicenseKind::License, + 'description' => 'Non-commercial reuse and modification with attribution; derivative works ' + .'must keep the same license.', + 'uri' => 'https://creativecommons.org/licenses/by-nc-sa/4.0/', + 'file' => 'CC-BY-NC-SA-4.0.txt', + 'for_record' => false, + 'for_media' => true, + 'sort_order' => 60, + 'active' => true, + ], + 7 => [ + 'name' => 'Attribution-NoDerivatives 4.0 International', + 'acronym' => 'CC BY-ND 4.0', + 'spdx_id' => 'CC-BY-ND-4.0', + 'kind' => LicenseKind::License, + 'description' => 'Redistribution allowed, even commercially, with attribution, but the work ' + .'must remain unmodified: no derivative works.', + 'uri' => 'https://creativecommons.org/licenses/by-nd/4.0/', + 'file' => 'CC-BY-ND-4.0.txt', + 'for_record' => false, + 'for_media' => true, + 'sort_order' => 70, + 'active' => true, + ], + 8 => [ + 'name' => 'Attribution-NonCommercial-NoDerivatives 4.0 International', + 'acronym' => 'CC BY-NC-ND 4.0', + 'spdx_id' => 'CC-BY-NC-ND-4.0', + 'kind' => LicenseKind::License, + 'description' => 'The most restrictive CC license: the work can be shared with attribution, ' + .'but cannot be modified nor used commercially.', + 'uri' => 'https://creativecommons.org/licenses/by-nc-nd/4.0/', + 'file' => 'CC-BY-NC-ND-4.0.txt', + 'for_record' => false, + 'for_media' => true, + 'sort_order' => 80, + 'active' => true, + ], + ]; + } + + /** + * Statement di RightsStatements.org: etichettano lo stato dei diritti dei + * media chiusi o incerti, non concedono permessi (nessun testo legale, + * nessun id SPDX). + * + * @return array> + */ + private function rightsStatements(): array + { + return [ + 9 => [ + 'name' => 'In Copyright', + 'acronym' => 'InC', + 'spdx_id' => null, + 'kind' => LicenseKind::RightsStatement, + 'description' => 'The item is protected by copyright and all rights are reserved. Any reuse ' + .'beyond legal exceptions requires permission from the rights holder.', + 'uri' => 'https://rightsstatements.org/vocab/InC/1.0/', + 'file' => null, + 'for_record' => false, + 'for_media' => true, + 'sort_order' => 90, + 'active' => true, + ], + 10 => [ + 'name' => 'In Copyright - Educational Use Permitted', + 'acronym' => 'InC-EDU', + 'spdx_id' => null, + 'kind' => LicenseKind::RightsStatement, + 'description' => 'The item is protected by copyright, but the rights holder allows reuse for ' + .'educational purposes without further permission.', + 'uri' => 'https://rightsstatements.org/vocab/InC-EDU/1.0/', + 'file' => null, + 'for_record' => false, + 'for_media' => true, + 'sort_order' => 100, + 'active' => true, + ], + 11 => [ + 'name' => 'Copyright Not Evaluated', + 'acronym' => 'CNE', + 'spdx_id' => null, + 'kind' => LicenseKind::RightsStatement, + 'description' => 'The copyright status of the item has not been evaluated yet. The item ' + .'should be treated as potentially protected: reuse may require permission.', + 'uri' => 'https://rightsstatements.org/vocab/CNE/1.0/', + 'file' => null, + 'for_record' => false, + 'for_media' => true, + 'sort_order' => 110, + 'active' => true, + ], + ]; + } +} diff --git a/backend/routes/api/licenses.php b/backend/routes/api/licenses.php new file mode 100644 index 0000000..2fb9bf2 --- /dev/null +++ b/backend/routes/api/licenses.php @@ -0,0 +1,24 @@ +group(function () { + Route::apiResource('licenses', LicenseController::class) + ->only(['index', 'show']); +}); + +// Prefisso `api` e tier applicati dal loader in bootstrap/app.php. + +// Lettura dello stato d'uso: utente pienamente operativo. +Route::middleware('tier.app')->group(function () { + Route::get('licenses/{license}/usage', [LicenseController::class, 'usage']); +}); + +// Scrittura: solo Admin. +Route::middleware('tier.admin')->group(function () { + Route::apiResource('licenses', LicenseController::class) + ->only(['store', 'update', 'destroy']); +}); diff --git a/backend/storage/app/public/.gitignore b/backend/storage/app/public/.gitignore index d6b7ef3..ed420cd 100644 --- a/backend/storage/app/public/.gitignore +++ b/backend/storage/app/public/.gitignore @@ -1,2 +1,4 @@ * +!licenses/ +!licenses/** !.gitignore diff --git a/backend/storage/app/public/licenses/CC-BY-4.0.txt b/backend/storage/app/public/licenses/CC-BY-4.0.txt new file mode 100644 index 0000000..da6ab6c --- /dev/null +++ b/backend/storage/app/public/licenses/CC-BY-4.0.txt @@ -0,0 +1,396 @@ +Attribution 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution 4.0 International Public License ("Public License"). To the +extent this Public License may be interpreted as a contract, You are +granted the Licensed Rights in consideration of Your acceptance of +these terms and conditions, and the Licensor grants You such rights in +consideration of benefits the Licensor receives from making the +Licensed Material available under these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + d. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + g. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + i. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + j. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + k. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. + diff --git a/backend/storage/app/public/licenses/CC-BY-NC-4.0.txt b/backend/storage/app/public/licenses/CC-BY-NC-4.0.txt new file mode 100644 index 0000000..fe463e0 --- /dev/null +++ b/backend/storage/app/public/licenses/CC-BY-NC-4.0.txt @@ -0,0 +1,408 @@ +Attribution-NonCommercial 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-NonCommercial 4.0 International Public +License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-NonCommercial 4.0 International Public License ("Public +License"). To the extent this Public License may be interpreted as a +contract, You are granted the Licensed Rights in consideration of Your +acceptance of these terms and conditions, and the Licensor grants You +such rights in consideration of benefits the Licensor receives from +making the Licensed Material available under these terms and +conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + d. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + g. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + i. NonCommercial means not primarily intended for or directed towards + commercial advantage or monetary compensation. For purposes of + this Public License, the exchange of the Licensed Material for + other material subject to Copyright and Similar Rights by digital + file-sharing or similar means is NonCommercial provided there is + no payment of monetary compensation in connection with the + exchange. + + j. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + k. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + l. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part, for NonCommercial purposes only; and + + b. produce, reproduce, and Share Adapted Material for + NonCommercial purposes only. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties, including when + the Licensed Material is used other than for NonCommercial + purposes. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database for NonCommercial purposes + only; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. + diff --git a/backend/storage/app/public/licenses/CC-BY-NC-ND-4.0.txt b/backend/storage/app/public/licenses/CC-BY-NC-ND-4.0.txt new file mode 100644 index 0000000..cfe676c --- /dev/null +++ b/backend/storage/app/public/licenses/CC-BY-NC-ND-4.0.txt @@ -0,0 +1,403 @@ +Attribution-NonCommercial-NoDerivatives 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 +International Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-NonCommercial-NoDerivatives 4.0 International Public +License ("Public License"). To the extent this Public License may be +interpreted as a contract, You are granted the Licensed Rights in +consideration of Your acceptance of these terms and conditions, and the +Licensor grants You such rights in consideration of benefits the +Licensor receives from making the Licensed Material available under +these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + c. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + d. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + e. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + f. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + g. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + h. NonCommercial means not primarily intended for or directed towards + commercial advantage or monetary compensation. For purposes of + this Public License, the exchange of the Licensed Material for + other material subject to Copyright and Similar Rights by digital + file-sharing or similar means is NonCommercial provided there is + no payment of monetary compensation in connection with the + exchange. + + i. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + j. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + k. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part, for NonCommercial purposes only; and + + b. produce and reproduce, but not Share, Adapted Material + for NonCommercial purposes only. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties, including when + the Licensed Material is used other than for NonCommercial + purposes. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material, You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + For the avoidance of doubt, You do not have permission under + this Public License to Share Adapted Material. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database for NonCommercial purposes + only and provided You do not Share Adapted Material; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. + diff --git a/backend/storage/app/public/licenses/CC-BY-NC-SA-4.0.txt b/backend/storage/app/public/licenses/CC-BY-NC-SA-4.0.txt new file mode 100644 index 0000000..7cdbe0b --- /dev/null +++ b/backend/storage/app/public/licenses/CC-BY-NC-SA-4.0.txt @@ -0,0 +1,438 @@ +Attribution-NonCommercial-ShareAlike 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International +Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-NonCommercial-ShareAlike 4.0 International Public License +("Public License"). To the extent this Public License may be +interpreted as a contract, You are granted the Licensed Rights in +consideration of Your acceptance of these terms and conditions, and the +Licensor grants You such rights in consideration of benefits the +Licensor receives from making the Licensed Material available under +these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-NC-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution, NonCommercial, and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. NonCommercial means not primarily intended for or directed towards + commercial advantage or monetary compensation. For purposes of + this Public License, the exchange of the Licensed Material for + other material subject to Copyright and Similar Rights by digital + file-sharing or similar means is NonCommercial provided there is + no payment of monetary compensation in connection with the + exchange. + + l. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + m. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + n. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part, for NonCommercial purposes only; and + + b. produce, reproduce, and Share Adapted Material for + NonCommercial purposes only. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties, including when + the Licensed Material is used other than for NonCommercial + purposes. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-NC-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database for NonCommercial purposes + only; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + including for purposes of Section 3(b); and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. + diff --git a/backend/storage/app/public/licenses/CC-BY-ND-4.0.txt b/backend/storage/app/public/licenses/CC-BY-ND-4.0.txt new file mode 100644 index 0000000..10fbcae --- /dev/null +++ b/backend/storage/app/public/licenses/CC-BY-ND-4.0.txt @@ -0,0 +1,393 @@ +Attribution-NoDerivatives 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + + +======================================================================= + +Creative Commons Attribution-NoDerivatives 4.0 International Public +License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-NoDerivatives 4.0 International Public License ("Public +License"). To the extent this Public License may be interpreted as a +contract, You are granted the Licensed Rights in consideration of Your +acceptance of these terms and conditions, and the Licensor grants You +such rights in consideration of benefits the Licensor receives from +making the Licensed Material available under these terms and +conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + c. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + d. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + e. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + f. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + g. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + h. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + i. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + j. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce and reproduce, but not Share, Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material, You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + For the avoidance of doubt, You do not have permission under + this Public License to Share Adapted Material. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database, provided You do not Share + Adapted Material; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. + diff --git a/backend/storage/app/public/licenses/CC-BY-SA-4.0.txt b/backend/storage/app/public/licenses/CC-BY-SA-4.0.txt new file mode 100644 index 0000000..2d58298 --- /dev/null +++ b/backend/storage/app/public/licenses/CC-BY-SA-4.0.txt @@ -0,0 +1,428 @@ +Attribution-ShareAlike 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-ShareAlike 4.0 International Public +License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-ShareAlike 4.0 International Public License ("Public +License"). To the extent this Public License may be interpreted as a +contract, You are granted the Licensed Rights in consideration of Your +acceptance of these terms and conditions, and the Licensor grants You +such rights in consideration of benefits the Licensor receives from +making the Licensed Material available under these terms and +conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + l. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + m. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + including for purposes of Section 3(b); and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. + diff --git a/backend/storage/app/public/licenses/CC0-1.0.txt b/backend/storage/app/public/licenses/CC0-1.0.txt new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/backend/storage/app/public/licenses/CC0-1.0.txt @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/backend/tests/Feature/LicenseControllerTest.php b/backend/tests/Feature/LicenseControllerTest.php new file mode 100644 index 0000000..93d7bea --- /dev/null +++ b/backend/tests/Feature/LicenseControllerTest.php @@ -0,0 +1,177 @@ +create(['acronym' => 'LAST', 'sort_order' => 90]); + License::factory()->create(['acronym' => 'FIRST', 'sort_order' => 10]); + + $this->getJson('/api/licenses') + ->assertOk() + ->assertJsonCount(2, 'data') + ->assertJsonPath('data.0.acronym', 'FIRST') + ->assertJsonPath('data.1.acronym', 'LAST'); + } + + public function test_index_filters_by_record_scope(): void + { + License::factory()->count(2)->create(); + $open = License::factory()->forRecord()->create(); + + $this->getJson('/api/licenses?scope=record') + ->assertOk() + ->assertJsonCount(1, 'data') + ->assertJsonPath('data.0.id', $open->id); + } + + public function test_index_filters_by_media_scope(): void + { + License::factory()->create(['for_media' => false, 'for_record' => true]); + $media = License::factory()->create(); + + $this->getJson('/api/licenses?scope=media') + ->assertOk() + ->assertJsonCount(1, 'data') + ->assertJsonPath('data.0.id', $media->id); + } + + public function test_index_filters_by_active(): void + { + License::factory()->inactive()->create(); + $active = License::factory()->create(); + + $this->getJson('/api/licenses?active=1') + ->assertOk() + ->assertJsonCount(1, 'data') + ->assertJsonPath('data.0.id', $active->id); + } + + public function test_index_rejects_an_unknown_scope(): void + { + $this->getJson('/api/licenses?scope=banana') + ->assertStatus(422) + ->assertJsonValidationErrors('scope'); + } + + public function test_show_is_public(): void + { + $license = License::factory()->create(); + + $this->getJson("/api/licenses/{$license->id}") + ->assertOk() + ->assertJsonPath('data.id', $license->id) + ->assertJsonStructure(['data' => [ + 'id', 'name', 'acronym', 'spdx_id', 'kind', 'description', + 'uri', 'file', 'for_record', 'for_media', 'sort_order', 'active', + ]]); + } + + // --- Stato d'uso (tier.app) ------------------------------------------------ + + public function test_usage_requires_authentication(): void + { + $license = License::factory()->create(); + + $this->getJson("/api/licenses/{$license->id}/usage")->assertUnauthorized(); + } + + public function test_usage_reports_an_unreferenced_license_as_free(): void + { + $this->actingAs($this->operationalUser(), 'sanctum'); + $license = License::factory()->create(); + + $this->getJson("/api/licenses/{$license->id}/usage") + ->assertOk() + ->assertJsonPath('in_use', false); + } + + // --- Scrittura (tier.admin) ------------------------------------------------- + + public function test_admin_can_create_a_license(): void + { + $this->actingAs($this->adminUser(), 'sanctum'); + + $this->postJson('/api/licenses', [ + 'name' => 'In Copyright - Non-Commercial Use Permitted', + 'acronym' => 'InC-NC', + 'kind' => 'rights_statement', + 'description' => 'Copyrighted, but non-commercial use is permitted.', + 'uri' => 'http://rightsstatements.org/vocab/InC-NC/1.0/', + ]) + ->assertCreated() + ->assertJsonPath('data.acronym', 'InC-NC'); + + $this->assertDatabaseHas('licenses', ['acronym' => 'InC-NC', 'kind' => 'rights_statement']); + } + + public function test_create_rejects_a_duplicate_acronym(): void + { + $this->actingAs($this->adminUser(), 'sanctum'); + License::factory()->create(['acronym' => 'CC BY 4.0']); + + $this->postJson('/api/licenses', [ + 'name' => 'Attribution 4.0 International', + 'acronym' => 'CC BY 4.0', + 'kind' => 'license', + ]) + ->assertStatus(422) + ->assertJsonValidationErrors('acronym'); + } + + public function test_create_rejects_an_unknown_kind(): void + { + $this->actingAs($this->adminUser(), 'sanctum'); + + $this->postJson('/api/licenses', [ + 'name' => 'Some License', + 'acronym' => 'SL', + 'kind' => 'banana', + ]) + ->assertStatus(422) + ->assertJsonValidationErrors('kind'); + } + + public function test_admin_can_retire_a_license_with_a_partial_update(): void + { + $this->actingAs($this->adminUser(), 'sanctum'); + $license = License::factory()->create(); + + $this->patchJson("/api/licenses/{$license->id}", ['active' => false]) + ->assertOk() + ->assertJsonPath('data.active', false); + + $this->assertSame($license->acronym, $license->fresh()->acronym); + } + + public function test_admin_can_delete_an_unused_license(): void + { + $this->actingAs($this->adminUser(), 'sanctum'); + $license = License::factory()->create(); + + $this->deleteJson("/api/licenses/{$license->id}")->assertOk(); + + $this->assertDatabaseMissing('licenses', ['id' => $license->id]); + } + + public function test_a_non_admin_cannot_write(): void + { + $this->actingAs($this->operationalUser(), 'sanctum'); + $license = License::factory()->create(); + + $this->postJson('/api/licenses', ['name' => 'X', 'acronym' => 'X', 'kind' => 'license']) + ->assertForbidden(); + $this->patchJson("/api/licenses/{$license->id}", ['active' => false])->assertForbidden(); + $this->deleteJson("/api/licenses/{$license->id}")->assertForbidden(); + } +} diff --git a/backend/tests/Feature/LicenseSeederTest.php b/backend/tests/Feature/LicenseSeederTest.php new file mode 100644 index 0000000..df075e9 --- /dev/null +++ b/backend/tests/Feature/LicenseSeederTest.php @@ -0,0 +1,107 @@ +seed(LicenseSeeder::class); + + $this->assertSame(11, License::count()); + } + + public function test_legacy_ids_are_fixed_for_the_etl(): void + { + $this->seed(LicenseSeeder::class); + + // v1: 1=Public Domain, 2=CC0, 3=CC BY — l'ETL mappa le FK 1:1. + $this->assertSame('PDM 1.0', License::find(1)?->acronym); + $this->assertSame('CC0 1.0', License::find(2)?->acronym); + $this->assertSame('CC BY 4.0', License::find(3)?->acronym); + } + + public function test_only_open_licenses_are_allowed_for_records(): void + { + $this->seed(LicenseSeeder::class); + + $this->assertEqualsCanonicalizing( + ['CC0-1.0', 'CC-BY-4.0'], + License::forRecord()->pluck('spdx_id')->all() + ); + } + + public function test_every_license_is_available_for_media(): void + { + $this->seed(LicenseSeeder::class); + + $this->assertSame(11, License::forMedia()->count()); + $this->assertSame(11, License::active()->count()); + } + + public function test_marks_and_rights_statements_have_no_spdx_id_and_no_file(): void + { + $this->seed(LicenseSeeder::class); + + License::where('kind', '!=', LicenseKind::License)->get()->each(function (License $license): void { + $this->assertNull($license->spdx_id, "{$license->acronym} must have no SPDX id"); + $this->assertNull($license->file, "{$license->acronym} must have no legal text file"); + }); + } + + public function test_proper_licenses_have_spdx_id_file_and_uri(): void + { + $this->seed(LicenseSeeder::class); + + $proper = License::where('kind', LicenseKind::License)->get(); + + $this->assertCount(7, $proper); + $proper->each(function (License $license): void { + $this->assertNotNull($license->spdx_id); + $this->assertSame("{$license->spdx_id}.txt", $license->file); + $this->assertNotNull($license->uri); + }); + } + + public function test_legal_text_files_ship_with_the_application(): void + { + $this->seed(LicenseSeeder::class); + + License::whereNotNull('file')->get()->each(function (License $license): void { + $this->assertFileExists(storage_path("app/public/licenses/{$license->file}")); + }); + } + + public function test_every_entry_has_an_admin_facing_description(): void + { + $this->seed(LicenseSeeder::class); + + License::all()->each(function (License $license): void { + $this->assertNotEmpty($license->description, "{$license->acronym} must have a description"); + }); + } + + public function test_it_is_idempotent(): void + { + $this->seed(LicenseSeeder::class); + $this->seed(LicenseSeeder::class); + + $this->assertSame(11, License::count()); + } + + public function test_database_seeder_includes_the_licenses(): void + { + $this->seed(DatabaseSeeder::class); + + $this->assertSame(11, License::count()); + } +} diff --git a/backend/tests/Unit/LicenseKindTest.php b/backend/tests/Unit/LicenseKindTest.php new file mode 100644 index 0000000..733d37a --- /dev/null +++ b/backend/tests/Unit/LicenseKindTest.php @@ -0,0 +1,27 @@ +assertNotSame('', $case->label()); + } + } + + public function test_rights_statement_case_value_and_label(): void + { + $this->assertSame('rights_statement', LicenseKind::RightsStatement->value); + $this->assertSame('Rights statement', LicenseKind::RightsStatement->label()); + } + + public function test_it_is_a_string_backed_enum(): void + { + $this->assertSame(LicenseKind::Mark, LicenseKind::from('mark')); + } +} diff --git a/docker-compose.override.yml b/docker-compose.override.yml index a5a6791..37f2019 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -2,7 +2,8 @@ # docker-compose.override.yml — Sviluppo locale # Attivo automaticamente con: docker compose up -d # → avvia l'intero stack di sviluppo: Vite dev server (HMR) + backend -# (artisan serve) + db + redis + docs + mailpit, dietro Traefik. +# (artisan serve) + db + redis + mailpit, dietro Traefik. +# (la documentazione non è nello stack: GitHub Pages / `make docs`) # # In produzione si usa SOLO il compose base (niente override, niente Traefik): # docker compose -f docker-compose.yml up -d diff --git a/docker-compose.yml b/docker-compose.yml index 53a7556..41ecae0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -164,19 +164,8 @@ services: - "com.docker.compose.project=dyncoll-project" - "com.docker.compose.stack=dyncoll-project" - docs: - image: squidfunk/mkdocs-material - container_name: dyncoll_docs - restart: always - # L'immagine ha ENTRYPOINT ["mkdocs"]: serviamo il sito in ascolto su 8000. - command: ["serve", "--dev-addr=0.0.0.0:8000"] - volumes: - # mkdocs si aspetta mkdocs.yml in /docs e i contenuti in /docs/docs - - ./documentation:/docs:ro - networks: - - internal - labels: - - "com.docker.compose.project=dyncoll-project" + # NB: la documentazione (MkDocs) non ha un servizio dedicato: la pubblica + # GitHub Pages (.github/workflows/docs.yml); anteprima locale con `make docs`. frontend: image: dyncoll-frontend:3.0 diff --git a/docs/assets/logo_dyncoll_graphic.png b/docs/assets/logo_dyncoll_graphic.png new file mode 100644 index 0000000000000000000000000000000000000000..3fd9a8b46c134e952104504b72190ed1f6bf92e9 GIT binary patch literal 78129 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 literal 0 HcmV?d00001 diff --git a/docs/developer/index.md b/docs/developer/index.md new file mode 100644 index 0000000..63d30df --- /dev/null +++ b/docs/developer/index.md @@ -0,0 +1,17 @@ +# Developer guide + +Architecture, data model and API of the Dynamic Collection platform, for +developers and integrators. + +At a glance: an API-only **Laravel** backend (Sanctum + Fortify, MySQL, +Redis/Horizon), a **Vite + TypeScript** multi-page frontend with islands +(Tailwind v4 + daisyUI, Leaflet, 3DHOP), and a **Linked Art** provider +exposing records for harvesting by the Swedish national aggregator +(KSamsök 2). + +## Chapters + +- **[Licenses](licenses.md)** — the license vocabulary: data model, seeding, + legal text files, REUSE constraints and API endpoints. + +*More chapters will follow as the platform takes shape.* diff --git a/docs/developer/licenses.md b/docs/developer/licenses.md new file mode 100644 index 0000000..2ca0f9b --- /dev/null +++ b/docs/developer/licenses.md @@ -0,0 +1,67 @@ +# Licenses + +The license vocabulary: data model, seeding, legal text files and API. For +the user-facing overview see the [User guide](../user/licenses.md). + +## Data model + +Licenses are a controlled vocabulary (table `licenses`, model +`App\Models\Lists\License`), created and populated at install time by the +`LicenseSeeder` — **not** by the v1 ETL. + +| Column | Meaning | +|---|---| +| `name` | Official full name (e.g. *Attribution 4.0 International*) | +| `acronym` | Display label shown in the UI (e.g. *CC BY 4.0*) | +| `spdx_id` | [SPDX](https://spdx.org/licenses/) identifier for export and interoperability; `NULL` for entries outside the SPDX License List — never invent one | +| `kind` | Backed enum `App\Enums\LicenseKind`: `license`, `mark` or `rights_statement` | +| `description` | One-sentence explanation shown in the forms | +| `uri` | Canonical URI (creativecommons.org / rightsstatements.org), also used in the Linked Art JSON-LD | +| `file` | File name of the legal text bundled in media download zips; `NULL` where no legal text exists | +| `for_record` / `for_media` | Scope flags: records only accept open licenses (CC0, CC BY), media accept everything | +| `sort_order` | Ordering in selects, from the most open to the most restrictive | +| `active` | Soft retirement: an inactive license disappears from forms but stays valid for content already using it | + +Scope and `active` filtering happens in the form selects **and** is +re-validated server side; an edit form must still include the currently +assigned license even when it is inactive or out of scope. + +## Seeding and legacy ids + +The seeder ships 11 entries: Public Domain Mark + the CC 4.0 family + the +three most common rights statements (*InC*, *InC-EDU*, *CNE*). Ids **1–3 are +fixed** and match the legacy v1 database (1 = PDM, 2 = CC0, 3 = CC BY) so the +ETL maps artifact/media foreign keys 1:1 without translation. Further entries +can be added by administrators at runtime. + +## Legal texts and downloads + +The official CC legal texts live in +**`backend/storage/app/public/licenses/`**, named after their SPDX id +(e.g. `CC-BY-4.0.txt`). They are versioned in the repository — an exception +in `storage/app/public/.gitignore` — so they exist from the first clone. From +there the backend bundles them into media download zips, and the frontend can +link them directly (`/storage/licenses/…`, via `php artisan storage:link`). +Marks and rights statements have no legal text (`file` is `NULL`): the zip +only carries their canonical URI. + +!!! warning "REUSE" + The root `LICENSES/` directory is reserved for the licenses **of the + repository**: [REUSE](https://reuse.software) fails the lint on license + texts not referenced by any file ("unused license"), and duplicate SPDX + file names anywhere under `LICENSES/` crash the tool. That is why the + downloadable texts live under `backend/storage/`. Their provenance is + annotated in `REUSE.toml`: Creative Commons dedicates the text of its + licenses to the public domain (CC0), which is also why `LICENSES/` + contains `CC0-1.0.txt`. + +## API + +| Endpoint | Access | Purpose | +|---|---|---| +| `GET /api/licenses` | public | list; filters `scope=record\|media`, `active=0\|1` | +| `GET /api/licenses/{id}` | public | detail | +| `GET /api/licenses/{id}/usage` | authenticated | is the license in use? | +| `POST /api/licenses` | admin | create an entry | +| `PUT/PATCH /api/licenses/{id}` | admin | update (partial updates supported, e.g. only `active`) | +| `DELETE /api/licenses/{id}` | admin | delete; blocked with `409` when the entry is in use | diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..4f5edc9 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,22 @@ +# Dynamic Collection + +User and technical documentation for the **Dynamic Collection** platform +(version 2). + +Dynamic Collection is a platform for cataloguing and curating digital +collections of archaeological artifacts, developed by the +[DARKLab](https://www.darklab.lu.se/) at Lund University. Version 2 exposes +its data through the **KSamsök 2 Linked Art** harvesting standard of the +Swedish National Heritage Board (Riksantikvarieämbetet, RAÄ), so that records +can be collected by the Swedish national aggregator. + +!!! note "Work in progress" + This documentation is being written alongside the rewrite of the + platform: sections will appear as the corresponding features land. + +## Where to go + +- **[User guide](user/index.md)** — for cataloguers, curators and + administrators working with collections through the web interface. +- **[Developer guide](developer/index.md)** — architecture, data model and + API reference for developers and integrators. diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css new file mode 100644 index 0000000..14f5761 --- /dev/null +++ b/docs/stylesheets/extra.css @@ -0,0 +1,29 @@ +/* Brand alignment with the Dynamic Collection application + (see frontend/src/styles/main.css: --dc-primary, --dc-secondary). */ + +@import url('https://fonts.googleapis.com/css2?family=Rajdhani:wght@500;700&display=swap'); + +:root { + /* --dc-primary rgb(34, 69, 138) */ + --md-primary-fg-color: #22458a; + --md-primary-fg-color--light: #4a6cb0; + /* --dc-primary-dark rgb(0, 15, 46) */ + --md-primary-fg-color--dark: #000f2e; + /* --dc-secondary-dark rgb(241, 146, 4) — links/hover accents */ + --md-accent-fg-color: #f19204; +} + +[data-md-color-scheme='slate'] { + --md-primary-fg-color: #22458a; + --md-accent-fg-color: #f9b958; +} + +/* Display font for headings and site title, consistent with the app logo. */ +.md-typeset h1, +.md-typeset h2, +.md-typeset h3, +.md-typeset h4, +.md-header__topic { + font-family: 'Rajdhani', 'Titillium Web', ui-sans-serif, system-ui, sans-serif; + font-weight: 700; +} diff --git a/docs/user/index.md b/docs/user/index.md new file mode 100644 index 0000000..728d953 --- /dev/null +++ b/docs/user/index.md @@ -0,0 +1,11 @@ +# User guide + +How to work with Dynamic Collection through the web interface: cataloguing +artifacts and 3D models, uploading media, and administering the platform. + +## Chapters + +- **[Licenses](licenses.md)** — how records and media are licensed, which + options are available, and how to choose the right one. + +*More chapters will follow as the platform takes shape.* diff --git a/docs/user/licenses.md b/docs/user/licenses.md new file mode 100644 index 0000000..40194da --- /dev/null +++ b/docs/user/licenses.md @@ -0,0 +1,66 @@ +# Licenses + +Every **record** (artifact or 3D model) and every **media file** (image, +document, video) in Dynamic Collection carries a license that tells the world +what can be done with it. This chapter explains the available options and how +to choose. + +## Not everything is a license + +The platform distinguishes three kinds of entries: + +- **Licenses** grant permissions: the Creative Commons family (CC0, CC BY, + …). Choosing one tells reusers exactly what they are allowed to do. +- **The Public Domain Mark** (PDM) declares that a work is *already* free of + known copyright — for instance because copyright has expired. It grants + nothing new; it labels an existing status. +- **Rights statements** ([RightsStatements.org](https://rightsstatements.org)) + label media that are closed or whose status is uncertain. Copyrighted + material is not "licensed": it is labelled with one of these (e.g. *In + Copyright*). + +## Records vs media + +**Records** must stay open — that is the point of publishing them — so only +**CC0 1.0** and **CC BY 4.0** can be selected. **Media files** may need the +full range, including closed options: a photograph may be under copyright +even when the record describing the artifact is open. + +The forms only offer the options valid for what you are editing. + +!!! note "Editing existing content" + An edit form always includes the currently assigned license, even if an + administrator has since retired it: you are never forced to change the + license of existing content just to save an unrelated edit. + +## Available options + +From the most open to the most restrictive: + +| Option | Kind | What it means | +|---|---|---| +| PDM 1.0 | mark | Already free of known copyright worldwide (e.g. expired). | +| CC0 1.0 | license | The rights holder waives all rights: any use, no attribution required. | +| CC BY 4.0 | license | Any use, including commercial, with credit to the creator. | +| CC BY-SA 4.0 | license | Like CC BY, but derivatives must keep the same license. | +| CC BY-NC 4.0 | license | Reuse with attribution, non-commercial only. | +| CC BY-NC-SA 4.0 | license | Non-commercial, with attribution, same license on derivatives. | +| CC BY-ND 4.0 | license | Redistribution with attribution, but no derivative works. | +| CC BY-NC-ND 4.0 | license | Most restrictive CC: share with credit, no changes, no commercial use. | +| InC | rights statement | In copyright, all rights reserved: reuse requires permission. | +| InC-EDU | rights statement | In copyright, but educational use is permitted. | +| CNE | rights statement | Copyright not evaluated yet: treat as potentially protected. | + +Each option shows a short explanation in the form when selected. When media +are downloaded, the zip archive includes the full legal text of the license +(for CC licenses) or the canonical URI of the statement. + +## For administrators + +Licenses are managed from the admin panel: + +- **Add** further entries when needed — for example other RightsStatements.org + statements (*InC-NC*, *NoC-NC*, *NKC*, *UND*, …). +- **Retire** an option by deactivating it: it disappears from the forms but + remains valid for the content that already uses it. This is always + preferable to deletion, which is only possible for entries not in use. diff --git a/documentation/docs/index.md b/documentation/docs/index.md deleted file mode 100644 index d9a4ac5..0000000 --- a/documentation/docs/index.md +++ /dev/null @@ -1,16 +0,0 @@ -# Dynamic Collection v2 - -Documentazione utente e tecnica della piattaforma **Dynamic Collection** (versione 2). - -Piattaforma per la catalogazione e curatela di collezioni digitali di reperti -archeologici, con esposizione dei dati secondo lo standard di harvesting -**KSamsök 2 Linked Art** del Riksantikvarieämbetet (RAÄ). - -!!! note "Lavori in corso" - Questa documentazione è in fase di stesura insieme alla riscrittura della piattaforma. - -## Sezioni - -- Guida utente — *in arrivo* -- Guida sviluppatore — *in arrivo* -- Endpoint LOD / Linked Art — *in arrivo* diff --git a/documentation/mkdocs.yml b/documentation/mkdocs.yml deleted file mode 100644 index c3d28e6..0000000 --- a/documentation/mkdocs.yml +++ /dev/null @@ -1,22 +0,0 @@ -site_name: Dynamic Collection v2 -site_description: Documentazione della piattaforma Dynamic Collection (v2) -repo_url: https://github.com/LundDarkLab/adc - -docs_dir: docs - -theme: - name: material - palette: - primary: indigo - features: - - navigation.tabs - - navigation.sections - - content.code.copy - -markdown_extensions: - - admonition - - pymdownx.highlight - - pymdownx.superfences - -nav: - - Home: index.md diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..51cab5e --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,53 @@ +site_name: Dynamic Collection +site_description: Documentation of the Dynamic Collection platform (v2) +site_url: https://lunddarklab.github.io/adc/ +repo_url: https://github.com/LundDarkLab/adc + +docs_dir: docs + +theme: + name: material + logo: assets/logo_dyncoll_graphic.png + favicon: assets/logo_dyncoll_graphic.png + font: + text: Titillium Web + code: Roboto Mono + palette: + # Brand colors (--dc-primary / --dc-secondary) are defined in + # stylesheets/extra.css; `custom` tells Material to use them. + - media: "(prefers-color-scheme: light)" + scheme: default + primary: custom + accent: custom + toggle: + icon: material/brightness-7 + name: Switch to dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + primary: custom + accent: custom + toggle: + icon: material/brightness-4 + name: Switch to light mode + features: + - navigation.tabs + - navigation.sections + - navigation.top + - content.code.copy + +extra_css: + - stylesheets/extra.css + +markdown_extensions: + - admonition + - pymdownx.highlight + - pymdownx.superfences + +nav: + - Home: index.md + - User guide: + - Overview: user/index.md + - Licenses: user/licenses.md + - Developer guide: + - Overview: developer/index.md + - Licenses: developer/licenses.md