dependabot[bot]
ecd5aec2f8
Bump the python-dependencies group with 20 updates ( #452 )
...
---
updated-dependencies:
- dependency-name: pint
dependency-version: 0.25.3
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: python-dependencies
- dependency-name: pyyaml
dependency-version: 6.0.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: python-dependencies
- dependency-name: aiohttp
dependency-version: 3.14.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: python-dependencies
- dependency-name: alembic
dependency-version: 1.18.4
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: python-dependencies
- dependency-name: beautifulsoup4
dependency-version: 4.14.3
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: python-dependencies
- dependency-name: ebooklib
dependency-version: '0.20'
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: python-dependencies
- dependency-name: feedparser
dependency-version: 6.0.12
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: python-dependencies
- dependency-name: jc
dependency-version: 1.25.6
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: python-dependencies
- dependency-name: libzim
dependency-version: 3.10.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: python-dependencies
- dependency-name: mock
dependency-version: 5.2.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: python-dependencies
- dependency-name: psycopg2-binary
dependency-version: 2.9.12
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: python-dependencies
- dependency-name: pytest-asyncio
dependency-version: 1.4.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: python-dependencies
- dependency-name: pytest-xdist
dependency-version: 3.8.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: python-dependencies
- dependency-name: python-docx
dependency-version: 1.2.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: python-dependencies
- dependency-name: pytz
dependency-version: '2026.2'
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: python-dependencies
- dependency-name: sanic
dependency-version: 25.12.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: python-dependencies
- dependency-name: secretstorage
dependency-version: 3.5.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: python-dependencies
- dependency-name: selenium
dependency-version: 4.44.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: python-dependencies
- dependency-name: tqdm
dependency-version: 4.67.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: python-dependencies
- dependency-name: vininfo
dependency-version: 1.11.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: python-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-11 19:46:32 -06:00
Roland
ead47e916b
Fix SMART temperature always reporting null.
...
Real drives report attribute 194 raw values like "52 (Min/Max 16/57)"
which int() cannot parse, so every drive's temperature was null.
Prefer pySMART's `temperature` property, which parses these formats
and also works for NVMe devices that have no ATA attribute table.
Verified on real hardware (WD100EMAZ over USB-SAT): 51-53C now
reported where null was returned before.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 19:46:31 -06:00
Roland
9d6eb0873e
Controller can unmount foreign mounts; protect the primary drive.
...
The /api/disks/unmount endpoint only removed entries from fstab.yaml and
asked the reconciler to unmount, but the reconciler deliberately never
unmounts paths it has not claimed. Foreign mounts (udisks2 desktop
automounts, manual mounts) therefore could not be unmounted from the UI,
failing with a confusing "check journalctl" error.
- Fall back to a direct umount(8) when a reconcile leaves the requested
mount point live.
- Reject unmounting the primary WROLPi drive (/media/wrolpi) with a
clear 400, normalized to catch path traversal.
- Require the normalized mount point to be strictly under /media/
before any direct umount, since the fallback runs as root.
- Show "System" instead of an Unmount button for /media/wrolpi in both
the React UI and the Controller's simplified UI.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 19:46:30 -06:00
Roland
cccbac9ae9
Fetching processes from PROCFS_PATH in docker container.
CodeQL / Analyze (push) Waiting to run
Controller Tests / controller-tests (push) Waiting to run
Jest Tests / jest-tests (push) Waiting to run
2026-05-30 15:59:14 -06:00
Roland
719905cb77
Moving WROLPi-managed mounts off /etc/fstab onto a drive-resident fstab.yaml.
...
A WROLPi drive can move between hosts and across deployment styles
(Portable, RPi, Debian). /etc/fstab is host-specific and on the Portable
image it's part of a read-only squashfs, so persisting secondary mounts
there was both wrong-host and lost-on-reboot. This change makes
/media/wrolpi/config/fstab.yaml the single source of truth for WROLPi-
managed mounts and introduces a new wrolpi-mounts.service that reconciles
live state to match.
Architecture:
- The Controller writes intent (fstab.yaml) but never calls mount(8) or
umount(8) itself. Every mutation triggers `systemctl restart
wrolpi-mounts.service`; the Controller then verifies the outcome via
the same MountExecutor abstraction the service uses.
- wrolpi-mounts.service runs a thin entry point that constructs a real
Reconciler with a SubprocessMountExecutor and calls apply(). The
reconciler mounts what's in fstab.yaml but missing from the live state,
and unmounts paths it previously claimed that are no longer in
fstab.yaml. A managed-set file in /run/wrolpi-mounts/managed prevents
the reconciler from ever touching user-mounted paths it didn't own.
- One-time migration (marker-gated) lifts both /etc/fstab WROLPi entries
and any controller.yaml drives.mounts entries into fstab.yaml.
/etc/fstab is backed up to /etc/fstab.wrolpi-migration.backup;
migrated lines are commented in place with a "migrated to fstab.yaml:"
prefix so a host admin can hand-recover.
Test approach: dependency injection in place of patching. The
MountExecutor protocol has SubprocessMountExecutor (production) and
FakeMountExecutor (in-memory, records calls). The Reconciler accepts an
executor in its constructor, so the 20 reconciler tests + 13 migration
tests + 18 fstab_yaml tests use real files in tmp_path with zero
mock.patch calls. test_disks_api.py drops to mocks only for the
host-touching read helpers; the mount/unmount paths now run the real
Reconciler against the fake executor.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 12:44:05 -06:00
Roland
2806673e25
Consolidating controller tests. Fixing controller test cleanup which slowed down tests significantly.
CodeQL / Analyze (push) Has been cancelled
Controller Tests / controller-tests (push) Has been cancelled
Jest Tests / jest-tests (push) Has been cancelled
2026-05-15 21:10:30 -06:00
lrnselfreliance
8f0e4cd93f
Adding support for mounting NTFS drives in the Controller. ( #440 )
2026-05-15 19:25:43 -06:00
Roland
cd8792f697
Warning users when files exist in mount location. Users may have accidentally downloaded files into the media directory, we want to warn them.
CodeQL / Analyze (push) Waiting to run
Controller Tests / controller-tests (push) Waiting to run
Jest Tests / jest-tests (push) Waiting to run
2026-05-14 17:02:52 -06:00
dependabot[bot]
76833bdc09
Bump the controller-dependencies group in /controller with 12 updates
...
Updates the requirements on [fastapi](https://github.com/fastapi/fastapi ), [uvicorn](https://github.com/Kludex/uvicorn ), [pydantic](https://github.com/pydantic/pydantic ), [jinja2](https://github.com/pallets/jinja ), [psutil](https://github.com/giampaolo/psutil ), [pysmart](https://github.com/truenas/py-SMART ), [pyyaml](https://github.com/yaml/pyyaml ), [docker](https://github.com/docker/docker-py ), [pytest](https://github.com/pytest-dev/pytest ), [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio ), [pytest-xdist](https://github.com/pytest-dev/pytest-xdist ) and [httpx](https://github.com/encode/httpx ) to permit the latest version.
Updates `fastapi` to 0.136.1
- [Release notes](https://github.com/fastapi/fastapi/releases )
- [Commits](https://github.com/fastapi/fastapi/compare/0.100.0...0.136.1 )
Updates `uvicorn` to 0.46.0
- [Release notes](https://github.com/Kludex/uvicorn/releases )
- [Changelog](https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md )
- [Commits](https://github.com/Kludex/uvicorn/compare/0.23.0...0.46.0 )
Updates `pydantic` to 2.13.3
- [Release notes](https://github.com/pydantic/pydantic/releases )
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md )
- [Commits](https://github.com/pydantic/pydantic/compare/v2.0...v2.13.3 )
Updates `jinja2` to 3.1.6
- [Release notes](https://github.com/pallets/jinja/releases )
- [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst )
- [Commits](https://github.com/pallets/jinja/compare/3.1.0...3.1.6 )
Updates `psutil` to 7.2.2
- [Changelog](https://github.com/giampaolo/psutil/blob/master/docs/changelog.rst )
- [Commits](https://github.com/giampaolo/psutil/compare/v5.9.0...v7.2.2 )
Updates `pysmart` to 1.4.2
- [Release notes](https://github.com/truenas/py-SMART/releases )
- [Changelog](https://github.com/truenas/py-SMART/blob/master/CHANGELOG.md )
- [Commits](https://github.com/truenas/py-SMART/compare/v1.3.0...v1.4.2 )
Updates `pyyaml` to 6.0.3
- [Release notes](https://github.com/yaml/pyyaml/releases )
- [Changelog](https://github.com/yaml/pyyaml/blob/6.0.3/CHANGES )
- [Commits](https://github.com/yaml/pyyaml/compare/6.0...6.0.3 )
Updates `docker` to 7.1.0
- [Release notes](https://github.com/docker/docker-py/releases )
- [Commits](https://github.com/docker/docker-py/compare/6.0.0...7.1.0 )
Updates `pytest` to 9.0.3
- [Release notes](https://github.com/pytest-dev/pytest/releases )
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst )
- [Commits](https://github.com/pytest-dev/pytest/compare/7.0.0...9.0.3 )
Updates `pytest-asyncio` to 1.3.0
- [Release notes](https://github.com/pytest-dev/pytest-asyncio/releases )
- [Commits](https://github.com/pytest-dev/pytest-asyncio/compare/v0.21.0...v1.3.0 )
Updates `pytest-xdist` to 3.8.0
- [Release notes](https://github.com/pytest-dev/pytest-xdist/releases )
- [Changelog](https://github.com/pytest-dev/pytest-xdist/blob/master/CHANGELOG.rst )
- [Commits](https://github.com/pytest-dev/pytest-xdist/compare/v3.0.0...v3.8.0 )
Updates `httpx` to 0.28.1
- [Release notes](https://github.com/encode/httpx/releases )
- [Changelog](https://github.com/encode/httpx/blob/master/CHANGELOG.md )
- [Commits](https://github.com/encode/httpx/compare/0.24.0...0.28.1 )
---
updated-dependencies:
- dependency-name: fastapi
dependency-version: 0.136.1
dependency-type: direct:production
dependency-group: controller-dependencies
- dependency-name: uvicorn
dependency-version: 0.46.0
dependency-type: direct:production
dependency-group: controller-dependencies
- dependency-name: pydantic
dependency-version: 2.13.3
dependency-type: direct:production
dependency-group: controller-dependencies
- dependency-name: jinja2
dependency-version: 3.1.6
dependency-type: direct:production
dependency-group: controller-dependencies
- dependency-name: psutil
dependency-version: 7.2.2
dependency-type: direct:production
dependency-group: controller-dependencies
- dependency-name: pysmart
dependency-version: 1.4.2
dependency-type: direct:production
dependency-group: controller-dependencies
- dependency-name: pyyaml
dependency-version: 6.0.3
dependency-type: direct:production
dependency-group: controller-dependencies
- dependency-name: docker
dependency-version: 7.1.0
dependency-type: direct:production
dependency-group: controller-dependencies
- dependency-name: pytest
dependency-version: 9.0.3
dependency-type: direct:production
dependency-group: controller-dependencies
- dependency-name: pytest-asyncio
dependency-version: 1.3.0
dependency-type: direct:production
dependency-group: controller-dependencies
- dependency-name: pytest-xdist
dependency-version: 3.8.0
dependency-type: direct:production
dependency-group: controller-dependencies
- dependency-name: httpx
dependency-version: 0.28.1
dependency-type: direct:production
dependency-group: controller-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-03 11:56:30 -06:00
dependabot[bot]
4830143c3a
Bump aiohttp in /controller in the controller-dependencies group
...
---
updated-dependencies:
- dependency-name: aiohttp
dependency-version: 3.13.5
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: controller-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-04-15 16:48:19 -06:00
Roland
673d851501
Displaying upgrade logs when user clicks 'View output' during upgrade on Controller.
2026-04-13 16:47:02 -06:00
Roland
c726654de9
Map search added to global search. Preview cards are displayed for all results in new Map tab.
...
CodeQL / Analyze (push) Waiting to run
Controller Tests / controller-tests (push) Waiting to run
Jest Tests / jest-tests (push) Waiting to run
Map viewer has simple search.
Map search databases can be downloaded from CDN, or built locally. Map searches can be built offline, but will not have enriched things like state names downloaded from Wikidata.
2026-04-13 12:17:08 -06:00
Roland
74c04fe5f6
Rounding drive stats for similar df performance.
2026-04-09 15:32:49 -06:00
Roland
dc23278afb
Display upgrade banner on Controller dashboard while upgrade is running.
2026-04-09 15:22:27 -06:00
Roland
a720818625
Removing Controller link in favor of the button in services.
2026-04-09 15:03:28 -06:00
dependabot[bot]
042fdb1f12
Bump aiohttp from 3.13.3 to 3.13.4 in /controller
...
---
updated-dependencies:
- dependency-name: aiohttp
dependency-version: 3.13.4
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-04-09 15:01:37 -06:00
Roland
e0324ce0fc
Migrating Controller from port 8087 to 80 so that it is more discoverable. Reformatting Controller dashboard to make header at the top. Reformatting navigation bar to handle the new links which prevented Admin from being visible in some screens.
2026-04-09 15:01:05 -06:00
Roland
c5a00b0de5
Allowing user to mount disks, not just partitions.
2026-04-05 09:43:34 -06:00
Roland
b8a532c8d9
Key changes:
...
- Add MapLibre GL JS viewer with light/dark themes, terrain layer,
and embedded static map page for coordinate sharing
- Add map pin support with persistent map_pins.yaml config
- Add map region subscriptions and downloader with progress tracking,
sourcing pre-extracted PMTiles from a cold CDN
- Add map export to PNG and GPS coordinate copy via context menu
- Add MapViewer React component alongside reworked Map page
- Add map catalog and region-building script (build_map_regions.py)
- Remove OSM import/render scripts, leaflet files, Apache configs,
renderd service, and osm-map-dumper Docker container
- Update Caddyfile to serve PMTiles and map static assets
- Update build/install/repair scripts for Protomaps dependencies
- Drop map_file table, add/drop map_subscription table (alembic)
- Adding button to skip primary drive mounting during onboarding.
2026-04-04 13:48:19 -06:00
Roland
1e2e59ec2e
Adding docker support for samba shares.
CodeQL / Analyze (push) Waiting to run
Controller Tests / controller-tests (push) Waiting to run
Jest Tests / jest-tests (push) Waiting to run
2026-03-29 11:14:38 -06:00
Roland
ce0cdd3a2e
Samba is installed and can be configured in the Controller.
2026-03-29 10:19:28 -06:00
Roland
de25242d61
Waiting for wifi device to become ready before creating hotspot.
2026-03-28 10:48:34 -06:00
Roland
53f4e29b64
Updating controller hotspot and bluetooth toggle commands with real paths for RPi.
2026-03-28 10:35:07 -06:00
Roland
83b4a62f8f
Checking that services go down during upgrade before redirecting back to main UI.
2026-03-28 10:16:55 -06:00
Roland
1c55745884
Adding bluetooth radio toggle to Controller. Writing controller.yaml to media drive on startup, if it doesn't exist.
2026-03-28 10:09:58 -06:00
Roland
83ad253d6f
Moving script banner to the top so users will see it.
2026-03-22 12:53:10 -06:00
Roland
07f601e77f
Add controller onboarding flow for primary drive setup
...
Introduce an onboarding system in the Controller that guides users
through selecting and mounting their primary media drive. This is
the fallback UI flow used when the main React app is unavailable.
Key changes:
- Add onboarding API endpoints and schemas (controller/api/onboarding.py)
- Add onboarding logic to detect drives, handle already-mounted drives
(needed for RPi which auto-mounts), and save primary drive selection
to the controller config when no mounts are configured
- Extend the Controller's index.html template with the onboarding UI
- Skip root cert creation until onboarding is complete
- Update first_startup.sh to support the onboarding/repair flow
- Add comprehensive tests for onboarding logic and API
2026-03-14 16:08:40 -06:00
Roland
9b3a03012e
Controller logs when it takes actions.
2026-03-14 10:03:11 -06:00
Roland
ccc6cf78d3
Setting system timezone using Controller.
CodeQL / Analyze (push) Waiting to run
Controller Tests / controller-tests (push) Waiting to run
Jest Tests / jest-tests (push) Waiting to run
2026-03-13 15:56:21 -06:00
Roland
da6e62ee45
Backup configs can be restored in the UI. User can choose between Merge or Overwrite, the UI displays a comparison. Configs are compared when user opens the restore modal, configs which won't cause changes are marked.
2026-03-10 20:30:46 -06:00
Roland
ef32e8b42d
Checking readiness of main app in Controller instead of javascript requests, which break with CORS.
CodeQL / Analyze (push) Waiting to run
Controller Tests / controller-tests (push) Waiting to run
Jest Tests / jest-tests (push) Waiting to run
2026-03-08 16:05:56 -06:00
Roland
c89b16f623
Handling controller redirects in docker/non-docker and http/https situations.
CodeQL / Analyze (push) Waiting to run
Controller Tests / controller-tests (push) Waiting to run
Jest Tests / jest-tests (push) Waiting to run
2026-03-07 19:40:35 -07:00
Roland
8261df5bef
Redirecting to Controller when main react app is down.
2026-03-07 19:17:38 -07:00
Roland
fbb71e012d
Replace nginx with Caddy for TLS termination and reverse proxying.
...
- Replace nginx with Caddy as the web server for both Docker and native
(RPi/Debian) deployments. Caddy handles HTTPS termination, reverse
proxying to all services (API, React app, Controller, Kiwix, Help, Map),
and serves the media/download file browsers.
- Generate a Root CA and signed leaf certificates for HTTPS. The Root CA
uses Name Constraints to restrict signing to local addresses only
(.local, localhost, and RFC 1918 private IP ranges), mitigating MITM
risk if the CA key is compromised.
- Add an HTTP landing page that guides users through one-time CA
certificate installation on iOS, Android, macOS, Windows, Linux, and
Firefox, with auto-redirect when the cert is already trusted.
- Add trailing-slash redirects for /controller, /docs, /media, and
/download so bare paths don't fall through to the React catch-all.
- Add a Root CA download link on the Settings page under Configs.
- Update help.sh diagnostics for IPv6 listener detection and HTTP/2
status codes.
- Remove all nginx config files and the https_proxy Docker container.
- Bump wrolpi-help submodule with certificate documentation.
2026-03-07 18:48:44 -07:00
Roland
e8bc2b32c4
Displaying any wrolpi-* service in the Controller, now that we have these scripts.
2026-03-05 18:11:25 -07:00
Roland
71c2b6cd6a
Creating script that fixes media directory file and directory permissions, adding it to the Controller UI.
2026-03-05 17:58:21 -07:00
Roland
95c8be298a
Enabling fallback on first controller repair run so that main ui launches after repair completion.
CodeQL / Analyze (push) Has been cancelled
Controller Tests / controller-tests (push) Has been cancelled
Jest Tests / jest-tests (push) Has been cancelled
2026-03-01 12:42:20 -07:00
Roland
393cf46231
Redirecting to fallback when Controller runs the repair script.
2026-02-28 15:01:55 -07:00
Roland
603a2c010a
Enhancing Controller to run scripts, starting with the repair and upgrade scripts for onboarding use.
CodeQL / Analyze (push) Waiting to run
Controller Tests / controller-tests (push) Waiting to run
Jest Tests / jest-tests (push) Waiting to run
2026-02-25 17:08:32 -07:00
Roland
c6c0960613
No longer restricting the Controller from unmounting the wrolpi drive.
2026-02-14 17:30:07 -07:00
Roland
3a1d366c5c
Setting uid/gid when mounting exfat and vfat filesystems.
2026-02-08 09:50:18 -07:00
Roland
217474b5c4
Warning is not necessary.
2026-02-05 11:12:12 -07:00
Roland
072fedc656
Controller tracks disk bandwidth stats.
2026-01-23 15:29:18 -07:00
dependabot[bot]
ce9f12da42
Bump aiohttp from 3.12.14 to 3.13.3
...
---
updated-dependencies:
- dependency-name: aiohttp
dependency-version: 3.13.3
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-01-06 06:22:34 -07:00
Roland
d4f1cfb859
Adding server uptime to status pages.
2025-12-26 10:05:13 -07:00
Roland
0d155c9311
Allowing controller to restart itself.
2025-12-25 09:29:01 -07:00
Roland
b9eb4e5104
Expanding modal width on controller dashboard. Including hostname in controller dashboard title.
2025-12-24 16:43:37 -07:00
Roland
5fb49ad001
Putting iostat on dashboards.
CodeQL / Analyze (push) Waiting to run
Controller Tests / controller-tests (push) Waiting to run
Jest Tests / jest-tests (push) Waiting to run
2025-12-24 15:51:41 -07:00
Roland
78251b067e
Removing WROLPi admin functionality that is now in Controller.
CodeQL / Analyze (push) Has been cancelled
Controller Tests / controller-tests (push) Has been cancelled
Jest Tests / jest-tests (push) Has been cancelled
2025-12-19 18:41:27 -07:00
Roland
a02c47cfa1
Adding wrolpi-app-dev which runs frontend in dev mode.
CodeQL / Analyze (push) Waiting to run
Controller Tests / controller-tests (push) Waiting to run
Jest Tests / jest-tests (push) Waiting to run
2025-12-18 18:01:45 -07:00