When possible record the name of the user that requested the
job. The klippy_api's component now takes an optional user
argument in its "start_print" method. This user is broadcast
in an event after a print request successfully returns.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
The default behavior of systemd is to remove shared memory
files when the user that created them logs out. This breaks
instance ID tracking for most installations. While its possible
to overcome this by changing the user type or the logind
configuration, these solutions required elevated privileges.
The simple solution is to store iids in a temporary file, with
access protected by a flock.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Added the response headers to the V2 response of the proxy implementation as a new field named "response_headers".
Signed-off-by: Patrick Schmidt <ps.patti1998@gmail.com>
Move the kernel version tuple calculation out of gpio.py into
the utils package so its available for any module that requires
it. In addition, report the kernel version string with the distribution
info and log the platform in the rollover header.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Implement instance package wide for the update_manager. This
only requires detecting multiple instances once and eliminates
costly calls to git.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
The sensor configuration isn't useful unless the user configures a
template that calls "set_result" to update fields for the desired
template. Remove the default payload template and require
that it be configured.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
New repos have not yet saved the valid state, so it is necessary to
provide a default value when attempting to access the "is_valid"
field.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Save repo state if an exception is raised during a refresh
attempt. Add additional repo warnings with for better
descriptions regarding repo issues.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
This enables customizing the time of day within which periodic refresh occurs.
Previously docs said it happens between 12am-4am which is misleading,
because the code effectively allowed refresh until 4:59:59 AM.
The default window is now '0-5', which is practically the same as before.
The comment about checking every 24h hours has been fixed as well.
This hasn't been true since commit c4fa76f21792943ea512d24326259f01d2fa7e89
Signed-off-by: Kamil Domański <kamil@domanski.co>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>