summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-app-openwisp
diff options
context:
space:
mode:
Diffstat (limited to 'applications/luci-app-openwisp')
-rw-r--r--applications/luci-app-openwisp/Makefile15
-rw-r--r--applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js113
-rw-r--r--applications/luci-app-openwisp/po/es/openwisp.po275
-rw-r--r--applications/luci-app-openwisp/po/lt/openwisp.po237
-rw-r--r--applications/luci-app-openwisp/po/templates/openwisp.pot224
-rw-r--r--applications/luci-app-openwisp/root/usr/share/luci/menu.d/luci-app-openwisp.json13
-rw-r--r--applications/luci-app-openwisp/root/usr/share/rpcd/acl.d/luci-app-openwisp.json11
7 files changed, 888 insertions, 0 deletions
diff --git a/applications/luci-app-openwisp/Makefile b/applications/luci-app-openwisp/Makefile
new file mode 100644
index 0000000000..b8b147998d
--- /dev/null
+++ b/applications/luci-app-openwisp/Makefile
@@ -0,0 +1,15 @@
+# Copyright 2021 Nicholas Smith (nicholas@nbembedded.com)
+# This is free software, licensed under the GNU General Public License v2.
+
+include $(TOPDIR)/rules.mk
+
+PKG_LICENSE:=GPL-2.0-or-later
+PKG_MAINTAINER:=Nicholas Smith <nicholas@nbembedded.com>
+
+LUCI_TITLE:=LuCI support for OpenWISP
+LUCI_DESCRIPTION:=Allows configuration of OpenWISP agent settings
+LUCI_DEPENDS:=+luci-base +openwisp-config
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js b/applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js
new file mode 100644
index 0000000000..60766d321c
--- /dev/null
+++ b/applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js
@@ -0,0 +1,113 @@
+'use strict';
+'require view';
+'require form';
+'require tools.widgets as widgets';
+
+return view.extend({
+ render: function () {
+ var m, s, o;
+
+ m = new form.Map('openwisp',
+ _('OpenWISP'),
+ _("Configure, start and stop the OpenWISP agent on this device. Read more about configuration values: <a target='_blank' rel='noopener noreferrer' href='https://github.com/openwisp/openwisp-config'>https://github.com/openwisp/openwisp-config</a>"));
+
+ s = m.section(form.NamedSection, 'http', 'controller');
+
+ s.tab('general', _('General Settings'));
+ s.tab('advanced', _('Advanced Settings'));
+
+ // General settings
+ o = s.taboption('general', form.Value, 'uuid', _('UUID'), _('The UUID of this device in the OpenWISP server.'))
+ o.readonly = true;
+
+ o = s.taboption('general', form.Value, 'key', _('Key'), _('The Key of this device in the OpenWISP server.'))
+ o.readonly = true;
+
+ o = s.taboption('general', form.ListValue, 'enabled',
+ _('Enable'),
+ _("Enable or disable the OpenWISP service."));
+ o.value('disabled', _('Disabled'));
+ o.value('monitoring', _('Enabled'));
+ o.default = 'monitoring'
+
+ o = s.taboption('general', form.Value, 'url', _('Server URL'), _('The URL to the OpenWISP server. Example: https://openwisp2.mynetwork.com'))
+ o.placeholder = 'https://openwisp2.mynetwork.com'
+
+ o = s.taboption('general', form.Value, 'shared_secret', _('Shared Secret'), _('The organization shared secret for auto enrollment.'))
+ o.password = true
+
+ o = s.taboption('general', form.Value, 'interval', _('Update Interval'), 'How often to check in with the OpenWISP server. Expressed in seconds.')
+ o.placeholder = '120'
+ o.rmempty = true
+ o.datatype = 'uinteger';
+
+ // Advanced settings
+ o = s.taboption('advanced', form.Flag, 'verify_ssl', _('Verify SSL'), _('Verify the server SSL certificate.'))
+ o.rmempty = true
+ o.default = true
+
+ o = s.taboption('advanced', form.Flag, 'consistent_key', _('Consistent Key'), _('When using Automatic registration, this feature allows devices to keep the same configuration even if reset or re-flashed. This feature is enabled by default, but must be enabled also in the controller application in order to work.'))
+ o.rmempty = true
+ o.default = true
+
+ o = s.taboption('advanced', widgets.DeviceSelect, 'mac_interface', _('MAC Interface'), _('The interface to use for getting the MAC for this device.'))
+ o.default = 'eth0'
+
+ o = s.taboption('advanced', widgets.NetworkSelect, 'management_interface', _('Management Interface'), _('The interface to use for management and control.'))
+ o.placeholder = 'tun0'
+ o.rmempty = true
+
+ o = s.taboption('advanced', form.Flag, 'merge_config', _('Merge Config'), _('If selected, in the event a config item is present in both the remote and local configuration, the remote configuration takes precedence over local configuration.'))
+ o.rmempty = true
+ o.default = true
+
+ o = s.taboption('advanced', form.DynamicList, 'tags', _('Tags'), _('Tags applied to this device.'))
+
+ o = s.taboption('advanced', form.Flag, 'test_config', _('Test Config'), _('If the agent is unable to reach the controller after applying the downloaded config it will be reverted.'))
+ o.default = true
+ o.rmempty = true
+
+ o = s.taboption('advanced', form.Value, 'test_script', _('Test Script'), 'Path to a custom test script if the default Test Config script does not meet your needs.')
+ o.depends({ test_config: '1' })
+ o.datatype = "file"
+
+ o = s.taboption('advanced', form.Flag, 'hardware_id_key', _('Hardware ID Key'), _('Use a unique hardware ID for device identification, for example a serial number.'))
+ o.default = false
+ o.rmempty = true
+
+ o = s.taboption('advanced', form.Value, 'hardware_id_script', _('Hardware ID Script'), 'Path to the script used to return the value of the hardware key.')
+ o.depends({ hardware_id_key: '1' })
+ o.datatype = "file"
+
+ o = s.taboption('advanced', form.Value, 'bootup_delay', _('Boot Delay'), 'Maximum value of the delay after boot before starting OpenWISP service. Expressed in seconds.')
+ o.placeholder = '10'
+ o.rmempty = true
+ o.datatype = 'uinteger';
+
+ o = s.taboption('advanced', form.Value, 'connect_timeout', _('Connect Timeout'), 'Value passed to curl --connect-timeout argument, defaults to 15. Expressed in seconds.')
+ o.placeholder = '15'
+ o.rmempty = true
+ o.datatype = 'uinteger';
+
+ o = s.taboption('advanced', form.Value, 'max_time', _('Max Time'), _('Value passed to curl --max-time argument, defaults to 30. Expressed in seconds.'))
+ o.placeholder = '30'
+ o.rmempty = true
+ o.datatype = 'uinteger';
+
+ o = s.taboption('advanced', form.Value, 'capath', _('CA Path'), _('Use the specified certificate file to verify the peer. The file may contain multiple CA certificates. The certificate(s) must be in PEM format.'))
+ o.datatype = "file"
+
+ o = s.taboption('advanced', form.Value, 'cacert', _('CA Cert'), _('Use the specified certificate directory to verify the peer. The certificates must be in PEM format, and the directory must have been processed using the c_rehash utility supplied with openssl.'))
+ o.datatype = "file"
+
+ o = s.taboption('advanced', form.Value, 'pre_reload_hook', _('Pre-reload Hook'), _('Path to pre-reload hook. The hook is not called if the path does not point to an executable script file. This hook is called each time openwisp-config applies a configuration, but before services are reloaded.'))
+ o.placeholder = '/usr/sbin/my_pre_reload_hook'
+ o.datatype = "file"
+
+ o = s.taboption('advanced', form.Value, 'post_reload_hook', _('Post-reload Hook'), _('Path to post reload hook script. The hook is not called if the path does not point to an executable script file. This hook is called each time openwisp-config applies a configuration, but after services are reloaded.'))
+ o.placeholder = '/usr/sbin/my_post_reload_hook'
+ o.datatype = "file"
+
+ return m.render();
+ }
+});
diff --git a/applications/luci-app-openwisp/po/es/openwisp.po b/applications/luci-app-openwisp/po/es/openwisp.po
new file mode 100644
index 0000000000..8c125dead6
--- /dev/null
+++ b/applications/luci-app-openwisp/po/es/openwisp.po
@@ -0,0 +1,275 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2023-09-10 09:28+0000\n"
+"Last-Translator: Franco Castillo <castillofrancodamian@gmail.com>\n"
+"Language-Team: Spanish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsopenwisp/es/>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 5.0.1-dev\n"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:17
+msgid "Advanced Settings"
+msgstr "Ajustes avanzados"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:82
+msgid "Boot Delay"
+msgstr "Retraso en el arranque"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:100
+msgid "CA Cert"
+msgstr "Cert CA"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:97
+msgid "CA Path"
+msgstr "Ruta CA"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:12
+msgid ""
+"Configure, start and stop the OpenWISP agent on this device. Read more about "
+"configuration values: <a target='_blank' rel='noopener noreferrer' "
+"href='https://github.com/openwisp/openwisp-config'>https://github.com/"
+"openwisp/openwisp-config</a>"
+msgstr ""
+"Configure, inicie y detenga el agente OpenWISP en este dispositivo. Lea más "
+"sobre los valores de configuración: <a target='_blank' rel='noopener "
+"noreferrer' href='https://github.com/openwisp/openwisp-config'>https://"
+"github.com/openwisp/openwisp-config </a>"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:87
+msgid "Connect Timeout"
+msgstr "Tiempo de espera de conexión"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:49
+msgid "Consistent Key"
+msgstr "Clave consistente"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:29
+msgid "Disabled"
+msgstr "Desactivado"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:27
+msgid "Enable"
+msgstr "Activar"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:28
+msgid "Enable or disable the OpenWISP service."
+msgstr "Activar o desactivar el servicio OpenWISP."
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:30
+msgid "Enabled"
+msgstr "Activado"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:16
+msgid "General Settings"
+msgstr "Configuración general"
+
+#: applications/luci-app-openwisp/root/usr/share/rpcd/acl.d/luci-app-openwisp.json:3
+msgid "Grant access to luci-app-openwisp"
+msgstr "Otorgar acceso a luci-app-openwisp"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:74
+msgid "Hardware ID Key"
+msgstr "Clave de ID de hardware"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:78
+msgid "Hardware ID Script"
+msgstr "Script de ID de hardware"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:60
+msgid ""
+"If selected, in the event a config item is present in both the remote and "
+"local configuration, the remote configuration takes precedence over local "
+"configuration."
+msgstr ""
+"Si se selecciona, en caso de que un elemento de configuración esté presente "
+"tanto en la configuración remota como en la local, la configuración remota "
+"tiene prioridad sobre la configuración local."
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:66
+msgid ""
+"If the agent is unable to reach the controller after applying the downloaded "
+"config it will be reverted."
+msgstr ""
+"Si el agente no puede comunicarse con el controlador después de aplicar la "
+"configuración descargada, se revertirá."
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:23
+msgid "Key"
+msgstr "Clave"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:53
+msgid "MAC Interface"
+msgstr "Interfaz MAC"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:56
+msgid "Management Interface"
+msgstr "Interfaz de dirección"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:92
+msgid "Max Time"
+msgstr "Tiempo máximo"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:60
+msgid "Merge Config"
+msgstr "Combinar la configuración"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:11
+#: applications/luci-app-openwisp/root/usr/share/luci/menu.d/luci-app-openwisp.json:3
+msgid "OpenWISP"
+msgstr "OpenWISP"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:107
+msgid ""
+"Path to post reload hook script. The hook is not called if the path does not "
+"point to an executable script file. This hook is called each time openwisp-"
+"config applies a configuration, but after services are reloaded."
+msgstr ""
+"Ruta para publicar el script de gancho de recarga. El enlace no se llama si "
+"la ruta no apunta a un archivo de script ejecutable. Este enlace se llama "
+"cada vez que openwisp-config aplica una configuración, pero después de que "
+"se vuelven a cargar los servicios."
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:103
+#, fuzzy
+msgid ""
+"Path to pre-reload hook. The hook is not called if the path does not point "
+"to an executable script file. This hook is called each time openwisp-config "
+"applies a configuration, but before services are reloaded."
+msgstr ""
+"Ruta al gancho de recarga previa. El enlace no se llama si la ruta no apunta "
+"a un archivo de script ejecutable. Este enlace se llama cada vez que "
+"openwisp-config aplica una configuración, pero antes de que se vuelvan a "
+"cargar los servicios."
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:107
+#, fuzzy
+msgid "Post-reload Hook"
+msgstr "Gancho posterior a la recarga"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:103
+#, fuzzy
+msgid "Pre-reload Hook"
+msgstr "Gancho de recarga previa"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:33
+msgid "Server URL"
+msgstr "URL del servidor"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:36
+msgid "Shared Secret"
+msgstr "Secreto compartido"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:64
+msgid "Tags"
+msgstr "Etiquetas"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:64
+msgid "Tags applied to this device."
+msgstr "Etiquetas aplicadas a este dispositivo."
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:66
+#, fuzzy
+msgid "Test Config"
+msgstr "Configuración de prueba"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:70
+#, fuzzy
+msgid "Test Script"
+msgstr "Script de prueba"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:23
+#, fuzzy
+msgid "The Key of this device in the OpenWISP server."
+msgstr "La clave de este dispositivo en el servidor OpenWISP."
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:33
+msgid ""
+"The URL to the OpenWISP server. Example: https://openwisp2.mynetwork.com"
+msgstr "La URL del servidor OpenWISP. Ejemplo: https://openwisp2.mynetwork.com"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:20
+msgid "The UUID of this device in the OpenWISP server."
+msgstr "El UUID de este dispositivo en el servidor OpenWISP."
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:53
+msgid "The interface to use for getting the MAC for this device."
+msgstr "La interfaz a usar para obtener la MAC para este dispositivo."
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:56
+msgid "The interface to use for management and control."
+msgstr "La interfaz que se utilizará para la gestión y el control."
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:36
+#, fuzzy
+msgid "The organization shared secret for auto enrollment."
+msgstr "La organización compartió el secreto para la inscripción automática."
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:20
+msgid "UUID"
+msgstr "UUID"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:39
+msgid "Update Interval"
+msgstr "Intervalo de actualización"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:74
+msgid ""
+"Use a unique hardware ID for device identification, for example a serial "
+"number."
+msgstr ""
+"Utilice una ID de hardware única para la identificación del dispositivo, por "
+"ejemplo, un número de serie."
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:100
+msgid ""
+"Use the specified certificate directory to verify the peer. The certificates "
+"must be in PEM format, and the directory must have been processed using the "
+"c_rehash utility supplied with openssl."
+msgstr ""
+"Utilice el directorio de certificados especificado para verificar el par. "
+"Los certificados deben estar en formato PEM y el directorio debe haber sido "
+"procesado mediante la utilidad c_rehash proporcionada con openssl."
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:97
+msgid ""
+"Use the specified certificate file to verify the peer. The file may contain "
+"multiple CA certificates. The certificate(s) must be in PEM format."
+msgstr ""
+"Utilice el archivo de certificado especificado para verificar el par. El "
+"archivo puede contener varios certificados de CA. Los certificados deben "
+"estar en formato PEM."
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:92
+msgid ""
+"Value passed to curl --max-time argument, defaults to 30. Expressed in "
+"seconds."
+msgstr ""
+"Valor pasado al argumento curl --max-time, el valor predeterminado es 30. "
+"Expresado en segundos."
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:45
+msgid "Verify SSL"
+msgstr "Verificar SSL"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:45
+#, fuzzy
+msgid "Verify the server SSL certificate."
+msgstr "Verificar el certificado SSL del servidor."
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:49
+#, fuzzy
+msgid ""
+"When using Automatic registration, this feature allows devices to keep the "
+"same configuration even if reset or re-flashed. This feature is enabled by "
+"default, but must be enabled also in the controller application in order to "
+"work."
+msgstr ""
+"Cuando se utiliza el registro automático, esta función permite que los "
+"dispositivos mantengan la misma configuración incluso si se restablecen o se "
+"vuelven a actualizar. Esta función está activada de forma predeterminada, "
+"pero también debe estarlo en la aplicación del controlador para que funcione."
diff --git a/applications/luci-app-openwisp/po/lt/openwisp.po b/applications/luci-app-openwisp/po/lt/openwisp.po
new file mode 100644
index 0000000000..b340126f8c
--- /dev/null
+++ b/applications/luci-app-openwisp/po/lt/openwisp.po
@@ -0,0 +1,237 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2023-10-21 06:20+0000\n"
+"Last-Translator: Džiugas J <dziugas1959@hotmail.com>\n"
+"Language-Team: Lithuanian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsopenwisp/lt/>\n"
+"Language: lt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > "
+"19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? "
+"1 : 2);\n"
+"X-Generator: Weblate 5.1\n"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:17
+msgid "Advanced Settings"
+msgstr "Pažangūs nustatymai"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:82
+msgid "Boot Delay"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:100
+msgid "CA Cert"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:97
+msgid "CA Path"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:12
+msgid ""
+"Configure, start and stop the OpenWISP agent on this device. Read more about "
+"configuration values: <a target='_blank' rel='noopener noreferrer' "
+"href='https://github.com/openwisp/openwisp-config'>https://github.com/"
+"openwisp/openwisp-config</a>"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:87
+msgid "Connect Timeout"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:49
+msgid "Consistent Key"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:29
+msgid "Disabled"
+msgstr "Išjungtas/-i"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:27
+msgid "Enable"
+msgstr "Įjungti"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:28
+msgid "Enable or disable the OpenWISP service."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:30
+msgid "Enabled"
+msgstr "Įjungta"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:16
+msgid "General Settings"
+msgstr "Bendri nustatymai"
+
+#: applications/luci-app-openwisp/root/usr/share/rpcd/acl.d/luci-app-openwisp.json:3
+msgid "Grant access to luci-app-openwisp"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:74
+msgid "Hardware ID Key"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:78
+msgid "Hardware ID Script"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:60
+msgid ""
+"If selected, in the event a config item is present in both the remote and "
+"local configuration, the remote configuration takes precedence over local "
+"configuration."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:66
+msgid ""
+"If the agent is unable to reach the controller after applying the downloaded "
+"config it will be reverted."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:23
+msgid "Key"
+msgstr "Raktas"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:53
+msgid "MAC Interface"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:56
+msgid "Management Interface"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:92
+msgid "Max Time"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:60
+msgid "Merge Config"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:11
+#: applications/luci-app-openwisp/root/usr/share/luci/menu.d/luci-app-openwisp.json:3
+msgid "OpenWISP"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:107
+msgid ""
+"Path to post reload hook script. The hook is not called if the path does not "
+"point to an executable script file. This hook is called each time openwisp-"
+"config applies a configuration, but after services are reloaded."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:103
+msgid ""
+"Path to pre-reload hook. The hook is not called if the path does not point "
+"to an executable script file. This hook is called each time openwisp-config "
+"applies a configuration, but before services are reloaded."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:107
+msgid "Post-reload Hook"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:103
+msgid "Pre-reload Hook"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:33
+msgid "Server URL"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:36
+msgid "Shared Secret"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:64
+msgid "Tags"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:64
+msgid "Tags applied to this device."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:66
+msgid "Test Config"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:70
+msgid "Test Script"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:23
+msgid "The Key of this device in the OpenWISP server."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:33
+msgid ""
+"The URL to the OpenWISP server. Example: https://openwisp2.mynetwork.com"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:20
+msgid "The UUID of this device in the OpenWISP server."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:53
+msgid "The interface to use for getting the MAC for this device."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:56
+msgid "The interface to use for management and control."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:36
+msgid "The organization shared secret for auto enrollment."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:20
+msgid "UUID"
+msgstr "„UUID“"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:39
+msgid "Update Interval"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:74
+msgid ""
+"Use a unique hardware ID for device identification, for example a serial "
+"number."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:100
+msgid ""
+"Use the specified certificate directory to verify the peer. The certificates "
+"must be in PEM format, and the directory must have been processed using the "
+"c_rehash utility supplied with openssl."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:97
+msgid ""
+"Use the specified certificate file to verify the peer. The file may contain "
+"multiple CA certificates. The certificate(s) must be in PEM format."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:92
+msgid ""
+"Value passed to curl --max-time argument, defaults to 30. Expressed in "
+"seconds."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:45
+msgid "Verify SSL"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:45
+msgid "Verify the server SSL certificate."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:49
+msgid ""
+"When using Automatic registration, this feature allows devices to keep the "
+"same configuration even if reset or re-flashed. This feature is enabled by "
+"default, but must be enabled also in the controller application in order to "
+"work."
+msgstr ""
diff --git a/applications/luci-app-openwisp/po/templates/openwisp.pot b/applications/luci-app-openwisp/po/templates/openwisp.pot
new file mode 100644
index 0000000000..c17d5c0aed
--- /dev/null
+++ b/applications/luci-app-openwisp/po/templates/openwisp.pot
@@ -0,0 +1,224 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:17
+msgid "Advanced Settings"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:82
+msgid "Boot Delay"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:100
+msgid "CA Cert"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:97
+msgid "CA Path"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:12
+msgid ""
+"Configure, start and stop the OpenWISP agent on this device. Read more about "
+"configuration values: <a target='_blank' rel='noopener noreferrer' "
+"href='https://github.com/openwisp/openwisp-config'>https://github.com/"
+"openwisp/openwisp-config</a>"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:87
+msgid "Connect Timeout"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:49
+msgid "Consistent Key"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:29
+msgid "Disabled"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:27
+msgid "Enable"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:28
+msgid "Enable or disable the OpenWISP service."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:30
+msgid "Enabled"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:16
+msgid "General Settings"
+msgstr ""
+
+#: applications/luci-app-openwisp/root/usr/share/rpcd/acl.d/luci-app-openwisp.json:3
+msgid "Grant access to luci-app-openwisp"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:74
+msgid "Hardware ID Key"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:78
+msgid "Hardware ID Script"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:60
+msgid ""
+"If selected, in the event a config item is present in both the remote and "
+"local configuration, the remote configuration takes precedence over local "
+"configuration."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:66
+msgid ""
+"If the agent is unable to reach the controller after applying the downloaded "
+"config it will be reverted."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:23
+msgid "Key"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:53
+msgid "MAC Interface"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:56
+msgid "Management Interface"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:92
+msgid "Max Time"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:60
+msgid "Merge Config"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:11
+#: applications/luci-app-openwisp/root/usr/share/luci/menu.d/luci-app-openwisp.json:3
+msgid "OpenWISP"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:107
+msgid ""
+"Path to post reload hook script. The hook is not called if the path does not "
+"point to an executable script file. This hook is called each time openwisp-"
+"config applies a configuration, but after services are reloaded."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:103
+msgid ""
+"Path to pre-reload hook. The hook is not called if the path does not point "
+"to an executable script file. This hook is called each time openwisp-config "
+"applies a configuration, but before services are reloaded."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:107
+msgid "Post-reload Hook"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:103
+msgid "Pre-reload Hook"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:33
+msgid "Server URL"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:36
+msgid "Shared Secret"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:64
+msgid "Tags"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:64
+msgid "Tags applied to this device."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:66
+msgid "Test Config"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:70
+msgid "Test Script"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:23
+msgid "The Key of this device in the OpenWISP server."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:33
+msgid ""
+"The URL to the OpenWISP server. Example: https://openwisp2.mynetwork.com"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:20
+msgid "The UUID of this device in the OpenWISP server."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:53
+msgid "The interface to use for getting the MAC for this device."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:56
+msgid "The interface to use for management and control."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:36
+msgid "The organization shared secret for auto enrollment."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:20
+msgid "UUID"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:39
+msgid "Update Interval"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:74
+msgid ""
+"Use a unique hardware ID for device identification, for example a serial "
+"number."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:100
+msgid ""
+"Use the specified certificate directory to verify the peer. The certificates "
+"must be in PEM format, and the directory must have been processed using the "
+"c_rehash utility supplied with openssl."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:97
+msgid ""
+"Use the specified certificate file to verify the peer. The file may contain "
+"multiple CA certificates. The certificate(s) must be in PEM format."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:92
+msgid ""
+"Value passed to curl --max-time argument, defaults to 30. Expressed in "
+"seconds."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:45
+msgid "Verify SSL"
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:45
+msgid "Verify the server SSL certificate."
+msgstr ""
+
+#: applications/luci-app-openwisp/htdocs/luci-static/resources/view/openwisp.js:49
+msgid ""
+"When using Automatic registration, this feature allows devices to keep the "
+"same configuration even if reset or re-flashed. This feature is enabled by "
+"default, but must be enabled also in the controller application in order to "
+"work."
+msgstr ""
diff --git a/applications/luci-app-openwisp/root/usr/share/luci/menu.d/luci-app-openwisp.json b/applications/luci-app-openwisp/root/usr/share/luci/menu.d/luci-app-openwisp.json
new file mode 100644
index 0000000000..75d13b9560
--- /dev/null
+++ b/applications/luci-app-openwisp/root/usr/share/luci/menu.d/luci-app-openwisp.json
@@ -0,0 +1,13 @@
+{
+ "admin/services/openwisp": {
+ "title": "OpenWISP",
+ "order": 90,
+ "action": {
+ "type": "view",
+ "path": "openwisp"
+ },
+ "depends": {
+ "acl": [ "luci-app-openwisp" ]
+ }
+ }
+}
diff --git a/applications/luci-app-openwisp/root/usr/share/rpcd/acl.d/luci-app-openwisp.json b/applications/luci-app-openwisp/root/usr/share/rpcd/acl.d/luci-app-openwisp.json
new file mode 100644
index 0000000000..35a3d128d0
--- /dev/null
+++ b/applications/luci-app-openwisp/root/usr/share/rpcd/acl.d/luci-app-openwisp.json
@@ -0,0 +1,11 @@
+{
+ "luci-app-openwisp": {
+ "description": "Grant access to luci-app-openwisp",
+ "read": {
+ "uci": [ "openwisp" ]
+ },
+ "write": {
+ "uci": [ "openwisp" ]
+ }
+ }
+}