Commit Graph

2058 Commits

Author SHA1 Message Date
Eric Callahan 6f4a0480f3
machine: add video peripheral API request
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
2024-02-01 10:27:22 -05:00
Eric Callahan 522b4df989
sysfs_devs: add v4l2 video campture device detection
Signed-off-by:  Eric Callahan  <arksine.code@gmail.com>
2024-02-01 10:27:21 -05:00
Eric Callahan eb1599fa07
machine: add support for peripheral queries
Implement endpoints to query the following:
- Serial Devices (including Hardware UART)
- USB Devices using lsusb
- Klipper CAN Node UUIDs

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-02-01 10:27:21 -05:00
Eric Callahan 0fb997285b
sysfs_devs: hardware discovery utils using sysfs
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-02-01 10:27:21 -05:00
Eric Callahan d6c8d6d3a6
server: add method to get individual app args
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-02-01 10:27:20 -05:00
Eric Callahan 088a7e4e70
server: create a misc folder in the datapath
This folder contains miscellaneous files used by Moonraker
or other applications in the Klipper ecosystem.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-02-01 10:27:20 -05:00
Eric Callahan 2cebf5cc03
cansocket: utility for querying klipper can nodes
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-02-01 10:27:19 -05:00
Eric Callahan 61ea86033a
docs: update changelog and configuration docs
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-28 06:12:13 -05:00
Eric Callahan 896cd8c41e
klippy_connection: exclude configfile attrs from subscription cache
The configfile "config" and "settings" attributes never change, and
therefore do not need to be stored in the subscription cache.  They
can be significantly large, so this change can free up some memory
on low resource systems.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-28 05:55:50 -05:00
Eric Callahan 4b9973826e
file_manager: add "enable_config_write_access" option
Some installations, such as those in public areas, may wish disallow
changes to the configuration.

This option defaults to True, so no change in behavior is introduced.

Signed-off-by:  Eric  Callahan <arksine.code@gmail.com>
2024-01-28 05:55:29 -05:00
Eric Callahan bc18e3174a
server: load "authorization" as a core component
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-28 05:42:22 -05:00
Eric Callahan c756a9029a
authorization: don't raise config errors
Don't raise an exception if the default source is incorrect as this
disables authorization.  Fallback to moonraker.  When supplied an
invalid CORS domain warn the user and skip adding it to the list.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-27 19:51:34 -05:00
Eric Callahan 43efe40cd8
authorization: report more details in /access/info
Add "login_required" and "trusted" fields.  The "login_required"
field indicates that force_logins is enabled and at least one
user has been created.  The "trusted" field indicates that the
connection is configured as trusted.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-27 19:42:59 -05:00
Eric Callahan 3f7cae09bb
git_deploy: specify branch in clone command
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-27 17:31:27 -05:00
Eric Callahan 52ebc2b404
application: fix cors check
It is necessary to perform a cors check before authenticating
the user to make sure that the headers are set if authentication
fails.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-27 17:04:39 -05:00
Eric Callahan f44fc4b85b
docs: update changelog and add note about trusted domains
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-22 12:42:25 -05:00
Eric Callahan d1f97f2658
authorization: fix blocking call to socket.getfqdn()
If the upstream DNS server is not available the call to socket.getfqdn()
will block until a timeout occurs.  This blocks Moonraker's event loop,
resulting in carnage.

Call getfqdn() in a thread with a timeout of 5 seconds.  In addition,
only request the fqdn if the user has one or more trusted domains
configured.  Finally, cache resolved  FQDNs for 24 hours to limit
repeated DNS queries.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-22 12:03:01 -05:00
Eric Callahan 3d44c51613
docs: minor spelling fixes
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-21 13:50:30 -05:00
Eric Callahan d10ce8772d
docs: add zip type documentation
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-21 08:24:06 -05:00
Eric Callahan 652bb46f60
spoolman: improve connection error reporting
Reduce verbosity in release mode and add connection status to the log rollover.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-21 08:24:05 -05:00
Eric Callahan 994123e92e
update_manager: use ZipDeploy to instantate web types
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-21 08:24:05 -05:00
Eric Callahan 8010c51521
app_deploy: add support for web types
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-21 08:24:05 -05:00
Eric Callahan 55454a300e
zip_deploy: bring up for usage
This performs a significant refactor to the ZipDeploy class, making it near identiical to WebClientDeploy.  Zipped applications have the same
"release_info" requirement as web clients.  Unlike web clients, they may also
configure the dependency and service options available to git repos.

The ZipDeploy class can also support we clients, eliminating duplicate code
and the need to keep web_deploy.py.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-21 08:24:04 -05:00
Eric Callahan daad786072
git_deploy: move generic dependency methods to app_deploy
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-21 08:24:04 -05:00
Eric Callahan b620ebbc29
docs: document status endpoint and notification
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-21 08:24:03 -05:00
Eric Callahan d410731faa
spoolman: add a status notification
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-21 08:24:03 -05:00
Eric Callahan a5128f06ad
spoolman: add a status endpoint
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-21 08:24:02 -05:00
Eric Callahan bf9223225c
eventloop: fix timer reentrancy
Avoid running multiple callbacks if a timer is stopped and restarted
in quick succession.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-21 08:24:02 -05:00
Eric Callahan d4316d9878
spoolman: refactor tracking
Use a python dict to act as a queue for reporting used filament
per spool.  This eliminates the need for locks and resolves
potential issues with spool changes when the Spoolman
service is not available.

In addition, add support for tracking multiple tools

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-21 08:24:02 -05:00
Eric Callahan 045075c396
docs: update spoolman proxy documentation
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
2024-01-21 08:24:01 -05:00
Eric Callahan 3102391234
spoolman: implement alternate proxy responses
The exisiting implementation of spoolman's proxy endpoint
returns responses and errors exactly as they are received
by spoolman.  This creates a problem of ambiguity, as the
frontend cannot easily diffentiate between an error returned
by Moonraker and an error returned by Spoolman.

This implements a "v2" alternate response to proxy requests.
All requests to spoolman will return success, with responses
wrapped in a top level object.  Successful requests will be
returned in a "spoolman_response" object, errors in a
"spoolman_error" object.

Initially v2 responses will be opt-in to prevent breaking existing
spoolman implementations.  However, as of this commit the v1
response is deprecated and will be removed in a future version
of Moonraker.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-21 08:24:01 -05:00
Eric Callahan e9ad278286
spoolman: use loop time rather than datetime
The loop time is monotonic and can't be affected by
changes to the system clock.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-21 08:24:00 -05:00
Eric Callahan b836d618c9
spoolman: add a websocket connect
Connect to the spoolman sevice via websocket to receive
spool events.  In addition, this gives Moonraker a persistent
connection to know when the service is available.

Signed-off-by:  Eric Callahan  <arksine.code@gmail.com>
2024-01-21 08:24:00 -05:00
Eric Callahan a23187b4af
authorization: fix access.refresh regression
Allow expired JWTs for HTTP endpoints that do not require authentication.
This is technically an error by the client, as it should not provide
invalid JWTs for an endpoint, however Moonraker previously allowed
this as the token was not verified on unathenticated endpoints.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-20 06:21:36 -05:00
Eric Callahan 66de18f9b6
spoolman: really fix type checking this time
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-16 13:57:20 -05:00
Eric Callahan 8d6def7e41
spoolman: type checking fix
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-16 13:53:21 -05:00
Eric Callahan c196f7548c
update_manager: workaround zipfile permission issues
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-16 12:35:38 -05:00
Eric Callahan 15fed2e819
spoolman: check for deleted spools
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-16 11:57:53 -05:00
Eric Callahan 374516a00a
spoolman: remove class variables
Variables should be contained within the spoolman instance, as in the
future it could be desirable to support multiple instances.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-16 07:58:22 -05:00
Eric Callahan c4f1d251c3
klippy_connection: add support for service info fallback
If Klipper is using systemd socket activation to generate its
unix socket the PID reported by PEERCRED will be 1, that of
systemd itself.  Klipper now reports its process id in the
"info" endpoint, use that as a fallback to retreive service info.

Signed-off-by: Eric Callahan <arksine.code@gmail.com>
2024-01-15 12:20:05 -05:00
Eric Callahan 619a588683
application: add error handling to listen()
It is possible that Moonraker cannot bind to an address if its
already in use.  Handle bind errors and warn/log when they are
encountered.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-15 08:17:35 -05:00
Eric Callahan 7beca7a1a3
application: refactor HTTP routing
Moonraker dynamically registers its routes, so we cannot easily
use the routers provided by tornado.Application.  Previously
all routes went through tornado.Application, then went to
our mutable router.  This refactor avoids that by having our
mutable router contain the tornadoapp instance, only using
it to provide the application delegate.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-15 08:17:34 -05:00
Eric Callahan 35785be5dc
application: remove direct websockets import
Provide a method for websocket handler registration.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-15 06:03:43 -05:00
Eric Callahan 69f527b7c7
secrets: remove dependency on file_manager
It is desirable to use templates (and therefore secrets) in
the server's configuration options.  We need to defer loading
the "file_manager", remove its dependency from secrets.  When
the file_manager is loaded it will look up "secrets" and register
the file path as reserved.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-15 06:03:43 -05:00
Eric Callahan 60f4a82873
confighelper: avoid direct import of JinjaTemplate
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-15 06:03:35 -05:00
Eric Callahan ddd735feba
refactor: convert klippy_connection into a component
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-13 15:15:15 -05:00
Eric Callahan a88468eb79
refactor: convert websockets into a component
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-13 15:15:15 -05:00
Eric Callahan d506c9241f
refactor: convert application into a component
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-13 15:15:14 -05:00
Eric Callahan 94b1896e28
server: add support for python dependency recovery
It is possible that older versions of Moonraker's update_manager
will fail in its attempt to update python packages.  This can lead
to missing modules when the new version of Moonraker is loaded.

When a `ModuleNotFound` error is received during a call to
"load_component" Moonraker will attempt to install its
missing dependencies.

Signed-off-by: Eric Callahan <arksine.code@gmail.com>
2024-01-13 15:15:14 -05:00
Eric Callahan 01ad427d75
build: bump dependency versions
Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
2024-01-13 15:15:13 -05:00