diff --git a/.gitignore b/.gitignore index e6da548..6d39070 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,12 @@ venv/ .idea/ .DS_Store Thumbs.db + +# Maintainer-only development context (never commit) +.internal/ +AI_CONTENT.md +AI_CONTENT_ANALYSE.txt +AI_CONTEXT.md +AI_CONTEXT_ANALYSE.txt +DEVELOPMENT_NOTES.md +DEVELOPMENT_CONTEXT.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cb859e6..8b30d1f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,26 +1,19 @@ # Contributing to AssetManager -Contributions, bug reports, and forks are welcome. +Contributions and bug reports are welcome. ## Pull requests -- A pull request is a proposal. The maintainer decides whether, when, and in which form it is included. -- By intentionally submitting a contribution, you confirm that you are authorized to publish it and that it may be licensed under the Apache License 2.0. -- Do not copy third-party source code, graphics, or text without a demonstrably compatible license and all required copyright or license notices. -- Mention other products in public source code, comments, release notes, and documentation only when documenting an actual integration, dependency, or required compatibility. Pure product comparisons do not belong in the public source tree. -- Keep changes focused on the affected area and avoid modifying existing functionality without a valid technical reason. -- Add every new user-visible string to the existing translation system for all supported languages. -- New or changed user interfaces must work in both light and dark mode. -- For a release, update `VERSION`, `app/version.py`, `README.md`, and the corresponding file under `docs/version-history/`. +- Keep each pull request focused on a clear feature, fix, or documentation improvement. +- Do not include credentials, personal data, private infrastructure details, logs, databases, backups, or runtime configuration. +- Do not copy third-party source code, graphics, or text unless the license is compatible and all required notices are preserved. +- Mention third-party products only when documenting an actual integration, dependency, or compatibility requirement. +- Add user-visible text through the translation system for every supported language. +- User-interface changes must remain usable in both light and dark mode. +- Update relevant public documentation when released behavior changes. -## Before submitting - -```bash -python tools/check_public_release.py -python tools/check_translations.py -python tools/validate_release.py -``` +By intentionally submitting a contribution, you confirm that you are authorized to publish it and that it may be distributed under the Apache License 2.0 used by this project. ## Third-party components -Review every new dependency for license compatibility, provenance, maintenance status, and security risks. Update `THIRD_PARTY_NOTICES.md` and preserve all required license or NOTICE files in distributed products. +Review new dependencies for license compatibility, provenance, maintenance status, and security risks. Update `THIRD_PARTY_NOTICES.md` when a distributed dependency changes. diff --git a/README.md b/README.md index 7e01432..0578ea0 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,39 @@ -# AssetManager 0.5.5.41 +# AssetManager 0.5.5.42 -AssetManager is a self-hosted web application for managing IT equipment and other organizational assets. The project is released under the **Apache License 2.0** and may be used, modified, and redistributed for private and commercial purposes. +AssetManager is a self-hosted web application for managing IT equipment and other organizational assets. It provides asset inventory, software inventory, remote job execution, reporting, privacy/retention documentation, and optional integration with MeshCentral. + +The project is licensed under the **Apache License 2.0** and may be used, modified, and redistributed for private and commercial purposes under the terms of that license. ## Features -- configurable asset categories, fields, and status values -- asset lists, detail views, history, assignment, and return workflows -- Excel import and export, bulk changes, duplicate merging, and tree views -- hardware and software inventory -- job definitions and job execution with status tracking, callbacks, retries, and logs -- local user management and optional LDAP authentication -- protected local emergency administrator even when LDAP is enabled -- roles, visibility rules, translations, dark mode, and configurable appearance -- integrated backup and restore functions +- configurable asset categories, fields, status values, images, and assignments +- asset lists, detail views, history, bulk editing, Excel import/export, duplicate merging, and tree views +- hardware and software inventory with comparison and aggregation views +- job definitions and remote job execution with status tracking, callbacks, retries, and logs - optional MeshCentral integration through the MeshCtrl command-line interface - -## MeshCentral integration - -The integration is optional. AssetManager uses MeshCtrl for supported device queries and remote jobs. It does not access the MeshCentral database directly. MeshCentral and MeshCtrl are independent third-party projects and are not part of this repository; they are installed as dependencies during the Docker build. +- local users, optional LDAP/Active Directory authentication, and a protected local emergency administrator +- roles and asset visibility rules +- multilingual user interface, dark mode, charts, and configurable appearance +- integrated application backup and restore +- privacy and retention documentation with text, HTML, and Excel exports ## Requirements - Docker Engine with Docker Compose -- a suitable DNS name and HTTPS reverse proxy are recommended for production installations -- optionally, a reachable MeshCentral instance -- optionally, LDAP or Active Directory +- a supported PostgreSQL container as defined by `docker-compose.yml` +- a suitable DNS name and HTTPS reverse proxy are recommended for production use +- optional: reachable MeshCentral instance +- optional: LDAP or Active Directory ## Installation +Create the local environment file: + ```bash cp .env.example .env ``` -Set at least these values in `.env`: +Set at least the required secrets in `.env`: ```env POSTGRES_PASSWORD=CHANGE_ME @@ -41,13 +42,13 @@ LOCAL_ADMIN_USERNAME=emergency-admin LOCAL_ADMIN_PASSWORD=CHANGE_ME_MIN_12_CHARS ``` -Then start the application: +Start the application: ```bash docker compose up -d --build ``` -By default, the application is available on port `8088`. +By default, AssetManager is exposed on port `8088`. ## Persistent data @@ -63,11 +64,29 @@ data/ └── scripts/ deployed scripts ``` -These directories and `.env` may contain credentials, personal data, or internal operational data and must not be committed to a public repository. +These directories and `.env` may contain credentials, personal data, or internal operational information and must not be committed to a public repository. + +## Authentication + +AssetManager supports local authentication and LDAP/Active Directory authentication. A protected local emergency administrator can be configured through environment variables so that administrative access remains possible if LDAP is unavailable. + +LDAP debug logging is optional and should normally remain disabled. When disabled, LDAP logs contain only reduced authentication information. + +## MeshCentral integration + +MeshCentral integration is optional. AssetManager uses MeshCtrl for supported device queries, synchronization, presence information, file transfer, and remote jobs. AssetManager does not access the MeshCentral database directly. + +MeshCentral and MeshCtrl are independent third-party projects and are not part of this repository. They are installed as dependencies during the Docker build. + +## Privacy and retention + +The application includes a **Security & Privacy** section for documenting processing activities, data categories, retention periods, recipients, international transfers, technical and organizational measures, and deletion checks. Reports can be exported as text, HTML, or Excel. + +Deletion functions are restricted to administrators. Exported reports do not include passwords, callback tokens, or other secrets. ## Updating -Always back up `.env` and the complete `data/` directory before updating. Copy the new `assetmanager/` directory over the existing project directory and run: +Back up `.env` and the complete `data/` directory before updating. Copy the new `assetmanager/` directory over the existing project directory and rebuild the application container: ```bash docker compose down @@ -75,45 +94,19 @@ docker compose up -d --build docker compose logs --tail=100 -f ``` -Detailed release notes are stored in [`docs/version-history/`](docs/version-history/README.md). - -## Creating a sanitized public source archive - -The exporter creates a sanitized ZIP archive with exactly one top-level directory named `assetmanager/`: - -```bash -python tools/create_github_source.py -``` - -Before exporting, the script validates versions, license metadata, sensitive runtime files, and unwanted product-comparison references. - -## Validation - -```bash -python tools/check_public_release.py -python tools/check_translations.py -python tools/validate_release.py -``` - -## Documentation - -- [Client communication and software deployment architecture](docs/architecture/SOFTWARE-CLIENT-ARCHITECTURE.md) -- [Version history](docs/version-history/README.md) -- [Contributing](CONTRIBUTING.md) -- [Security policy](SECURITY.md) -- [Third-party notices](THIRD_PARTY_NOTICES.md) - -## Third-party components - -Direct dependencies and their license types are listed in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md). During the Docker build, license files from the installed Python and Node.js packages are collected under `/app/THIRD_PARTY_LICENSES/`. - -## Contributing - -Contributions and forks are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md). A submission is a proposal and does not create an obligation to include it in the official project. +Historical release notes are available in [`docs/version-history/`](docs/version-history/README.md). ## Security -Do not disclose credentials or exploitable details in a public issue. See [SECURITY.md](SECURITY.md). +Do not commit credentials, tokens, private keys, personal data, runtime databases, logs, backups, or internal deployment details. Security reporting guidance is available in [SECURITY.md](SECURITY.md). + +## Third-party components + +Direct dependencies and license information are listed in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md). During the Docker build, license files from installed Python and Node.js packages are collected under `/app/THIRD_PARTY_LICENSES/`. + +## Contributing + +Contributions and bug reports are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for repository contribution requirements. ## License diff --git a/VERSION b/VERSION index 3eb770a..0df7470 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.5.5.41 +0.5.5.42 diff --git a/app/version.py b/app/version.py index f889c80..750597e 100644 --- a/app/version.py +++ b/app/version.py @@ -1,2 +1,2 @@ -APP_VERSION = "0.5.5.41" +APP_VERSION = "0.5.5.42" __version__ = APP_VERSION diff --git a/docs/version-history/README.md b/docs/version-history/README.md index b531f78..e02ce65 100644 --- a/docs/version-history/README.md +++ b/docs/version-history/README.md @@ -163,3 +163,5 @@ See [UPDATE-NOTE.md](UPDATE-NOTE.md). - [0.5.5.39](UPDATE-0.5.5.39.md) – Privacy read-only tabs and permission-aware dashboard counts. - [0.5.5.40](UPDATE-0.5.5.40.md) – Privacy exports available to all authenticated users. - [0.5.5.41](UPDATE-0.5.5.41.md) – Configurable MeshCentral matching and synchronization dry run. + +- [0.5.5.42](UPDATE-0.5.5.42.md) — public repository documentation cleanup diff --git a/docs/version-history/UPDATE-0.3.7.md b/docs/version-history/UPDATE-0.3.7.md index 7ebc39d..46e001b 100644 --- a/docs/version-history/UPDATE-0.3.7.md +++ b/docs/version-history/UPDATE-0.3.7.md @@ -1,7 +1,5 @@ # AssetManager 0.3.7 - Internationalization foundation -Stable rollback reference: 0.3.6.3 (German-only UI). - New: - English source/fallback language and German translation - Per-user language setting diff --git a/docs/version-history/UPDATE-0.3.8.0.md b/docs/version-history/UPDATE-0.3.8.0.md index 897437a..993ae47 100644 --- a/docs/version-history/UPDATE-0.3.8.0.md +++ b/docs/version-history/UPDATE-0.3.8.0.md @@ -1,14 +1,12 @@ # AssetManager 0.3.8.0 - Central field catalog and MeshCentral GUI configuration IMPORTANT: -- Stable rollback version before this structural migration: 0.3.7.10 - Create a PostgreSQL/database backup before first start. - Do not copy .env, config.json, data, uploads or logs from this ZIP. New database objects: - field_definitions - asset_field_values -- mesh_field_mappings (prepared for future database-backed mappings) - category_fields.field_definition_id Design: diff --git a/docs/version-history/UPDATE-0.3.8.1.md b/docs/version-history/UPDATE-0.3.8.1.md index cf7eb35..1e677b4 100644 --- a/docs/version-history/UPDATE-0.3.8.1.md +++ b/docs/version-history/UPDATE-0.3.8.1.md @@ -11,5 +11,4 @@ Changes: Important: - .env, config.json, database data, uploads and logs are not included. -- The rollback version before this structural change remains 0.3.7.10. - Create a PostgreSQL backup before installation. diff --git a/docs/version-history/UPDATE-0.5.5.42.md b/docs/version-history/UPDATE-0.5.5.42.md new file mode 100644 index 0000000..1bf835d --- /dev/null +++ b/docs/version-history/UPDATE-0.5.5.42.md @@ -0,0 +1,10 @@ +# AssetManager 0.5.5.42 + +## Repository documentation cleanup + +- Simplified the public README to released functionality, installation, operation, security, privacy, dependencies, updating, contribution information, and licensing. +- Removed proposal-style architecture documentation from the public documentation tree. +- Removed historical rollback and tentative implementation notes from public release notes. +- Added Git ignore rules for maintainer-only development context and AI/chat handover files. +- Updated the public-source exporter and release checker so maintainer-only files cannot be included in public source archives. +- No application runtime logic, database schema, or user configuration was changed. diff --git a/tools/check_public_release.py b/tools/check_public_release.py index ff18427..f401ae7 100755 --- a/tools/check_public_release.py +++ b/tools/check_public_release.py @@ -13,7 +13,7 @@ TEXT_SUFFIXES = { ".css", ".env", ".html", ".ini", ".js", ".json", ".md", ".py", ".sh", ".toml", ".txt", ".yaml", ".yml", ".ps1", ".cmd", ".bat", } -SKIP_DIRS = {".git", ".venv", "venv", "__pycache__", "dist", "THIRD_PARTY_LICENSES"} +SKIP_DIRS = {".git", ".venv", "venv", "__pycache__", "dist", "THIRD_PARTY_LICENSES", ".internal"} ALLOWED_RUNTIME_MARKER = ".gitkeep" FORBIDDEN_FILES = { ".env", @@ -21,6 +21,8 @@ FORBIDDEN_FILES = { "data/config/APPINFO.json", "app/main_old.py", "PRUEFEN-0.5.5.5.sh", + "AI_CONTENT.md", "AI_CONTENT_ANALYSE.txt", "AI_CONTEXT.md", "AI_CONTEXT_ANALYSE.txt", + "DEVELOPMENT_NOTES.md", "DEVELOPMENT_CONTEXT.md", } FORBIDDEN_RUNTIME_DIRS = { "data/postgres", "data/uploads", "data/logs", "data/backups", diff --git a/tools/create_github_source.py b/tools/create_github_source.py index 1731071..44ee6ea 100755 --- a/tools/create_github_source.py +++ b/tools/create_github_source.py @@ -13,7 +13,7 @@ from zipfile import ZIP_DEFLATED, ZipFile ROOT = Path(__file__).resolve().parents[1] EXCLUDED_NAMES = { ".git", ".venv", "venv", "__pycache__", ".pytest_cache", ".mypy_cache", - ".ruff_cache", "dist", "THIRD_PARTY_LICENSES", + ".ruff_cache", "dist", "THIRD_PARTY_LICENSES", ".internal", } EXCLUDED_FILES = { ".env", @@ -22,6 +22,8 @@ EXCLUDED_FILES = { "app/main_old.py", "assetmanager.db", ".public-release-local-patterns", + "AI_CONTENT.md", "AI_CONTENT_ANALYSE.txt", "AI_CONTEXT.md", "AI_CONTEXT_ANALYSE.txt", + "DEVELOPMENT_NOTES.md", "DEVELOPMENT_CONTEXT.md", } RUNTIME_DIRS = { "data/postgres", "data/uploads", "data/logs", "data/backups", diff --git a/tools/validate_release.py b/tools/validate_release.py index 08e35b4..c2d029b 100755 --- a/tools/validate_release.py +++ b/tools/validate_release.py @@ -55,7 +55,6 @@ def check_repository_documentation() -> None: ROOT / "CONTRIBUTING.md", ROOT / "SECURITY.md", ROOT / "THIRD_PARTY_NOTICES.md", - ROOT / "docs" / "architecture" / "SOFTWARE-CLIENT-ARCHITECTURE.md", ROOT / "docs" / "version-history" / "README.md", ROOT / "docs" / "version-history" / f"UPDATE-{(ROOT / 'VERSION').read_text(encoding='utf-8').strip()}.md", ] @@ -117,10 +116,10 @@ def check_job_definition_frontend() -> None: template_dir = APP_DIR / "templates" / "jobs" required_templates = { - "powershell_wrapper.ps1": ["{{JobId}}", "{{CallbackUrl}}", "Eigene Befehle hier einfügen"], - "python_wrapper.py.txt": ["{{JobId}}", "{{CallbackUrl}}", "Eigene Befehle hier einfügen"], + "powershell_wrapper.ps1": ["{{JobId}}", "{{CallbackUrl}}"], + "python_wrapper.py.txt": ["{{JobId}}", "{{CallbackUrl}}"], "bash_wrapper.sh": ["{{JobId}}", "{{CallbackUrl}}", "${status}", "${code}"], - "cmd_wrapper.cmd": ["{{JobId}}", "{{CallbackUrl}}", "Eigene Befehle hier einfügen"], + "cmd_wrapper.cmd": ["{{JobId}}", "{{CallbackUrl}}"], "powershell_test.txt": ["{{AssetName}}", "{{Hostname}}"], "python_test.txt": ["{{AssetName}}", "{{Hostname}}"], "bash_test.txt": ["{{AssetName}}", "{{Hostname}}"],