- Capture stack trace in L.raise() if passed type is not an Error instance
- Use L.ui.addNotification in L.error() to render the error message
- Prevent duplicate error reporting in the ui
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Add two new functions L.rpc.addInterceptor() and L.rpc.removeInterceptor()
which allow to register and remove interceptor functions which are invoked
before the rpc reply result promise is fulfilled.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Rewrite the wireless network management views in client side JS using ubus
rpc calls for the router communication.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Remove the old server side support for file browsing and file uploading
and switch to a client side widget instead which uses XMLHTTPRequests to
upload files via cgi-io and RPC calls for file listing and status queries.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The new function allows translating an ubus return code into a human
readable error message.
Also report the called object and method on ubus rpc errors.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
- Use new getWirelessDevices rpc method to optimize data fetching
- Implement further getters to access iwinfo information
- Implement assoc- and scan list functions
- Simplify internal data model
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The getWirelessDevices() method merges the results of the
network.wireless/status call with corresponding per-radio and
per-network iwinfo data.
This allows to simplify the client side network state model
implementation and saves extraneous rpc roundtrips to fetch
iwinfo data after discovering the wireless devices.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
- Autoselect the matching IPv4 address when initially picking a MAC
- Add hostname hints in the MAC/IP dropdowns
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
- Redraw map even when it could not be saved due to validation errors
- Use createHandlerFn() for attaching event handlers
- Convert buttons to <button> element to allow use of spinning class
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Instead of granting complete ubus access under the active sysauth session,
implement the ubus-rpc authorization mechanism and make the ubus proxy
endpoint unauthenticated.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The createHandlerFn() helper function is useful to construct onclick
or similar event handling functions. It will add a "spinning" CSS
class on the event target element and disable the element, wrap the
given function with Promise.resolv() and re-enable the target element
once the promise is settled.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
- Rework internal state management
- Implement new utility functions such as getL3Device() or getModemType()
- Fix bugs in various functions
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
When checking for an existing zone with the same name internally,
addZone() must use the nonblocking lookupZone() instead of the
promise returning public getZone() call.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The new function allows querying the presence of certain system features
such as dnsmasq or firewall availability or the compile time features
of hostapd and wpa_supplicant.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The given callback function will be executed after the map is parsed,
but before the uci is saved. This is useful to add further uci changes
before the map is re-rendered.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Some title properties were expected to be functions, some strings.
Refactor the code to support both string or function values for all
title properties.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
When the parent section of an option object specifes an alternative
uci configuration name, enclosed option elements should honour it.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Expose the prefixToMask() and maskToPrefix() helper functions for use by
other modules, e.g. the datatype validator.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Extend the ifnameOf() helper function to cover all object types used by
network.js and expose it as public getIfnameOf() api function for use by
other modules.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
There is always more vpn services. To make the LuCI menu look cleaner, a
new top level menu "VPN" will be added with this commit. All luci-app-*
that have something to do with VPN should move to this new menu entry.
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
Add a new `addModalOptions()` hook which allows to supply additional
cbi options the modal map before the dialog is rendered.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
802.11w has to be enabled in station mode to be effective. If the AP is using WPA3-SAE or requires 11w, station will not connect unless 11w is enabled via this option.
Signed-off-by: Antoine Deschênes <adeschenes@kronostechnologies.com>
Restore the old CBI behaviour of not automatically rendering empty
selection choices in ListValue select dropdowns when .rmempty is
specified.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
In the dc0211803e commit, the parameter "multi" in ui.js is
replaced with "multiple" everywhere. Thus, it must also be changed
in the cbi templates.
Fixes: dc0211803e
Signed-off-by: Anton Kikin <a.kikin@tano-systems.com>
- Set src/dest defaults only in initial section create state, otherwise it
is impossible to specify output rules
- Get rid of dest_remote/dest_local widget switching and implement change
logic directly in tools.widgets.CBIZoneSelect
- Remove leftover debug code
Ref: https://github.com/openwrt/luci/issues/2889
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Attempt to properly report the scan status by treating 404 replies as
not yet completed scans and empty array replies as successful scans
that did not yield any results.
Fixes: #2874
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The "luci.form" and "luci.tools.widgets" classes use the "multiple"
keyword while ui.js uses "multi" internally, leading to single-value
dropdowns widget values getting stored as uci lists.
Fix the issue by using "multiple" everywhere.
Fixes: #2871
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Insteado f displaying only the primary/delegated address, display all
configured IP addresses in the upstream interface boxes, similar to
the interface overview page.
Fixes: #2757
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The getWifiNetidBySid() helper returns an array containing the network id
and the corresponding radio name, not just the id.
Fixes: #2846.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This is required to properly reload the configurations after applying uci
changes that solely consist of uci section ordering operations.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Add a tools.widgets library which bundles a number of useful, higher
level CBI widgets like firewall zone list or network interface dropdowns
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Rework validation error translations for compount operators such
as list() or neg() to not rely that much on specific native language
grammar.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Add support for extended section syntax notation in @type[#] format and
refactor the package loading function to not load configurations twice
when a package load operation is already pending and another load request
is made for the same package.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Add the ability to pass additional CSS classes to modal dialogs and
make use of this facility in form.js to annotate CBI map modals.
This can be used later by themes to apply additional CSS rules.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Calling abort() on a finished xhr object will clear properties such
as status which can confuse code relying on legacy LuCI request
helper functions.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Placeholders may be HTML elements instead of plain strings, so do
not use innerHTML to assign them but rely on L.dom.content() instead.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Implement new ubus rpcd backend calls for later use in the frontend:
- netdevs: dump information about Linux network devices present
- boardjson: dump /etc/board.json if present
- offload_support: query whether netfilter offloading is supported
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Properly handle ubus POST requests exceeding the default chunk size
and fix a possible nil dereference when rejecting incoming requests
due to bad JSON message framing.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Introduce a new tools.prng JS library which implements the musl libc
srand() and rand() calls to produce identical pseudo random number
sequences in the browser which is needed for the string to color
conversion later on.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Refactor L.require() to use L.raise() instead of L.error() to signal
class loading failures. This allows callers to handle class loading
errors in a graceful manner.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Factor out an L.raise() function out of L.error() which constructs and
throws an exception object.
Rework the remaining L.error() function to internally use L.raise() to
construct exceptionts to render.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
- Do not artificially cutoff dropdown items, use all available space
- Close open dropdown when clicking into the preview area
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Now that LuCI.Request is transparently coalescing requests, there
is no need for the rather cumbersome batch()/flush() api in rpc.js.
Also refactor the code to get rid of the rpcRequestRegistry indirection
and remove superfluous promises which simplifies the code a lot.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Extend LuCI.Request to automatically coalesce subsequent requests
to ubus resources into single batch requests.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Implement setters and getters for the base URL prefix used and also
implement a session ID getter while we're at it.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Introduce a new LuCI.Poll class which is able to repeat any
promise based function and not strictly tied to HTTP request
semantics.
Also rework LuCI.Request.Poll and XHR.Poll as well as
LuCI.start(), LuCI.stop(), LuCI.halt() etc. to redirect to
the new api.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
- Fix discovering base url if cache buster is appended to luci.js href
- Fix extracting require tokens in minified sources
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Add a new client side form.js library which is a more or less direct
reimplementation of the Lua side cbi.lua in JavaScript.
Due to its client side nature, it supports a number of features which
would be hard to realize on the server side, such as drag&drop sorting,
modal sub-map dialogs, reload-free editing etc.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Do not render standard widgets like checkboxes, select boxes,
text input fields etc. on the server side anymore but utilize
the ui.js primitives instead.
This avoids logic duplication between server side cbi templates
and JS widgets in the future.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Implement further widget primitives like text inputs or checkboxes and
support custom validation callback functions when instantiating CBI
validators.
Also add support initializing ui.js widgets from the "data-ui-widget"
HTML attribute.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Introduce a new view() target for CBI dispatch nodes, as long with the
required template and plumbing work in luci.js to allow requiring view
classes.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
If the ui class is loaded, use its modalDialog facility to display runtime
errors, alternatively render them into the maincontent area.
Also prevent duplication of stack trace information and throw a low level
error on session expiration to allow higher layers to properly handle it.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Add a new rpc.js class which provides low level facilities to exchanges
messages with the ubus rpc endpoint.
Also introduce a new uci.js class which provides client side uci
manipulation routines.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Add an admin/ubus route mimicking the native uhttpd-mod-ubus protocol.
The main difference to the native protocol is that this gateway requires
no additional per-object/procedure ACL setup on the router side and that
it is located under the same prefix as LuCI itself, allowing the reuse
of the session login cookie.
This route is meant to be a transitional mechanism until client side
RPC calls are eventually migrated to uhttpd-mod-ubus completely.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
In order to prepare the move of the dynlist and dropdown widgets into
the LuCI ui class, remove the direct calls to cbi_d_update() and replace
them with custom events instead.
Extend cbi_init() to handle these custom events and to invoke
cbi_d_update() when receiving them.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Add a new function L.error() which creates and throws a custom
error object with stack information and given type.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Use the new class loader infrastructure to move gui specific
functionality out of the luci.js core and dispatch a new event
'luci-loaded' which is fired once all external classes have
been fetched.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Add a fetch() inspired HTTP request utility class to luci.js and
replace the old xhr.js class with a stub using the new request api.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The former name "Flashmemory write access" is wrong. The triggers also
indicate read/erase access to the flash memories.
Signed-off-by: Martin Schiller <ms@dev.tdt.de>
* fix escaping of magic lua chars (#2800)
* fix redundant second gsub line in shellstartsqescape function
* fix return value of shellstartsqescape function
Signed-off-by: Dirk Brenken <dev@brenken.org>
Modify the process status filter to allow also the processes
with a nice value to be visible on the Status/Processes page.
Filter out the top process itself.
Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
commit 8a34a54b6aa6 ("base-files: use OPENWRT prefix for os-release
variables") changes the prefix of the os-release variables from LEDE_
to OPENWRT_. Use the new name.
Signed-off-by: Bjørn Mork <bjorn@mork.no>
When a value identical to the stored one is submitted, the CBI framework
will not emit an option write event and therfore not store the value in
the form data dictionary passed to SimpleForm.handle().
This usage pattern usally works be accident for file editor views such
as admin_system/crontab because \r\n windows style line endings are
substituted with unix \n ones before writing the data, defeating the
equality check in CBI.
When a single line without trailing newline is submitted however, the
CBI will not see a difference to the data stored in the file and clear
out the value on subsequent saves.
This commit alignes the logic used by various SimpleForm views to
behave identically and predictable:
- File data is handled in the SimpleForm.handle() callback
- The forcewrite property is used to disable equality checks
- Submission of an empty string empties the backing file
Fixes: #2737
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Currently only the dnsmasq lease file is read for hostname hint. If someone use only odhcpd as dhcp daemon the hostname resolution on wifi_assoc list is broken.
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
Move duid_to_mac function from status.lua to sys.lua.
Implement translation from DUID-LL without header to MAC
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
The following changes are included:
* properly handle "Präfix" as neuter
* add missing hyphens to many appearances of "Präfix"
* fix spelling
* add few missing translations
Signed-off-by: Lars Kruse <devel@sumpfralle.de>
Currently the lookup loop is very inefficient. This improve the lookup loop by moving the entities to a separate array and adds them only one time. Every entities is checked 3 times, after that it will be moved to dns cache as a raw addres (not resolved). This also introduce the Type column to identify common packet using the source port.
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
Since openwrt-18.06 the auto option is set/unset if we press
connect/disconnect on the interface page. So I think we should move this
to the general tab so that we see at once if this is started on boot or
not.
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
Currently on the system status page the the memory usage is shown in kB
only. If you have a system with 1 GB of Ram its hard to read the large
numbers. This automatically formats the byte numbers more human readable
into KB / MB / GB.
Submitted-by: Claudio Marelli <camarelli@gmx.net>
[squash commits, rewrap commit message]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Switch the LuaSrcDiet download to direct cached SCM clones and
fix the tarball name while we're at it.
Supersedes: #2522
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
In some situation it is usefull to inform the use that this section
could not get delete, because this config is referenced or is in use.
Example pseudo code:
function s.remove(self, sid)
<check if secation could get deleted>
if output == nil then
self.error_msg = translatef("Unable to remove this section")
return nil
end
end
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
Especially for systems without RTC this change has two advantages
* manual time sync with time server during configuration
* test possibility of the time sync over the configured servers
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
This checks if the installed hostapd supports SAE and allows to select
WPA3 Personal SAE in that case.
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>