diff options
Diffstat (limited to 'applications')
65 files changed, 2105 insertions, 650 deletions
diff --git a/applications/luci-app-adblock/po/it/adblock.po b/applications/luci-app-adblock/po/it/adblock.po new file mode 100644 index 0000000000..1901228634 --- /dev/null +++ b/applications/luci-app-adblock/po/it/adblock.po @@ -0,0 +1,337 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 17/09/2017\n" +"Last-Translator: Bubu83 <bubu83@gmail.com>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.3\n" +"Language: it\n" + +msgid "-------" +msgstr "" + +msgid "Adblock" +msgstr "Adblock" + +msgid "Adblock Logfile" +msgstr "Registro Adblock" + +msgid "Adblock Status" +msgstr "Status Adblock" + +msgid "Adblock Version" +msgstr "Versione Adblock" + +msgid "Additional trigger delay in seconds before adblock processing begins." +msgstr "Tempo addizionale in secondi di attesa prima che adblock si avvii." + +msgid "Advanced" +msgstr "Avanzato" + +msgid "Available blocklist sources." +msgstr "Fonti lista di blocco disponibili." + +msgid "Backup Directory" +msgstr "Directory del Backup" + +msgid "Blocklist Sources" +msgstr "Fonti lista di Blocco" + +msgid "" +"Caution: Please don't select big lists or many lists at once on low memory " +"devices to prevent OOM exceptions!" +msgstr "" +"Attenzione: Per favore non selezionare grandi liste o molte liste alla volta " +"su dispositivi con poca memoria per prevenire errori OOM!" + +msgid "" +"Choose 'none' to disable automatic startups, 'timed' to use a classic " +"timeout (default 30 sec.) or select another trigger interface." +msgstr "" +"Scegli 'none' per disabilitare l'avvio automatico, 'timed' per usare un " +"classico timeout (default 30 sec.) o seleziona un'altra interfaccia di avvio." + +msgid "Collecting data..." +msgstr "Raccogliendo dati..." + +msgid "" +"Configuration of the adblock package to block ad/abuse domains by using DNS." +msgstr "" +"Configurazione del pacchetto adblock per bloccare domini pubblicità/abuso " +"usando i DNS." + +msgid "" +"Create compressed blocklist backups, they will be used in case of download " +"errors or during startup in manual mode." +msgstr "" +"Crea i backup compressi delle liste di blocco, saranno usati in caso di " +"errori di download o durante l'avvio in modalità manuale." + +msgid "DNS Backend (DNS Directory)" +msgstr "" + +msgid "DNS Directory" +msgstr "Directory DNS" + +msgid "Description" +msgstr "Descrizione" + +msgid "" +"Do not automatically update blocklists during startup, use blocklist backups " +"instead." +msgstr "" +"Non aggiornare automaticamente le liste durante l'avvio, usa invece i backup " +"della lista di blocco." + +msgid "Download Utility (SSL Library)" +msgstr "" + +msgid "Edit Blacklist" +msgstr "Modifica Lista Nera" + +msgid "Edit Configuration" +msgstr "Modifica Configurazione" + +msgid "Edit Whitelist" +msgstr "Modifica Lista Bianca" + +msgid "Enable Adblock" +msgstr "Attiva Adblock" + +msgid "Enable Blocklist Backup" +msgstr "Attiva Backup Lista di Blocco" + +msgid "" +"Enable memory intense overall sort / duplicate removal on low memory devices " +"(< 64 MB RAM)" +msgstr "" +"Attiva l'ordinamento globale / rimozione duplicati stressante per la memoria " +"su dispositivi con poca memoria (< 64 MB RAM)" + +msgid "Enable verbose debug logging in case of any processing error." +msgstr "" +"Abilita il registro dettagliato in caso di qualsiasi errore di processo." + +msgid "Enabled" +msgstr "Abilitato" + +msgid "Extra Options" +msgstr "Opzioni Extra" + +msgid "" +"For SSL protected blocklist sources you need a suitable SSL library, e.g. " +"'libustream-ssl' or the wget 'built-in'." +msgstr "" +"Per le fonti delle liste protette da SSL hai bisogno di una libreria SSL " +"adatta, p.e. 'libustream-ssl' o wget 'built-in'." + +msgid "" +"For further information <a href=\"%s\" target=\"_blank\">see online " +"documentation</a>" +msgstr "" +"Per ulteriori informazioni <a href=\"%s\" target=\"_blank\">vedi " +"documentazione online</a>" + +msgid "Force Local DNS" +msgstr "Forza DNS Locale" + +msgid "Force Overall Sort" +msgstr "Forza Ordinamento Globale" + +msgid "" +"In OPKG use the '--force-maintainer' option to overwrite the pre-existing " +"config file or download a fresh default config from <a href=\"%s\" target=" +"\"_blank\">here</a>" +msgstr "" +"In OPKG usa l'opzione '--force-maintainer' per sovrascrivere il pre-" +"esistente file di configurazione o scarica una nuova configurazione di " +"default da <a href=\"%s\" target=\"_blank\">qui</a>" + +msgid "Input file not found, please check your configuration." +msgstr "File di input non trovato, per favore controlla la tua configurazione." + +msgid "Invalid domain specified!" +msgstr "Dominio invalido specificato!" + +msgid "Last Run" +msgstr "Ultimo Avvio" + +msgid "" +"List URLs and Shallalist category selections are configurable in the " +"'Advanced' section.<br />" +msgstr "" +"Le selezioni degli URL delle liste e categorie Shallalist sono configurabili " +"nella sezione 'Avanzato'.<br />" + +msgid "" +"List of available network interfaces. By default the startup will be " +"triggered by the 'wan' interface.<br />" +msgstr "" +"Lista delle interfacce di rete disponibili. Per default l'avvio sarà " +"innescato dall'interfaccia 'wan'.<br />" + +msgid "" +"List of supported DNS backends with their default list export directory.<br /" +">" +msgstr "" +"Lista dei backend DNS supportati con la loro directory di default di esporto " +"della lista.<br />" + +msgid "Loading" +msgstr "Caricando" + +msgid "Manual / Backup mode" +msgstr "Modalità Manuale / Backup" + +msgid "No" +msgstr "No" + +msgid "" +"Options for further tweaking in case the defaults are not suitable for you." +msgstr "" +"Opzioni per ulteriori modifiche in caso che quelle di default non ti sono " +"adatte." + +msgid "Overall Blocked Domains" +msgstr "Totale Domini Bloccati" + +msgid "Overview" +msgstr "Riassunto" + +msgid "" +"Please add only one domain per line. Comments introduced with '#' are " +"allowed - ip addresses, wildcards and regex are not." +msgstr "" +"Per favore aggiungi solo un dominio per linea. I commenti introdotti con '#' " +"sono consentiti - indirizzi ip , jolly e regex non lo sono." + +msgid "Please edit this file directly in a terminal session." +msgstr "" +"Per favore modifica questo file direttamente in una sessione al terminale." + +msgid "Please update your adblock config file to use this package." +msgstr "" +"Per favore aggiorna il tuo file configurazione di adblock per usare questo " +"pacchetto." + +msgid "Query" +msgstr "Interrogazione" + +msgid "Query domains" +msgstr "Interrogazione domini" + +msgid "Redirect all DNS queries from 'lan' zone to the local resolver." +msgstr "" +"Reindirizza tutte le richieste DNS dalla zona 'lan' al risolvitore locale." + +msgid "Resume" +msgstr "Riprendi" + +msgid "Runtime Information" +msgstr "Informazione di Runtime" + +msgid "SSL req." +msgstr "Ric. SSL" + +msgid "Save" +msgstr "Salva" + +msgid "Startup Trigger" +msgstr "Innesco d'Avvio" + +msgid "Suspend" +msgstr "Sospendi" + +msgid "Suspend / Resume Adblock" +msgstr "Sospendi / Riprendi Adblock" + +msgid "" +"Target directory for adblock backups. Please use only non-volatile disks, no " +"ram/tmpfs drives." +msgstr "" +"Directory per i backup di adblock. Per favore usa solo dischi non volatili, " +"non dischi ram/tmpfs." + +msgid "Target directory for the generated blocklist 'adb_list.overall'." +msgstr "Directory per la lista di blocco generata 'adb_list.overall'." + +msgid "The file size is too large for online editing in LuCI (> 512 KB)." +msgstr "" +"La grandezza del file è troppo grande per modificarla online in LuCI (> " +"512 KB)." + +msgid "" +"This form allows you to modify the content of the adblock blacklist (%s)." +"<br />" +msgstr "" +"Questo form ti consente di modificare il contenuto della lista nera di " +"adblock (%s).<br />" + +msgid "" +"This form allows you to modify the content of the adblock whitelist (%s)." +"<br />" +msgstr "" +"Questo form ti consente di modificare il contenuto della lista bianca di " +"adblock (%s).<br />" + +msgid "" +"This form allows you to modify the content of the main adblock configuration " +"file (/etc/config/adblock)." +msgstr "" +"Questo form ti consente di modificare il contenuto del file principale di " +"configurazione di adblock (/etc/config/adblock)." + +msgid "" +"This form allows you to query active block lists for certain domains, e.g. " +"for whitelisting." +msgstr "" +"Questo form ti consente di interrogare le liste di blocco attive per " +"determinati domini, p.e. per metterli nella lista bianca." + +msgid "" +"This form shows the syslog output, pre-filtered for adblock related messages " +"only." +msgstr "" +"Questo form mostra l'output del registro, prefiltrato per messaggi relativi " +"solo ad adblock." + +msgid "" +"To overwrite the default path use the 'DNS Directory' option in the extra " +"section below." +msgstr "" +"Per sovrascrivere il percorso di default usa l'opzione 'Directory DNS' nella " +"sezione aggiuntiva sotto." + +msgid "Trigger Delay" +msgstr "Ritardo Innesco" + +msgid "Verbose Debug Logging" +msgstr "Registro di Debug Dettagliato" + +msgid "View Logfile" +msgstr "Vedi Registro" + +msgid "Waiting for command to complete..." +msgstr "Aspettando che il comando venga completato..." + +msgid "Yes" +msgstr "Sì" + +msgid "disabled" +msgstr "disabilitato" + +msgid "enabled" +msgstr "abilitato" + +msgid "error" +msgstr "errore" + +msgid "n/a" +msgstr "n/d" + +msgid "paused" +msgstr "in pausa" diff --git a/applications/luci-app-adblock/po/pt-br/adblock.po b/applications/luci-app-adblock/po/pt-br/adblock.po index ba54a45b89..b4c8675f07 100644 --- a/applications/luci-app-adblock/po/pt-br/adblock.po +++ b/applications/luci-app-adblock/po/pt-br/adblock.po @@ -25,7 +25,7 @@ msgid "Adblock Status" msgstr "" msgid "Adblock Version" -msgstr "" +msgstr "Versão do Adblock" msgid "Additional trigger delay in seconds before adblock processing begins." msgstr "" @@ -39,10 +39,10 @@ msgid "Available blocklist sources." msgstr "Fontes de listas de bloqueio disponíveis." msgid "Backup Directory" -msgstr "" +msgstr "Diretório da cópia de segurança" msgid "Blocklist Sources" -msgstr "" +msgstr "Fontes de listas de bloqueio" msgid "" "Caution: Please don't select big lists or many lists at once on low memory " @@ -99,10 +99,10 @@ msgid "Edit Whitelist" msgstr "Editar Lista Permitida" msgid "Enable Adblock" -msgstr "" +msgstr "Habilitar adblock" msgid "Enable Blocklist Backup" -msgstr "" +msgstr "Habilitar cópia de segurança da lista de bloqueio" msgid "" "Enable memory intense overall sort / duplicate removal on low memory devices " @@ -118,7 +118,7 @@ msgid "Enabled" msgstr "Habilitado" msgid "Extra Options" -msgstr "" +msgstr "Opções adicionais" msgid "" "For SSL protected blocklist sources you need a suitable SSL library, e.g. " @@ -135,7 +135,7 @@ msgstr "" "online</a>" msgid "Force Local DNS" -msgstr "" +msgstr "Force o DNS local" msgid "Force Overall Sort" msgstr "Force Tipo Geral" @@ -215,7 +215,7 @@ msgid "Resume" msgstr "" msgid "Runtime Information" -msgstr "" +msgstr "Informação de execução" msgid "SSL req." msgstr "req. de SSL" @@ -230,7 +230,7 @@ msgid "Suspend" msgstr "" msgid "Suspend / Resume Adblock" -msgstr "" +msgstr "Suspender / Resumir adblock" msgid "" "Target directory for adblock backups. Please use only non-volatile disks, no " @@ -285,7 +285,7 @@ msgid "" msgstr "" msgid "Trigger Delay" -msgstr "" +msgstr "Atraso no gatilho" msgid "Verbose Debug Logging" msgstr "" @@ -314,36 +314,15 @@ msgstr "n/d" msgid "paused" msgstr "" -#~ msgid "Adblock version" -#~ msgstr "Versão do Adblock" - -#~ msgid "Backup directory" -#~ msgstr "Diretório da cópia de segurança" - #~ msgid "Blocked domains (overall)" #~ msgstr "Domínios bloqueados (total)" -#~ msgid "Blocklist sources" -#~ msgstr "Fontes de listas de bloqueio" - #~ msgid "DNS backend" #~ msgstr "Porta dos fundos de DNS" -#~ msgid "Enable adblock" -#~ msgstr "Habilitar adblock" - -#~ msgid "Enable blocklist backup" -#~ msgstr "Habilitar cópia de segurança da lista de bloqueio" - #~ msgid "Enable verbose debug logging" #~ msgstr "Habilite registros detalhados para depuração" -#~ msgid "Extra options" -#~ msgstr "Opções adicionais" - -#~ msgid "Force local DNS" -#~ msgstr "Force o DNS local" - #~ msgid "Last rundate" #~ msgstr "Última data de execução" @@ -363,18 +342,9 @@ msgstr "" #~ msgid "Resume adblock" #~ msgstr "Resumir adblock" -#~ msgid "Runtime information" -#~ msgstr "Informação de execução" - #~ msgid "Status" #~ msgstr "Estado" -#~ msgid "Suspend / Resume adblock" -#~ msgstr "Suspender / Resumir adblock" - -#~ msgid "Trigger delay" -#~ msgstr "Atraso no gatilho" - #~ msgid "active" #~ msgstr "ativo" diff --git a/applications/luci-app-adblock/po/sv/adblock.po b/applications/luci-app-adblock/po/sv/adblock.po index 9507475a84..449b22eae5 100644 --- a/applications/luci-app-adblock/po/sv/adblock.po +++ b/applications/luci-app-adblock/po/sv/adblock.po @@ -2,7 +2,7 @@ msgid "" msgstr "Content-Type: text/plain; charset=UTF-8\n" msgid "-------" -msgstr "" +msgstr "-------" msgid "Adblock" msgstr "Adblock" @@ -11,10 +11,10 @@ msgid "Adblock Logfile" msgstr "Adblock's loggfil" msgid "Adblock Status" -msgstr "" +msgstr "Status för Adblock" msgid "Adblock Version" -msgstr "" +msgstr "Version av Adblock" msgid "Additional trigger delay in seconds before adblock processing begins." msgstr "" @@ -26,20 +26,24 @@ msgid "Available blocklist sources." msgstr "Tillgängliga källor för blockeringslistor" msgid "Backup Directory" -msgstr "" +msgstr "Säkerhetskopiera mapp" msgid "Blocklist Sources" -msgstr "" +msgstr "Källor för blockeringslistor" msgid "" "Caution: Please don't select big lists or many lists at once on low memory " "devices to prevent OOM exceptions!" msgstr "" +"Försiktig: Vänligen välj inte stora listor eller många listor på samma gång för enheter " +"med lite minne för att undvika OOM-undantag!" msgid "" "Choose 'none' to disable automatic startups, 'timed' to use a classic " "timeout (default 30 sec.) or select another trigger interface." msgstr "" +"Välj 'inga' för att stänga av automatiska uppstarter, 'tidsinställd för att använda ett klassiskt " +"avbrott (30 sek. är standard) eller välj ett annat utlösande gränssnitt." msgid "Collecting data..." msgstr "Samlar in data..." @@ -56,10 +60,10 @@ msgid "" msgstr "" msgid "DNS Backend (DNS Directory)" -msgstr "" +msgstr "DNS-bakände (DNS-mapp)" msgid "DNS Directory" -msgstr "" +msgstr "DNS-mapp" msgid "Description" msgstr "Beskrivning" @@ -84,10 +88,10 @@ msgid "Edit Whitelist" msgstr "Redigera vitlista" msgid "Enable Adblock" -msgstr "" +msgstr "Aktivera adblock" msgid "Enable Blocklist Backup" -msgstr "" +msgstr "Aktivera säkerhetskopiering av blockeringslistan" msgid "" "Enable memory intense overall sort / duplicate removal on low memory devices " @@ -101,7 +105,7 @@ msgid "Enabled" msgstr "Aktiverad" msgid "Extra Options" -msgstr "" +msgstr "Extra alternativ" msgid "" "For SSL protected blocklist sources you need a suitable SSL library, e.g. " @@ -116,7 +120,7 @@ msgstr "" "internet</a>" msgid "Force Local DNS" -msgstr "" +msgstr "Tvinga lokal DNS" msgid "Force Overall Sort" msgstr "" @@ -135,7 +139,7 @@ msgid "Invalid domain specified!" msgstr "Ogiltig domän angiven!" msgid "Last Run" -msgstr "" +msgstr "Kördes senast" msgid "" "List URLs and Shallalist category selections are configurable in the " @@ -180,7 +184,7 @@ msgid "Please edit this file directly in a terminal session." msgstr "Vänligen redigera den här filen direkt i en terminal-session." msgid "Please update your adblock config file to use this package." -msgstr "" +msgstr "Vänligen uppdatera din adblock's konfigurationsfil till att använda det här paketet." msgid "Query" msgstr "Fråga" @@ -192,10 +196,10 @@ msgid "Redirect all DNS queries from 'lan' zone to the local resolver." msgstr "" msgid "Resume" -msgstr "" +msgstr "Återuppta" msgid "Runtime Information" -msgstr "" +msgstr "Information om körtid" msgid "SSL req." msgstr "SSL-rek." @@ -204,13 +208,13 @@ msgid "Save" msgstr "Spara" msgid "Startup Trigger" -msgstr "" +msgstr "Uppstartslösare" msgid "Suspend" -msgstr "" +msgstr "Stäng av" msgid "Suspend / Resume Adblock" -msgstr "" +msgstr "Upphäv / Återuppta adblock" msgid "" "Target directory for adblock backups. Please use only non-volatile disks, no " @@ -275,50 +279,29 @@ msgid "Yes" msgstr "Ja" msgid "disabled" -msgstr "" +msgstr "inaktiverad" msgid "enabled" -msgstr "" +msgstr "aktiverad" msgid "error" -msgstr "" +msgstr "fel" msgid "n/a" msgstr "n/a" msgid "paused" -msgstr "" - -#~ msgid "Adblock version" -#~ msgstr "Version för Adblock" - -#~ msgid "Backup directory" -#~ msgstr "Säkerhetskopiera mapp" +msgstr "pausad" #~ msgid "Blocked domains (overall)" #~ msgstr "Blockerade domäner (övergripande)" -#~ msgid "Blocklist sources" -#~ msgstr "Källor för blockeringslistor" - #~ msgid "DNS backend" #~ msgstr "Bakände för DNS" -#~ msgid "Enable adblock" -#~ msgstr "Aktivera adblock" - -#~ msgid "Enable blocklist backup" -#~ msgstr "Aktivera säkerhetskopiering av blockeringslistan" - #~ msgid "Enable verbose debug logging" #~ msgstr "Aktivera utförlig loggning för avlusning" -#~ msgid "Extra options" -#~ msgstr "Extra alternativ" - -#~ msgid "Force local DNS" -#~ msgstr "Tvinga lokal DNS" - #~ msgid "Last rundate" #~ msgstr "Senaste kördatum" @@ -328,15 +311,9 @@ msgstr "" #~ msgid "Resume adblock" #~ msgstr "Återuppta adblock" -#~ msgid "Runtime information" -#~ msgstr "Information om körtid" - #~ msgid "Status" #~ msgstr "Status" -#~ msgid "Suspend / Resume adblock" -#~ msgstr "Upphäv / Återuppta adblock" - #~ msgid "Suspend adblock" #~ msgstr "Upphäv adblock" diff --git a/applications/luci-app-adblock/po/zh-cn/adblock.po b/applications/luci-app-adblock/po/zh-cn/adblock.po index dca81d4e47..d5f5104a05 100644 --- a/applications/luci-app-adblock/po/zh-cn/adblock.po +++ b/applications/luci-app-adblock/po/zh-cn/adblock.po @@ -26,7 +26,7 @@ msgid "Adblock Status" msgstr "" msgid "Adblock Version" -msgstr "" +msgstr "Adblock 版本" msgid "Additional trigger delay in seconds before adblock processing begins." msgstr "" @@ -38,10 +38,10 @@ msgid "Available blocklist sources." msgstr "可用的 blocklist 来源" msgid "Backup Directory" -msgstr "" +msgstr "备份目录" msgid "Blocklist Sources" -msgstr "" +msgstr "拦截列表来源" msgid "" "Caution: Please don't select big lists or many lists at once on low memory " @@ -92,10 +92,10 @@ msgid "Edit Whitelist" msgstr "编辑白名单" msgid "Enable Adblock" -msgstr "" +msgstr "启用Adblock" msgid "Enable Blocklist Backup" -msgstr "" +msgstr "启用拦截规则备份" msgid "" "Enable memory intense overall sort / duplicate removal on low memory devices " @@ -109,7 +109,7 @@ msgid "Enabled" msgstr "启用" msgid "Extra Options" -msgstr "" +msgstr "额外选项" msgid "" "For SSL protected blocklist sources you need a suitable SSL library, e.g. " @@ -200,7 +200,7 @@ msgid "Resume" msgstr "" msgid "Runtime Information" -msgstr "" +msgstr "运行信息" msgid "SSL req." msgstr "" @@ -215,7 +215,7 @@ msgid "Suspend" msgstr "" msgid "Suspend / Resume Adblock" -msgstr "" +msgstr "暂停/恢复 Adblock" msgid "" "Target directory for adblock backups. Please use only non-volatile disks, no " @@ -259,7 +259,7 @@ msgid "" msgstr "" msgid "Trigger Delay" -msgstr "" +msgstr "触发延迟" msgid "Verbose Debug Logging" msgstr "" @@ -288,48 +288,21 @@ msgstr "" msgid "paused" msgstr "" -#~ msgid "Adblock version" -#~ msgstr "Adblock 版本" - -#~ msgid "Backup directory" -#~ msgstr "备份目录" - -#~ msgid "Blocklist sources" -#~ msgstr "拦截列表来源" - #~ msgid "DNS backend" #~ msgstr "DNS 后端" -#~ msgid "Enable adblock" -#~ msgstr "启用Adblock" - -#~ msgid "Enable blocklist backup" -#~ msgstr "启用拦截规则备份" - #~ msgid "Enable verbose debug logging" #~ msgstr "启用详细调试输出" -#~ msgid "Extra options" -#~ msgstr "额外选项" - #~ msgid "Resume adblock" #~ msgstr "恢复 Adblock" -#~ msgid "Runtime information" -#~ msgstr "运行信息" - #~ msgid "Status" #~ msgstr "状态" -#~ msgid "Suspend / Resume adblock" -#~ msgstr "暂停/恢复 Adblock" - #~ msgid "Suspend adblock" #~ msgstr "暂停 Adblock" -#~ msgid "Trigger delay" -#~ msgstr "触发延迟" - #~ msgid "active" #~ msgstr "已启用" diff --git a/applications/luci-app-advanced-reboot/po/sv/luci-app-advanced-reboot.po b/applications/luci-app-advanced-reboot/po/sv/luci-app-advanced-reboot.po index cac09d76a6..20d77cbcf7 100644 --- a/applications/luci-app-advanced-reboot/po/sv/luci-app-advanced-reboot.po +++ b/applications/luci-app-advanced-reboot/po/sv/luci-app-advanced-reboot.po @@ -1,5 +1,5 @@ msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8" +msgstr "Content-Type: text/plain; charset=UTF-8\n" msgid "Action" msgstr "Åtgärd" @@ -74,9 +74,9 @@ msgid "" "might be necessary to renew the address of your computer to reach the device " "again, depending on your settings." msgstr "" -"Systemet stänger ner nu.<br /> STÄNG INTE AV ENHETEN!<br /> Beroende -"på dina inställningar så kan det vara nödvändigt att förnya din dators adress " -"för att nå enheten igen." +"Systemet stänger ner nu.<br /> STÄNG INTE AV ENHETEN!<br /> Beroende på dina " +"inställningar så kan det vara nödvändigt att förnya din dators adress för " +"att nå enheten igen." msgid "" "WARNING: An alternative partition might have its own settings and completely " @@ -94,12 +94,13 @@ msgid "" "support power off.<br /><br /> Click \"Proceed\" below to power off your " "device." msgstr "" -"VARNING: Att stänga av kan resultera i en omstart i en enhet som inte " -"har stöd för avstängning.<br /><br /> Klicka på \"Fortsätt\" nedanför för att stänga av din " -"enhet." +"VARNING: Att stänga av kan resultera i en omstart i en enhet som inte har " +"stöd för avstängning.<br /><br /> Klicka på \"Fortsätt\" nedanför för att " +"stänga av din enhet." msgid "Warning: There are unsaved changes that will get lost on reboot!" -msgstr "Varning: Det finns osparade ändringar som kommer att förloras vid omstart!" +msgstr "" +"Varning: Det finns osparade ändringar som kommer att förloras vid omstart!" msgid "Warning: This system does not have two partitions!" msgstr "Varning: Det här systemet har inte två partitioner!" diff --git a/applications/luci-app-aria2/po/zh-cn/aria2.po b/applications/luci-app-aria2/po/zh-cn/aria2.po index 823699d7bd..b53299bf51 100644 --- a/applications/luci-app-aria2/po/zh-cn/aria2.po +++ b/applications/luci-app-aria2/po/zh-cn/aria2.po @@ -1,200 +1,211 @@ -msgid "Aria2" -msgstr "" - -msgid "Aria2 is a multi-protocol & multi-source download utility, here you can configure the settings." -msgstr "Aria2 是一个支持多协议多线程的下载器, 你可以在这里对其进行配置" +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8\n" -msgid "Aria2 Status" -msgstr "Aria2 状态" +msgid "\"Falloc\" is not available in all cases." +msgstr "\"Falloc\" 并不是在所有情况下都可用" -msgid "Open YAAW" -msgstr "打开YAAW" +msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled" +msgstr "启用<abbr title=\"分布式哈希表\">DHT</abbr>" -msgid "Open WebUI-Aria2" -msgstr "打开WebUI-Aria2" +msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled" +msgstr "启用<abbr title=\"本地节点发现\">LPD</abbr>" -msgid "The Aria2 service is running." -msgstr "Aria2 正在运行" +msgid "Additional Bt tracker enabled" +msgstr "添加额外的Tracker" -msgid "The Aria2 service is not running." -msgstr "Aria2 未运行" +msgid "Aria2" +msgstr "" msgid "Aria2 Settings" msgstr "Aria2 配置" -msgid "General settings" -msgstr "一般设置" - -msgid "Files and Locations" -msgstr "文件和目录" +msgid "Aria2 Status" +msgstr "Aria2 状态" -msgid "Enabled" -msgstr "启用" +msgid "" +"Aria2 is a multi-protocol & multi-source download utility, here you can " +"configure the settings." +msgstr "Aria2 是一个支持多协议多线程的下载器, 你可以在这里对其进行配置" -msgid "Task Settings" -msgstr "任务设置" +msgid "Autosave session interval" +msgstr "定时保存会话间隔" msgid "BitTorrent Settings" msgstr "BT设置" -msgid "Run daemon as user" -msgstr "以此用户权限运行" +msgid "BitTorrent listen port" +msgstr "BT监听端口" -msgid "RPC port" -msgstr "RPC端口" +msgid "Collecting data..." +msgstr "" -msgid "RPC authentication method" -msgstr "RPC认证方式" +msgid "Config file directory" +msgstr "配置文件目录" -msgid "No Authentication" -msgstr "无认证" +msgid "Debug" +msgstr "调试" -msgid "Username & Password" -msgstr "用户名与密码" +msgid "Default download directory" +msgstr "默认下载目录" -msgid "Token" -msgstr "令牌" +msgid "Disk cache" +msgstr "磁盘缓存" -msgid "RPC username" -msgstr "RPC用户名" +msgid "Enable log" +msgstr "启用日志" -msgid "RPC password" -msgstr "RPC密码" +msgid "Enabled" +msgstr "启用" -msgid "RPC Token" -msgstr "RPC令牌" +msgid "Error" +msgstr "错误" -msgid "Generate Randomly" -msgstr "随机生成" +msgid "Extra Settings" +msgstr "附加选项" -msgid "Enable log" -msgstr "启用日志" +msgid "Falloc" +msgstr "" -msgid "Log file is in the config file dir." -msgstr "日志文件在配置文件目录下" +msgid "Files and Locations" +msgstr "文件和目录" -msgid "Log level" -msgstr "日志记录等级" +msgid "Follow torrent" +msgstr "自动添加下载的种子" -msgid "Debug" -msgstr "调试" +msgid "General Settings" +msgstr "" + +msgid "Generate Randomly" +msgstr "随机生成" msgid "Info" msgstr "信息" -msgid "Notice" -msgstr "注意" +msgid "List of additional Bt tracker" +msgstr "附加Tracker列表" -msgid "Warn" -msgstr "警告" +msgid "List of extra settings" +msgstr "附加选项列表" -msgid "Error" -msgstr "错误" +msgid "Log file is in the config file dir." +msgstr "日志文件在配置文件目录下" -msgid "Config file directory" -msgstr "配置文件目录" +msgid "Log level" +msgstr "日志记录等级" -msgid "Default download directory" -msgstr "默认下载目录" +msgid "Max concurrent downloads" +msgstr "最大同时下载任务数" -msgid "Disk cache" -msgstr "磁盘缓存" +msgid "Max connection per server" +msgstr "单服务器最大连接数" -msgid "in bytes, You can append K or M." -msgstr "单位 B, 你可以在数字后跟上 K 或 M" +msgid "Max number of peers per torrent" +msgstr "单个种子最大连接数" -msgid "Preallocation" -msgstr "磁盘预分配" +msgid "Max number of split" +msgstr "单文件最大线程数" -msgid "Off" -msgstr "关闭" +msgid "Min split size" +msgstr "最小文件分片大小" -msgid "Prealloc" -msgstr "" +msgid "No Authentication" +msgstr "无认证" -msgid "Trunc" -msgstr "" +msgid "Notice" +msgstr "注意" -msgid "Falloc" -msgstr "" +msgid "Off" +msgstr "关闭" -msgid "\"Falloc\" is not available in all cases." -msgstr "\"Falloc\" 并不是在所有情况下都可用" +msgid "Open WebUI-Aria2" +msgstr "打开WebUI-Aria2" -msgid "Overall speed limit enabled" -msgstr "启用全局限速" +msgid "Open YAAW" +msgstr "打开YAAW" msgid "Overall download limit" msgstr "全局下载限速" -msgid "in bytes/sec, You can append K or M." -msgstr "单位 B/s, 你可以在数字后跟上 K 或 M" +msgid "Overall speed limit enabled" +msgstr "启用全局限速" msgid "Overall upload limit" msgstr "全局上传限速" -msgid "Per task speed limit enabled" -msgstr "启用单任务限速" - msgid "Per task download limit" msgstr "单任务下载限速" +msgid "Per task speed limit enabled" +msgstr "启用单任务限速" + msgid "Per task upload limit" msgstr "单任务上传限速" -msgid "Max concurrent downloads" -msgstr "最大同时下载任务数" +msgid "Prealloc" +msgstr "" -msgid "Max connection per server" -msgstr "单服务器最大连接数" +msgid "Preallocation" +msgstr "磁盘预分配" -msgid "Min split size" -msgstr "最小文件分片大小" +msgid "Prefix of peer ID" +msgstr "Peer ID前缀" -msgid "Max number of split" -msgstr "单文件最大线程数" +msgid "RPC Token" +msgstr "RPC令牌" -msgid "Autosave session interval" -msgstr "定时保存会话间隔" +msgid "RPC authentication method" +msgstr "RPC认证方式" -msgid "Sec" -msgstr "秒" +msgid "RPC password" +msgstr "RPC密码" -msgid "User agent value" -msgstr "用户代理(UA)" +msgid "RPC port" +msgstr "RPC端口" -msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled" -msgstr "启用<abbr title=\"分布式哈希表\">DHT</abbr>" +msgid "RPC username" +msgstr "RPC用户名" -msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled" -msgstr "启用<abbr title=\"本地节点发现\">LPD</abbr>" +msgid "Run daemon as user" +msgstr "以此用户权限运行" -msgid "Follow torrent" -msgstr "自动添加下载的种子" +msgid "Sec" +msgstr "秒" -msgid "BitTorrent listen port" -msgstr "BT监听端口" +msgid "Task Settings" +msgstr "任务设置" -msgid "Max number of peers per torrent" -msgstr "单个种子最大连接数" +msgid "The Aria2 service is not running." +msgstr "Aria2 未运行" -msgid "Additional Bt tracker enabled" -msgstr "添加额外的Tracker" +msgid "The Aria2 service is running." +msgstr "Aria2 正在运行" -msgid "List of additional Bt tracker" -msgstr "附加Tracker列表" +msgid "Token" +msgstr "令牌" -msgid "Prefix of peer ID" -msgstr "Peer ID前缀" +msgid "Trunc" +msgstr "" -msgid "Extra Settings" -msgstr "附加选项" +msgid "Use WebSocket" +msgstr "使用WebSocket" -msgid "List of extra settings" -msgstr "附加选项列表" +msgid "User agent value" +msgstr "用户代理(UA)" + +msgid "Username & Password" +msgstr "用户名与密码" msgid "View Json-RPC URL" msgstr "查看 Json-RPC URL" -msgid "Use WebSocket" -msgstr "使用WebSocket" +msgid "Warn" +msgstr "警告" + +msgid "in bytes, You can append K or M." +msgstr "单位 B, 你可以在数字后跟上 K 或 M" + +msgid "in bytes/sec, You can append K or M." +msgstr "单位 B/s, 你可以在数字后跟上 K 或 M" + +#~ msgid "General settings" +#~ msgstr "一般设置" diff --git a/applications/luci-app-ddns/po/it/ddns.po b/applications/luci-app-ddns/po/it/ddns.po index 3b9d5f48de..4b8d2f844e 100644 --- a/applications/luci-app-ddns/po/it/ddns.po +++ b/applications/luci-app-ddns/po/it/ddns.po @@ -725,7 +725,7 @@ msgid "missing / required" msgstr "mancante / richiesto" msgid "must be greater or equal 'Check Interval'" -msgstr "deve essere più grande o uguale "Controlla Intervallo'" +msgstr "deve essere più grande o uguale 'Controlla Intervallo'" msgid "must start with 'http://'" msgstr "deve iniziare con 'http://'" diff --git a/applications/luci-app-diag-devinfo/po/sv/diag_devinfo.po b/applications/luci-app-diag-devinfo/po/sv/diag_devinfo.po index c735323955..d68116bf7b 100644 --- a/applications/luci-app-diag-devinfo/po/sv/diag_devinfo.po +++ b/applications/luci-app-diag-devinfo/po/sv/diag_devinfo.po @@ -91,7 +91,7 @@ msgid "MAC range and information used to override system and IEEE databases" msgstr "" msgid "Milliseconds to sleep between requests (default 100)" -msgstr "" +msgstr "Millisekunder att sova mellan förfrågningar (100 är standard)" msgid "Model" msgstr "Modell" @@ -109,7 +109,7 @@ msgid "Networks to scan for devices" msgstr "Nätverk att skanna efter enheter i" msgid "Networks to scan for supported devices" -msgstr "" +msgstr "Nätverk att skanna efter enheter som stöds" msgid "No SIP devices" msgstr "Inga SIP-enheter" @@ -118,10 +118,10 @@ msgid "No devices detected" msgstr "Upptäckte inga enheter" msgid "Number of times to send requests (default 1)" -msgstr "" +msgstr "Antalet gånger att skicka förfrågningar (1 är standard)" msgid "OUI Owner" -msgstr "" +msgstr "OUI-ägare" msgid "" "Override the information returned by the MAC to Device Info Script (mac-to-" @@ -129,13 +129,13 @@ msgid "" msgstr "" msgid "Perform Scans (this can take a few minutes)" -msgstr "" +msgstr "Utför skanningar (det här kan ta ett par minuter)" msgid "Phone Information" msgstr "Information om telefon" msgid "Phone Scan" -msgstr "Skanning av telefon" +msgstr "Skanna telefon" msgid "Phone Scanning Configuration" msgstr "Konfiguration av skanning i telefon" @@ -156,7 +156,7 @@ msgid "Repeat Scans (this can take a few minutes)" msgstr "Repetera skanningar (det här kan ta några minuter)" msgid "SIP Device Information" -msgstr "" +msgstr "Information om SIP-enhet" msgid "SIP Device Scan" msgstr "" @@ -195,7 +195,7 @@ msgid "Time to wait for responses in seconds (default 10)" msgstr "Tid att vänta på svar i sekunder (standard 10)" msgid "Timeout" -msgstr "" +msgstr "Avbrott" msgid "Use Configuration" msgstr "Använd konfiguration" diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/controller/dnscrypt-proxy.lua b/applications/luci-app-dnscrypt-proxy/luasrc/controller/dnscrypt-proxy.lua index 6d6790a839..9f6472e7de 100644 --- a/applications/luci-app-dnscrypt-proxy/luasrc/controller/dnscrypt-proxy.lua +++ b/applications/luci-app-dnscrypt-proxy/luasrc/controller/dnscrypt-proxy.lua @@ -17,8 +17,8 @@ function index() entry({"admin", "services", "dnscrypt-proxy", "advanced"}, firstchild(), _("Advanced"), 100) entry({"admin", "services", "dnscrypt-proxy", "advanced", "configuration"}, cbi("dnscrypt-proxy/configuration_tab"), _("Edit DNSCrypt-Proxy Configuration"), 110).leaf = true entry({"admin", "services", "dnscrypt-proxy", "advanced", "cfg_dnsmasq"}, cbi("dnscrypt-proxy/cfg_dnsmasq_tab"), _("Edit Dnsmasq Configuration"), 120).leaf = true - entry({"admin", "services", "dnscrypt-proxy", "advanced", "view_reslist"}, call("view_reslist"), _("View Resolver List"), 130).leaf = true - + entry({"admin", "services", "dnscrypt-proxy", "advanced", "cfg_resolvcrypt"}, cbi("dnscrypt-proxy/cfg_resolvcrypt_tab"), _("Edit Resolvcrypt Configuration"), 130).leaf = true + entry({"admin", "services", "dnscrypt-proxy", "advanced", "view_reslist"}, call("view_reslist"), _("View Resolver List"), 140).leaf = true end function view_reslist() @@ -27,6 +27,12 @@ function view_reslist() end function logread() - local logfile = util.trim(util.exec("logread -e 'dnscrypt-proxy'")) + local logfile + + if nixio.fs.access("/var/log/messages") then + logfile = util.trim(util.exec("cat /var/log/messages | grep 'dnscrypt-proxy'")) + else + logfile = util.trim(util.exec("logread -e 'dnscrypt-proxy'")) + end templ.render("dnscrypt-proxy/logread", {title = i18n.translate("DNSCrypt-Proxy Logfile"), content = logfile}) end diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_dnsmasq_tab.lua b/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_dnsmasq_tab.lua index d22abbfd39..6e75ac9f97 100644 --- a/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_dnsmasq_tab.lua +++ b/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_dnsmasq_tab.lua @@ -7,6 +7,8 @@ local uci_input = "/etc/config/dhcp" if not nxfs.access(uci_input) then m = SimpleForm("error", nil, translate("Input file not found, please check your configuration.")) + m.reset = false + m.submit = false return m end diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_resolvcrypt_tab.lua b/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_resolvcrypt_tab.lua new file mode 100644 index 0000000000..f172b15f81 --- /dev/null +++ b/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_resolvcrypt_tab.lua @@ -0,0 +1,39 @@ +-- Copyright 2017 Dirk Brenken (dev@brenken.org) +-- This is free software, licensed under the Apache License, Version 2.0 + +local nxfs = require("nixio.fs") +local util = require("luci.util") +local res_input = "/etc/resolv-crypt.conf" + +if not nxfs.access(res_input) then + m = SimpleForm("error", nil, translate("Input file not found, please check your configuration.")) + m.reset = false + m.submit = false + return m +end + +m = SimpleForm("input", nil) +m:append(Template("dnscrypt-proxy/config_css")) +m.submit = translate("Save") +m.reset = false + +s = m:section(SimpleSection, nil, + translate("This form allows you to modify the content of the resolv-crypt configuration file (/etc/resolv-crypt.conf).")) + +f = s:option(TextValue, "data") +f.rows = 20 +f.rmempty = true + +function f.cfgvalue() + return nxfs.readfile(res_input) or "" +end + +function f.write(self, section, data) + return nxfs.writefile(res_input, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n") +end + +function s.handle(self, state, data) + return true +end + +return m diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/overview_tab.lua b/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/overview_tab.lua index 7ab84ab7fa..368c6673ad 100644 --- a/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/overview_tab.lua +++ b/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/overview_tab.lua @@ -11,15 +11,16 @@ local plug_cnt = tonumber(luci.sys.exec("env -i /usr/sbin/dnscrypt-proxy --vers local res_list = {} local url = "https://download.dnscrypt.org/dnscrypt-proxy/dnscrypt-resolvers.csv" -if not fs.access("/lib/libustream-ssl.so") then - m = SimpleForm("error", nil, translate("SSL support not available, please install an libustream-ssl variant to use this package.")) - m.submit = false - m.reset = false - return m -end - if not fs.access(res_input) then - luci.sys.call("env -i /bin/uclient-fetch --no-check-certificate -O " .. res_input .. " " .. url .. " >/dev/null 2>&1") + if not fs.access("/lib/libustream-ssl.so") then + m = SimpleForm("error", nil, translate("No default resolver list and no SSL support available.<br />") + .. translate("Please install a resolver list to '/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv' to use this package.")) + m.submit = false + m.reset = false + return m + else + luci.sys.call("env -i /bin/uclient-fetch --no-check-certificate -O " .. res_input .. " " .. url .. " >/dev/null 2>&1") + end end if not uci:get_first("dnscrypt-proxy", "global") then @@ -29,23 +30,64 @@ if not uci:get_first("dnscrypt-proxy", "global") then end for line in io.lines(res_input) do - local name = line:match("^[%w_.-]*") - res_list[#res_list + 1] = { name = name } + local name, + location, + dnssec, + nolog = line:match("^([^,]+),.-,\".-\",\"*(.-)\"*,.-,[0-9],\"*([yesno]+)\"*,\"*([yesno]+)\"*,.*") + if name ~= "" and name ~= "Name" then + if location == "" then + location = "-" + end + if dnssec == "" then + dnssec = "-" + end + if nolog == "" then + nolog = "-" + end + res_list[#res_list + 1] = { name = name, location = location, dnssec = dnssec, nolog = nolog } + end end m = Map("dnscrypt-proxy", translate("DNSCrypt-Proxy"), translate("Configuration of the DNSCrypt-Proxy package. ") - .. translate("Keep in mind to configure Dnsmasq as well. ") .. translatef("For further information " .. "<a href=\"%s\" target=\"_blank\">" .. "see the wiki online</a>", "https://wiki.openwrt.org/inbox/dnscrypt")) +m:chain("dhcp") function m.on_after_commit(self) - luci.sys.call("env -i /etc/init.d/dnsmasq restart >/dev/null 2>&1") + function d1.validate(self, value, s1) + if value == "1" then + uci:commit("dnscrypt-proxy") + uci:set("dhcp", s1, "noresolv", 1) + if not fs.access("/etc/resolv-crypt.conf") or nixio.fs.stat("/etc/resolv-crypt.conf").size == 0 then + uci:set("dhcp", s1, "resolvfile", "/tmp/resolv.conf.auto") + else + uci:set("dhcp", s1, "resolvfile", "/etc/resolv-crypt.conf") + end + local server_list = {} + local cnt = 1 + uci:foreach("dnscrypt-proxy", "dnscrypt-proxy", function(s) + server_list[cnt] = s['address'] .. "#" .. s['port'] + cnt = cnt + 1 + end) + server_list[cnt] = "/pool.ntp.org/8.8.8.8" + uci:set_list("dhcp", s1, "server", server_list) + if cnt > 2 then + uci:set("dhcp", s1, "allservers", 1) + else + uci:set("dhcp", s1, "allservers", 0) + end + uci:save("dhcp") + uci:commit("dhcp") + end + return value + end luci.sys.call("env -i /etc/init.d/dnscrypt-proxy restart >/dev/null 2>&1") + luci.sys.call("env -i /etc/init.d/dnsmasq restart >/dev/null 2>&1") end -s = m:section(TypedSection, "global", translate("General options")) +s = m:section(TypedSection, "global", translate("General Options")) s.anonymous = true -- Main dnscrypt-proxy resource list @@ -62,21 +104,53 @@ o3 = s:option(DummyValue, "", translate("File Checksum")) o3.template = "dnscrypt-proxy/res_options" o3.value = luci.sys.exec("sha256sum " .. res_input .. " | awk '{print $1}'") -btn = s:option(Button, "", translate("Refresh Resolver List")) -btn.inputtitle = translate("Refresh List") -btn.inputstyle = "apply" -btn.disabled = false -function btn.write(self, section, value) - luci.sys.call("env -i /bin/uclient-fetch --no-check-certificate -O " .. res_input .. " " .. url .. " >/dev/null 2>&1") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "dnscrypt-proxy")) +if fs.access("/lib/libustream-ssl.so") then + btn1 = s:option(Button, "", translate("Refresh Resolver List"), + translate("Download the current resolver list from 'download.dnscrypt.org'.")) + btn1.inputtitle = translate("Refresh List") + btn1.inputstyle = "apply" + btn1.disabled = false + function btn1.write() + luci.sys.call("env -i /bin/uclient-fetch --no-check-certificate -O " .. res_input .. " " .. url .. " >/dev/null 2>&1") + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "dnscrypt-proxy")) + end +else + btn1 = s:option(Button, "", translate("Refresh Resolver List"), + translate("No SSL support available.<br />") + .. translate("Please install a 'libustream-ssl' library to download the current resolver list from 'download.dnscrypt.org'.")) + btn1.inputtitle = translate("-------") + btn1.inputstyle = "button" + btn1.disabled = true +end + +if not fs.access("/etc/resolv-crypt.conf") or nixio.fs.stat("/etc/resolv-crypt.conf").size == 0 then + btn2 = s:option(Button, "", translate("Create Custom Config File"), + translate("Create '/etc/resolv-crypt.conf' with 'options timeout:1' to reduce DNS upstream timeouts with multiple DNSCrypt instances.<br />") + .. translatef("For further information " + .. "<a href=\"%s\" target=\"_blank\">" + .. "see the wiki online</a>", "https://wiki.openwrt.org/inbox/dnscrypt")) + btn2.inputtitle = translate("Create Config File") + btn2.inputstyle = "apply" + btn2.disabled = false + function btn2.write() + luci.sys.call("env -i echo 'options timeout:1' > '/etc/resolv-crypt.conf'") + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "dnscrypt-proxy")) + end +else + btn2 = s:option(Button, "", translate("Create Custom Config File"), + translate("The config file '/etc/resolv-crypt.conf' already exist.<br />") + .. translate("Please edit the file manually in the 'Advanced' section.")) + btn2.inputtitle = translate("-------") + btn2.inputstyle = "button" + btn2.disabled = true end -- Trigger settings -t = s:option(DynamicList, "procd_trigger", translate("Startup Trigger"), - translate("By default the DNSCrypt-Proxy startup will be triggered by ifup events of multiple network interfaces. ") - .. translate("To restrict the trigger, add only the relevant network interface(s). ") - .. translate("Usually the 'wan' interface should work for most users.")) +t = s:option(ListValue, "procd_trigger", translate("Startup Trigger"), + translate("By default the DNSCrypt-Proxy startup will be triggered by ifup events of 'All' available network interfaces.<br />") + .. translate("To restrict the trigger, select only the relevant network interface. Usually the 'wan' interface should work for most users.")) +t:value("", "All") if dump then local i, v for i, v in ipairs(dump.interface) do @@ -85,57 +159,38 @@ if dump then end end end +t.default = procd_trigger or "All" t.rmempty = true --- Extra options - -ds = s:option(DummyValue, "_dummy", translate("Extra options"), - translate("Options for further tweaking in case the defaults are not suitable for you.")) -ds.template = "cbi/nullsection" - -btn = s:option(Button, "", translate("Create custom config file"), - translate("Create '/etc/resolv-crypt.conf' with 'options timeout:1' to reduce DNS upstream timeouts with multiple DNSCrypt instances. ") - .. translatef("For further information " - .. "<a href=\"%s\" target=\"_blank\">" - .. "see the wiki online</a>", "https://wiki.openwrt.org/inbox/dnscrypt")) -btn.inputtitle = translate("Create Config File") -btn.inputstyle = "apply" -btn.disabled = false -function btn.write(self, section, value) - if not fs.access("/etc/resolv-crypt.conf") then - luci.sys.call("env -i echo 'options timeout:1' > '/etc/resolv-crypt.conf'") - end -end - -- Mandatory options per instance -s = m:section(TypedSection, "dnscrypt-proxy", translate("Instance options")) +s = m:section(TypedSection, "dnscrypt-proxy", translate("Instance Options")) s.anonymous = true s.addremove = true -o1 = s:option(Value, "address", translate("IP Address"), +i1 = s:option(Value, "address", translate("IP Address"), translate("The local IPv4 or IPv6 address. The latter one should be specified within brackets, e.g. '[::1]'.")) -o1.default = address or "127.0.0.1" -o1.rmempty = false +i1.default = address or "127.0.0.1" +i1.rmempty = false -o2 = s:option(Value, "port", translate("Port"), +i2 = s:option(Value, "port", translate("Port"), translate("The listening port for DNS queries.")) -o2.datatype = "port" -o2.default = port -o2.rmempty = false - -o3 = s:option(ListValue, "resolver", translate("Resolver"), - translate("Name of the remote DNS service for resolving queries.")) -o3.datatype = "hostname" -o3.widget = "select" +i2.datatype = "port" +i2.default = port +i2.rmempty = false + +i3 = s:option(ListValue, "resolver", translate("Resolver (LOC/SEC/NOLOG)"), + translate("Name of the remote DNS service for resolving queries incl. Location, DNSSEC- and NOLOG-Flag.")) +i3.datatype = "hostname" +i3.widget = "select" local i, v for i, v in ipairs(res_list) do - if v.name ~= "Name" then - o3:value(v.name) + if v.name then + i3:value(v.name, v.name .. " (" .. v.location .. "/" .. v.dnssec .. "/" .. v.nolog .. ")") end end -o3.default = resolver -o3.rmempty = false +i3.default = resolver +i3.rmempty = false -- Extra options per instance @@ -174,4 +229,17 @@ if plug_cnt > 0 then e6.optional = true end -return m +-- Dnsmasq options + +m1 = Map("dhcp") + +s1 = m1:section(TypedSection, "dnsmasq", translate("Dnsmasq Options")) +s1.anonymous = true + +d1 = s1:option(Flag, "", translate("Transfer Options To Dnsmasq"), + translate("Apply DNSCrypt-Proxy specific settings to the Dnsmasq configuration.<br />") + .. translate("Please note: This may change the values for 'noresolv', 'resolvfile', 'allservers' and the list 'server' settings.")) +d1.default = d1.enabled +d1.rmempty = false + +return m, m1 diff --git a/applications/luci-app-dnscrypt-proxy/po/ja/dnscrypt-proxy.po b/applications/luci-app-dnscrypt-proxy/po/ja/dnscrypt-proxy.po index 0328df2279..2cd01c019e 100644 --- a/applications/luci-app-dnscrypt-proxy/po/ja/dnscrypt-proxy.po +++ b/applications/luci-app-dnscrypt-proxy/po/ja/dnscrypt-proxy.po @@ -7,17 +7,24 @@ msgstr "" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.3\n" +"X-Generator: Poedit 2.0.4\n" "Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" "Plural-Forms: nplurals=1; plural=0;\n" "Language: ja\n" +msgid "-------" +msgstr "(利用不可)" + msgid "Advanced" msgstr "詳細" msgid "Alternate Resolver List" msgstr "代替 リゾルバ リスト" +msgid "" +"Apply DNSCrypt-Proxy specific settings to the Dnsmasq configuration.<br />" +msgstr "Dnsmasq の構成に、DNSCrypt-Proxy を指定する設定を適用します。<br />" + msgid "Blacklist" msgstr "ブラックリスト" @@ -26,26 +33,26 @@ msgstr "IPv6 のブロック" msgid "" "By default the DNSCrypt-Proxy startup will be triggered by ifup events of " -"multiple network interfaces." +"'All' available network interfaces.<br />" msgstr "" -"デフォルトでは、 DNSCrypt-Proxy は全ネットワーク インターフェースの ifup イベ" -"ントによりトリガされ起動します。" +"デフォルトでは、 DNSCrypt-Proxy は利用可能な全ネットワーク インターフェース" +"の ifup イベントによりトリガされ起動します。<br />" msgid "Configuration of the DNSCrypt-Proxy package." msgstr "DNSCrypt-Proxy パッケージの設定です。" msgid "" "Create '/etc/resolv-crypt.conf' with 'options timeout:1' to reduce DNS " -"upstream timeouts with multiple DNSCrypt instances." +"upstream timeouts with multiple DNSCrypt instances.<br />" msgstr "" "複数の DNSCrypt インスタンスで DNS アップストリーム タイムアウトの設定値を共" "用するため、 'options timeout:1' を含めた '/etc/resolv-crypt.conf' を作成しま" -"す。" +"す。<br />" msgid "Create Config File" msgstr "設定ファイルの作成" -msgid "Create custom config file" +msgid "Create Custom Config File" msgstr "カスタム設定ファイルの作成" msgid "DNS Query Logfile" @@ -66,21 +73,28 @@ msgstr "デフォルト リゾルバ リスト" msgid "Disable IPv6 to speed up DNSCrypt-Proxy." msgstr "DNSCrypt-Proxy の高速化のため、IPv6 を無効化します。" +msgid "Dnsmasq Options" +msgstr "Dnsmasq オプション" + +msgid "Download the current resolver list from 'download.dnscrypt.org'." +msgstr "" +"現在のリゾルバ リストを 'download.dnscrypt.org' からダウンロードします。" + msgid "Edit DNSCrypt-Proxy Configuration" msgstr "DNSCrypt-Proxy 設定の編集" msgid "Edit Dnsmasq Configuration" msgstr "Dnsmasq 設定の編集" +msgid "Edit Resolvcrypt Configuration" +msgstr "Resolvcrypt 設定の編集" + msgid "Enable Caching to speed up DNSCcrypt-Proxy." msgstr "DNSCrypt-Proxy の高速化のため、キャッシュ機能を有効化します。" msgid "Ephemeral Keys" msgstr "一時的なキー" -msgid "Extra options" -msgstr "拡張オプション" - msgid "File Checksum" msgstr "ファイル チェックサム" @@ -94,8 +108,8 @@ msgstr "" "詳細な情報は <a href=\"%s\" target=\"_blank\">オンライン Wiki</a> を確認して" "ください。" -msgid "General options" -msgstr "全般設定" +msgid "General Options" +msgstr "全般オプション" msgid "IP Address" msgstr "IP アドレス" @@ -107,12 +121,9 @@ msgstr "" msgid "Input file not found, please check your configuration." msgstr "入力ファイルが見つかりません。設定を確認してください。" -msgid "Instance options" +msgid "Instance Options" msgstr "インスタンス オプション" -msgid "Keep in mind to configure Dnsmasq as well." -msgstr "Dnsmasq を適切に設定する必要があることに留意してください。" - msgid "Local Cache" msgstr "ローカル キャッシュ" @@ -129,16 +140,47 @@ msgstr "" "受信した DNS クエリをファイルに記録します。これにより、ネットワークで何が起き" "ているかをリアルタイムに把握することが可能です。" -msgid "Name of the remote DNS service for resolving queries." -msgstr "クエリの名前解決を行う、リモートの DNS サービス名です。" - msgid "" -"Options for further tweaking in case the defaults are not suitable for you." -msgstr "デフォルト設定が適切でない場合、追加で設定するためのオプションです。" +"Name of the remote DNS service for resolving queries incl. Location, DNSSEC- " +"and NOLOG-Flag." +msgstr "" +"クエリの名前解決を行う、ロケーション, DNSSECの有無, NOLOG フラグを含めたリ" +"モート DNS サービスの名前です。" + +msgid "No SSL support available.<br />" +msgstr "利用可能な SSL サポートがありません。<br />" + +msgid "No default resolver list and no SSL support available.<br />" +msgstr "" +"デフォルトのリゾルバ リストと、利用可能な SSL サポートがありません。<br />" msgid "Overview" msgstr "概要" +msgid "Please edit the file manually in the 'Advanced' section." +msgstr "'詳細' タブで手動でファイルを編集してください。" + +msgid "" +"Please install a 'libustream-ssl' library to download the current resolver " +"list from 'download.dnscrypt.org'." +msgstr "" +"現在のリゾルバ リストを 'download.dnscrypt.org' からダウンロードするために、 " +"'libustream-ssl' ライブラリをインストールしてください。" + +msgid "" +"Please install a resolver list to '/usr/share/dnscrypt-proxy/dnscrypt-" +"resolvers.csv' to use this package." +msgstr "" +"このパッケージを利用するには、リゾルバ リストを '/usr/share/dnscrypt-proxy/" +"dnscrypt-resolvers.csv' にインストールしてください。" + +msgid "" +"Please note: This may change the values for 'noresolv', 'resolvfile', " +"'allservers' and the list 'server' settings." +msgstr "" +"注: これは、 'noresolv' および 'resolvfile', 'allservers', 'list server' の設" +"定値を変更する場合があります。" + msgid "Port" msgstr "ポート" @@ -148,15 +190,8 @@ msgstr "リストのリフレッシュ" msgid "Refresh Resolver List" msgstr "リゾルバ リストのリフレッシュ" -msgid "Resolver" -msgstr "リゾルバ" - -msgid "" -"SSL support not available, please install an libustream-ssl variant to use " -"this package." -msgstr "" -"SSL サポートが利用できません。このパッケージを使用するには libustream-ssl 等" -"をインストールし、 SSL サポートを有効にしてください。" +msgid "Resolver (LOC/SEC/NOLOG)" +msgstr "リゾルバ(LOC/SEC/NOLOG)" msgid "Save" msgstr "保存" @@ -167,6 +202,9 @@ msgstr "デフォルトとは異なるリゾルバ リストを設定します msgid "Startup Trigger" msgstr "スタートアップ トリガ" +msgid "The config file '/etc/resolv-crypt.conf' already exist.<br />" +msgstr "設定ファイル '/etc/resolv-crypt.conf' は既に存在しています。<br />" + msgid "The listening port for DNS queries." msgstr "DNS クエリを待ち受けるポートです。" @@ -199,6 +237,13 @@ msgstr "" "このフォームでは、メインの Dnsmasq 設定ファイル (/etc/config/dhcp) の内容を変" "更することができます。" +msgid "" +"This form allows you to modify the content of the resolv-crypt configuration " +"file (/etc/resolv-crypt.conf)." +msgstr "" +"このフォームでは、 resolv-crypt 設定ファイル(/etc/resolv-crypt.conf)の内容" +"を変更することができます。" + msgid "This form shows the content of the current DNSCrypt Resolver List." msgstr "" "このフォームには、現在の DNSCrypt リゾルバ リストの内容が表示されます。" @@ -217,13 +262,15 @@ msgstr "" "このオプションは、通常よりも CPU リソースを多く使用するほか、ほとんどの " "DNSCrypt サーバーでは不要なものです。" -msgid "To restrict the trigger, add only the relevant network interface(s)." +msgid "" +"To restrict the trigger, select only the relevant network interface. Usually " +"the 'wan' interface should work for most users." msgstr "" -"トリガを限定するには、適切なネットワーク インターフェースのみを追加してくださ" -"い。" +"トリガを限定するには、適切なインターフェースを選択してください。通常、 'wan' " +"インターフェースがほとんどのユーザーに適しています。" -msgid "Usually the 'wan' interface should work for most users." -msgstr "通常、 'wan' インターフェースがほとんどのユーザーに適しています。" +msgid "Transfer Options To Dnsmasq" +msgstr "Dnsmasq の転送オプション" msgid "View Logfile" msgstr "ログファイルの確認" diff --git a/applications/luci-app-dnscrypt-proxy/po/templates/dnscrypt-proxy.pot b/applications/luci-app-dnscrypt-proxy/po/templates/dnscrypt-proxy.pot index ea83e7a184..59bded87b8 100644 --- a/applications/luci-app-dnscrypt-proxy/po/templates/dnscrypt-proxy.pot +++ b/applications/luci-app-dnscrypt-proxy/po/templates/dnscrypt-proxy.pot @@ -1,12 +1,19 @@ msgid "" msgstr "Content-Type: text/plain; charset=UTF-8" +msgid "-------" +msgstr "" + msgid "Advanced" msgstr "" msgid "Alternate Resolver List" msgstr "" +msgid "" +"Apply DNSCrypt-Proxy specific settings to the Dnsmasq configuration.<br />" +msgstr "" + msgid "Blacklist" msgstr "" @@ -15,7 +22,7 @@ msgstr "" msgid "" "By default the DNSCrypt-Proxy startup will be triggered by ifup events of " -"multiple network interfaces." +"'All' available network interfaces.<br />" msgstr "" msgid "Configuration of the DNSCrypt-Proxy package." @@ -23,13 +30,13 @@ msgstr "" msgid "" "Create '/etc/resolv-crypt.conf' with 'options timeout:1' to reduce DNS " -"upstream timeouts with multiple DNSCrypt instances." +"upstream timeouts with multiple DNSCrypt instances.<br />" msgstr "" msgid "Create Config File" msgstr "" -msgid "Create custom config file" +msgid "Create Custom Config File" msgstr "" msgid "DNS Query Logfile" @@ -50,19 +57,25 @@ msgstr "" msgid "Disable IPv6 to speed up DNSCrypt-Proxy." msgstr "" +msgid "Dnsmasq Options" +msgstr "" + +msgid "Download the current resolver list from 'download.dnscrypt.org'." +msgstr "" + msgid "Edit DNSCrypt-Proxy Configuration" msgstr "" msgid "Edit Dnsmasq Configuration" msgstr "" -msgid "Enable Caching to speed up DNSCcrypt-Proxy." +msgid "Edit Resolvcrypt Configuration" msgstr "" -msgid "Ephemeral Keys" +msgid "Enable Caching to speed up DNSCcrypt-Proxy." msgstr "" -msgid "Extra options" +msgid "Ephemeral Keys" msgstr "" msgid "File Checksum" @@ -76,7 +89,7 @@ msgid "" "online</a>" msgstr "" -msgid "General options" +msgid "General Options" msgstr "" msgid "IP Address" @@ -88,10 +101,7 @@ msgstr "" msgid "Input file not found, please check your configuration." msgstr "" -msgid "Instance options" -msgstr "" - -msgid "Keep in mind to configure Dnsmasq as well." +msgid "Instance Options" msgstr "" msgid "Local Cache" @@ -106,16 +116,38 @@ msgid "" "is happening on the network." msgstr "" -msgid "Name of the remote DNS service for resolving queries." +msgid "" +"Name of the remote DNS service for resolving queries incl. Location, DNSSEC- " +"and NOLOG-Flag." msgstr "" -msgid "" -"Options for further tweaking in case the defaults are not suitable for you." +msgid "No SSL support available.<br />" +msgstr "" + +msgid "No default resolver list and no SSL support available.<br />" msgstr "" msgid "Overview" msgstr "" +msgid "Please edit the file manually in the 'Advanced' section." +msgstr "" + +msgid "" +"Please install a 'libustream-ssl' library to download the current resolver " +"list from 'download.dnscrypt.org'." +msgstr "" + +msgid "" +"Please install a resolver list to '/usr/share/dnscrypt-proxy/dnscrypt-" +"resolvers.csv' to use this package." +msgstr "" + +msgid "" +"Please note: This may change the values for 'noresolv', 'resolvfile', " +"'allservers' and the list 'server' settings." +msgstr "" + msgid "Port" msgstr "" @@ -125,12 +157,7 @@ msgstr "" msgid "Refresh Resolver List" msgstr "" -msgid "Resolver" -msgstr "" - -msgid "" -"SSL support not available, please install an libustream-ssl variant to use " -"this package." +msgid "Resolver (LOC/SEC/NOLOG)" msgstr "" msgid "Save" @@ -142,6 +169,9 @@ msgstr "" msgid "Startup Trigger" msgstr "" +msgid "The config file '/etc/resolv-crypt.conf' already exist.<br />" +msgstr "" + msgid "The listening port for DNS queries." msgstr "" @@ -165,6 +195,11 @@ msgid "" "file (/etc/config/dhcp)." msgstr "" +msgid "" +"This form allows you to modify the content of the resolv-crypt configuration " +"file (/etc/resolv-crypt.conf)." +msgstr "" + msgid "This form shows the content of the current DNSCrypt Resolver List." msgstr "" @@ -178,10 +213,12 @@ msgid "" "server." msgstr "" -msgid "To restrict the trigger, add only the relevant network interface(s)." +msgid "" +"To restrict the trigger, select only the relevant network interface. Usually " +"the 'wan' interface should work for most users." msgstr "" -msgid "Usually the 'wan' interface should work for most users." +msgid "Transfer Options To Dnsmasq" msgstr "" msgid "View Logfile" diff --git a/applications/luci-app-fwknopd/root/etc/uci-defaults/40_luci-fwknopd b/applications/luci-app-fwknopd/root/etc/uci-defaults/40_luci-fwknopd index 65ef012450..9e5057e701 100644 --- a/applications/luci-app-fwknopd/root/etc/uci-defaults/40_luci-fwknopd +++ b/applications/luci-app-fwknopd/root/etc/uci-defaults/40_luci-fwknopd @@ -3,6 +3,7 @@ #-- Licensed to the public under the GNU General Public License v2. . /lib/functions/network.sh +[ "$(uci -q get fwknopd.@access[0].KEY)" != "CHANGEME" ] && exit 0 uci batch <<EOF add ucitrack fwknopd set ucitrack.@fwknopd[-1].init=fwknopd diff --git a/applications/luci-app-fwknopd/root/usr/sbin/gen-qr.sh b/applications/luci-app-fwknopd/root/usr/sbin/gen-qr.sh index abca5d3e5a..48850bd361 100644 --- a/applications/luci-app-fwknopd/root/usr/sbin/gen-qr.sh +++ b/applications/luci-app-fwknopd/root/usr/sbin/gen-qr.sh @@ -4,23 +4,23 @@ if [ "$1" != "" ]; then entry_num=$1 fi -key_base64=$(uci get fwknopd.@access[$entry_num].KEY_BASE64) -key=$(uci get fwknopd.@access[$entry_num].KEY) -hmac_key_base64=$(uci get fwknopd.@access[$entry_num].HMAC_KEY_BASE64) -hmac_key=$(uci get fwknopd.@access[$entry_num].HMAC_KEY) +key_base64=$(uci -q get fwknopd.@access[$entry_num].KEY_BASE64) +key=$(uci -q get fwknopd.@access[$entry_num].KEY) +hmac_key_base64=$(uci -q get fwknopd.@access[$entry_num].HMAC_KEY_BASE64) +hmac_key=$(uci -q get fwknopd.@access[$entry_num].HMAC_KEY) -if [ $key_base64 != "" ]; then +if [ "$key_base64" != "" ]; then qr="KEY_BASE64:$key_base64" fi -if [ $key != "" ]; then +if [ "$key" != "" ]; then qr="$qr KEY:$key" fi -if [ $hmac_key_base64 != "" ]; then +if [ "$hmac_key_base64" != "" ]; then qr="$qr HMAC_KEY_BASE64:$hmac_key_base64" fi -if [ $hmac_key != "" ]; then +if [ "$hmac_key" != "" ]; then qr="$qr HMAC_KEY:$hmac_key" fi -qrencode -o - "$qr" +qrencode -t svg -I -o - "$qr" diff --git a/applications/luci-app-noddos/Makefile b/applications/luci-app-noddos/Makefile new file mode 100644 index 0000000000..4c2b9044a9 --- /dev/null +++ b/applications/luci-app-noddos/Makefile @@ -0,0 +1,18 @@ +# Copyright (C) 2017 Steven Hessing (steven.hessing@gmail.com) +# Based on initial implementation by Stan Grishin (stangri@melmac.net) +# This is free software, licensed under the GNU General Public License v3. + +include $(TOPDIR)/rules.mk + +PKG_LICENSE:=GPLv3 +PKG_MAINTAINER:=Steven Hessing <steven.hessing@gmail.com> + +LUCI_TITLE:=Noddos Service Web UI +LUCI_DESCRIPTION:=Provides Web UI for Noddos service. +LUCI_DEPENDS:=+luci +noddos +LUCI_PKGARCH:=all +PKG_RELEASE:=1 + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-noddos/htdocs/cgi-bin/clientdetails b/applications/luci-app-noddos/htdocs/cgi-bin/clientdetails new file mode 100755 index 0000000000..6ff4ce59f2 --- /dev/null +++ b/applications/luci-app-noddos/htdocs/cgi-bin/clientdetails @@ -0,0 +1,91 @@ +#!/usr/bin/lua + +-- clientdetails.lua : Provides details about client devices discovered by Noddos +-- Copyright (C) 2017 Steven Hessing (steven.hessing@gmail.com) +-- This is free software, licensed under the GNU General Public License v3. + +require "nixio.fs" + +print ("Content-type: Text/html\n") +local info = os.getenv("QUERY_STRING") + +local params = {} +local echo = {} + +function print_row(key) + print ("<tr><th>") + print (key) + print ("</th><td>") + print (device[key]) + print ("</td></tr>") +end + +for name, value in string.gmatch(info .. '&', '(.-)%=(.-)%&') do + value = string.gsub(value , '%+', ' ') + value = string.gsub(value , '%%(%x%x)', function(dpc) + return string.char(tonumber(dpc,16)) + end ) + params[name] = value + + value = string.gsub(value, "%&", "&") + value = string.gsub(value, "%<", "<") + value = string.gsub(value, '%"', """) + echo[name] = value +end + +device = {} +profile = {} + +if nixio.fs.access("/var/lib/noddos/DeviceDump.json") then + io.input("/var/lib/noddos/DeviceDump.json") + local t = io.read("*all") + local json = require "luci.jsonc" + local devdump = json.parse(t) + for i, v in ipairs(devdump) do + if v.MacAddress == params["mac"] then + device = v + end + end + io.input("/var/lib/noddos/DeviceProfiles.json") + t = io.read("*all") + local temp = json.parse(t) + for i, v in ipairs(temp) do + if device.DeviceProfileUuid == v.DeviceProfileUuid then + profile = v + end + end +end +pagetop = [[ +<html> + <head> + <title>Client Details by Noddos</title> + <meta charset="utf-8"> + <!--[if lt IE 9]><script src="/luci-static/bootstrap/html5.js?v=git-17.100.70571-29fabe2"></script><![endif]--> + <meta name="viewport" content="initial-scale=1.0"> + <link rel="stylesheet" href="/luci-static/bootstrap/cascade.css?v=git-17.100.70571-29fabe2"> + <link rel="stylesheet" media="only screen and (max-device-width: 854px)" href="/luci-static/bootstrap/mobile.css?v=git-17.100.70571-29fabe2" type="text/css" /> + <link rel="shortcut icon" href="/luci-static/bootstrap/favicon.ico"> + <script src="/luci-static/resources/xhr.js?v=git-17.100.70571-29fabe2"></script> + </head> + <body text=blue> + <h1>Client Details</h1> +]] +print (pagetop) + +if params["mac"] ~= nil then + print ("<table>") + for i, key in ipairs{"MacAddress", "Ipv4Address", "Ipv6Address", "DeviceProfileUuid", "DhcpHostname", "DhcpVendor", "SsdpFriendlyName", "SsdpLocation", "SsdpManufacturer", "SsdpModelName", "SsdpModelUrl", "SsdpSerialNumber", "SsdpServer","SsdpUserAgent", "MdnsDeviceUrl", "MdnsHw", "MdnsManufacturer", "MdnsModelName", "MdnsOs", "WsDiscoveryTypes", "WsDiscoveryXaddrs", "DnsQueries"} do + print_row(key) + end + print ("</table>") +else + print ("no mac address specified") +end + +pagebase = [[<br><br> +Client Details by +<a href=http://www.noddos.io>Noddos</a> +</body></html> +]] + +print (pagebase) diff --git a/applications/luci-app-noddos/luasrc/controller/noddos.lua b/applications/luci-app-noddos/luasrc/controller/noddos.lua new file mode 100644 index 0000000000..c45e24bc97 --- /dev/null +++ b/applications/luci-app-noddos/luasrc/controller/noddos.lua @@ -0,0 +1,10 @@ +-- Copyright 2017 Steven Hessing (steven.hessing@gmail.com) +-- This is free software, licensed under the GNU General Public License v3. +-- /usr/lib/lua/luci/controller/noddos.lua + +module("luci.controller.noddos", package.seeall) +function index() + entry({"admin", "status", "noddos"}, template("noddos/clients"), _("Noddos Clients"), 3) + entry({"admin", "network", "noddos"}, cbi("noddos"), _("Noddos Client Tracking"), 55) +end + diff --git a/applications/luci-app-noddos/luasrc/model/cbi/noddos.lua b/applications/luci-app-noddos/luasrc/model/cbi/noddos.lua new file mode 100644 index 0000000000..3abb73bc66 --- /dev/null +++ b/applications/luci-app-noddos/luasrc/model/cbi/noddos.lua @@ -0,0 +1,46 @@ +-- Copyright 2017 Steven Hessing (steven.hessing@gmail.com) +-- This is free software, licensed under the GNU General Public License v3. +-- /usr/lib/lua/luci/model/cbi/noddos.lua + +m = Map("noddos", translate("Client Firewall"), + translate("Noddos controls traffic from the clients on your network to the Internet. " .. + "This helps protect your network, the bandwidth on your Internet connection and " .. + "the Internet")) + +s = m:section(TypedSection, "noddos", translate("Server Settings")) +s.anonymous = true +s.addremove = false + +s:option(Flag, "rfc1918", + translate("Private networks"), + translate("Report traffic to private networks (10/8, 172.16/12, 192.168/16, fd75:6b5d:352c:ed05::/64)")).default=false + +s:option(Flag, "upload", + translate("Upload anonimized traffic stats"), + translate("Uploading your statistics helps improving device recognition " .. + "and discovering hacked devices & botnets")) + +o = s:option(DynamicList, "whitelistipv4", + translate("Excluded IPv4 addresses"), + translate("Don't monitor these IPv4 addresses")) +o.optional = true +o.placeholder = "127.0.0.1 192.168.1.1" +o.delimiter = " " +o.datatype="list(ip4addr)" + +o = s:option(DynamicList, "whitelistipv6", + translate("Excluded IPv6 addresses"), + translate("Don't monitor these IPv6 addresses")) +o.optional = true +o.delimiter = " " +o.datatype="list(ip6addr)" + +o = s:option(DynamicList, "whitelistmac", + translate("Excluded MAC addresses"), + translate("Don't monitor these MAC addresses")) +o.optional = true +o.delimiter = " " +o.datatype="list(macaddr)" + +return m + diff --git a/applications/luci-app-noddos/luasrc/view/noddos/clients.htm b/applications/luci-app-noddos/luasrc/view/noddos/clients.htm new file mode 100644 index 0000000000..f2fb9312a7 --- /dev/null +++ b/applications/luci-app-noddos/luasrc/view/noddos/clients.htm @@ -0,0 +1,111 @@ +<%# + Copyright (C) 2017 Steven Hessing <steven.hessing@gmail.com> + This is free software, licensed under the GNU General Public License v3. + /usr/lib/lua/luci/view/clients.htm +-%> + +<%- + + require "nixio.fs" + require "os" + + local last_modified = "<boottime>" + local style = true + local v + local devdump + + if nixio.fs.access("/var/lib/noddos/DeviceDump.json") then + last_modified = os.date("%c", nixio.fs.stat("/var/lib/noddos/DeviceDump.json")['mtime']) + io.input("/var/lib/noddos/DeviceDump.json") + t = io.read("*all") + devdump = luci.jsonc.parse(t) + io.input("/var/lib/noddos/DeviceProfiles.json") + t = io.read("*all") + temp = luci.jsonc.parse(t) + devicevalues = {} + for i, v in ipairs(temp) do + devicevalues[v.DeviceProfileUuid] = v + end + end +-%> + +<%+header%> + +<div class="cbi-map" id="cbi-network"> + <h2 name="content"><%:Clients%></h2> + <div class="cbi-map-descr"><%:The following clients have been discovered on the network. The last discovery was completed at %><%=last_modified%></div> + + <fieldset class="cbi-section"> + <legend><%:Recognized Clients%></legend> + <div class="cbi-section-node"> + <table class="cbi-section-table"> + <tr class="cbi-section-table-titles"> + <th class="cbi-section-table-cell"><%:Hostname%></th> + <th class="cbi-section-table-cell"><%:IPv4%></th> + <th class="cbi-section-table-cell"><%:MAC%></th> + <th class="cbi-section-table-cell"><%:Manufacturer%></th> + <th class="cbi-section-table-cell"><%:Model%></th> + <th class="cbi-section-table-cell"><%:Class%></th> + </tr> + + <% + for i,v in ipairs(devdump) do + if v.DeviceProfileUuid ~= "" then + %> + <tr class="cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>"> + <td class="cbi-value-field"><%=v.Hostname%></td> + <td class="cbi-value-field"><%=v.Ipv4Address%></td> + <td class="cbi-value-field"><a href="/cgi-bin/clientdetails?mac=<%=v.MacAddress%>"><%=v.MacAddress%></a></td> + <td class="cbi-value-field"><%=devicevalues[v.DeviceProfileUuid].Manufacturer%></td> + <td class="cbi-value-field"><%=devicevalues[v.DeviceProfileUuid].Model%></td> + <td class="cbi-value-field"><%=devicevalues[v.DeviceProfileUuid].ThingClass%></td> + </tr> + <% + style=false + end + end + %> + </table> + </div> + </fieldset> + <br /> + <fieldset class="cbi-section"> + <legend><%:Unrecognized Clients%></legend> + <div class="cbi-section-node"> + <table class="cbi-section-table"> + <tr class="cbi-section-table-titles"> + <th class="cbi-section-table-cell"><%:Hostname%></th> + <th class="cbi-section-table-cell"><%:IPv4%></th> + <th class="cbi-section-table-cell"><%:MAC%></th> + <th class="cbi-section-table-cell"><%:Manufacturer%></th> + <th class="cbi-section-table-cell"><%:Model%></th> + <th class="cbi-section-table-cell"><%:DhcpVendor%></th> + <th class="cbi-section-table-cell"><%:DhcpHostname%></th> + </tr> + + <% + for i,v in ipairs(devdump) do + if v.DeviceProfileUuid == "" then + %> + <tr class="cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>"> + <td class="cbi-value-field"><%=v.Hostname%></td> + <td class="cbi-value-field"><%=v.Ipv4Address%></td> + <td class="cbi-value-field"><a href="/cgi-bin/clientdetails?mac=<%=v.MacAddress%>"><%=v.MacAddress%></a></td> + <td class="cbi-value-field"><%=v.SsdpManufacturer%></td> + <td class="cbi-value-field"><%=v.SsdpModelName%></td> + <td class="cbi-value-field"><%=v.DhcpVendor1%></td> + <td class="cbi-value-field"><%=v.DhcpHostname%></td> + </tr> + <% + style=false + end + end + %> + </table> + </div> + </fieldset> + +</div> + +<%+footer%> + diff --git a/applications/luci-app-noddos/po/ja/noddos.po b/applications/luci-app-noddos/po/ja/noddos.po new file mode 100644 index 0000000000..c6b461747f --- /dev/null +++ b/applications/luci-app-noddos/po/ja/noddos.po @@ -0,0 +1,111 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.4\n" +"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Language: ja\n" + +msgid "Class" +msgstr "クラス" + +msgid "Client Firewall" +msgstr "クライアント ファイアウォール" + +msgid "Clients" +msgstr "クライアント" + +msgid "DhcpHostname" +msgstr "DHCP ホスト名" + +msgid "DhcpVendor" +msgstr "DHCP ベンダー" + +msgid "Don't monitor these IPv4 addresses" +msgstr "これらの IPv4 アドレスを監視しません。" + +msgid "Don't monitor these IPv6 addresses" +msgstr "これらの IPv6 アドレスを監視しません。" + +msgid "Don't monitor these MAC addresses" +msgstr "これらの MAC アドレスを監視しません。" + +msgid "Excluded IPv4 addresses" +msgstr "除外する IPv4 アドレス" + +msgid "Excluded IPv6 addresses" +msgstr "除外する IPv6 アドレス" + +msgid "Excluded MAC addresses" +msgstr "除外する MAC アドレス" + +msgid "Hostname" +msgstr "ホスト名" + +msgid "IPv4" +msgstr "IPv4" + +msgid "MAC" +msgstr "MAC" + +msgid "Manufacturer" +msgstr "製造元" + +msgid "Model" +msgstr "モデル" + +msgid "Noddos Client Tracking" +msgstr "Noddos クライアント トラッキング" + +msgid "Noddos Clients" +msgstr "Noddos クライアント" + +msgid "" +"Noddos controls traffic from the clients on your network to the Internet. " +"This helps protect your network, the bandwidth on your Internet connection " +"and the Internet" +msgstr "" +"Noddos は、ネットワーク内のクライアントからインターネットへのトラフィックを制" +"御します。これは、ネットワークとインターネット接続の帯域幅、インターネットの" +"保護に役立ちます。" + +msgid "Private networks" +msgstr "プライベート ネットワーク" + +msgid "Recognized Clients" +msgstr "識別済クライアント" + +msgid "" +"Report traffic to private networks (10/8, 172.16/12, 192.168/16, " +"fd75:6b5d:352c:ed05::/64)" +msgstr "" +"プライベート ネットワークへのトラフィックについてのレポート(10/8, " +"172.16/12, 192.168/16, fd75:6b5d:352c:ed05::/64)" + +msgid "Server Settings" +msgstr "サーバー設定" + +msgid "" +"The following clients have been discovered on the network. The last " +"discovery was completed at" +msgstr "" +"以下のクライアントがネットワーク内で見つかりました。探索の最終実行日時:" + +msgid "Unrecognized Clients" +msgstr "未識別クライアント" + +msgid "Upload anonimized traffic stats" +msgstr "匿名トラフィック状況のアップロード" + +msgid "" +"Uploading your statistics helps improving device recognition and discovering " +"hacked devices & botnets" +msgstr "" +"デバイスの識別や、ハックされたデバイスとボットネットの発見の改善に役立てるた" +"め、統計をアップロードします。" diff --git a/applications/luci-app-noddos/po/templates/noddos.pot b/applications/luci-app-noddos/po/templates/noddos.pot new file mode 100644 index 0000000000..69d135770b --- /dev/null +++ b/applications/luci-app-noddos/po/templates/noddos.pot @@ -0,0 +1,92 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Class" +msgstr "" + +msgid "Client Firewall" +msgstr "" + +msgid "Clients" +msgstr "" + +msgid "DhcpHostname" +msgstr "" + +msgid "DhcpVendor" +msgstr "" + +msgid "Don't monitor these IPv4 addresses" +msgstr "" + +msgid "Don't monitor these IPv6 addresses" +msgstr "" + +msgid "Don't monitor these MAC addresses" +msgstr "" + +msgid "Excluded IPv4 addresses" +msgstr "" + +msgid "Excluded IPv6 addresses" +msgstr "" + +msgid "Excluded MAC addresses" +msgstr "" + +msgid "Hostname" +msgstr "" + +msgid "IPv4" +msgstr "" + +msgid "MAC" +msgstr "" + +msgid "Manufacturer" +msgstr "" + +msgid "Model" +msgstr "" + +msgid "Noddos Client Tracking" +msgstr "" + +msgid "Noddos Clients" +msgstr "" + +msgid "" +"Noddos controls traffic from the clients on your network to the Internet. " +"This helps protect your network, the bandwidth on your Internet connection " +"and the Internet" +msgstr "" + +msgid "Private networks" +msgstr "" + +msgid "Recognized Clients" +msgstr "" + +msgid "" +"Report traffic to private networks (10/8, 172.16/12, 192.168/16, " +"fd75:6b5d:352c:ed05::/64)" +msgstr "" + +msgid "Server Settings" +msgstr "" + +msgid "" +"The following clients have been discovered on the network. The last " +"discovery was completed at" +msgstr "" + +msgid "Unrecognized Clients" +msgstr "" + +msgid "Upload anonimized traffic stats" +msgstr "" + +msgid "" +"Uploading your statistics helps improving device recognition and discovering " +"hacked devices & botnets" +msgstr "" diff --git a/applications/luci-app-noddos/root/etc/uci-defaults/40_luci-noddos b/applications/luci-app-noddos/root/etc/uci-defaults/40_luci-noddos new file mode 100644 index 0000000000..17abbc41ca --- /dev/null +++ b/applications/luci-app-noddos/root/etc/uci-defaults/40_luci-noddos @@ -0,0 +1,14 @@ +#!/bin/sh + +# Copyright (C) 2017 Steven Hessing (steven.hessing@live.com) +# This is free software, licensed under the GNU General Public License v3 + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@noddos[-1] + add ucitrack noddos + set ucitrack.@noddos[-1].init=noddos + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua index 7865881cb6..dc7718217c 100644 --- a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua +++ b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua @@ -685,6 +685,10 @@ local knownParams = { "tls_auth", "/etc/openvpn/tlsauth.key", translate("Additional authentication over TLS") }, + { Value, + "tls_crypt", + "/etc/openvpn/tlscrypt.key", + translate("Encrypt and authenticate all control channel packets with the key") }, -- { Value, -- "askpass", -- "[file]", diff --git a/applications/luci-app-openvpn/po/ca/openvpn.po b/applications/luci-app-openvpn/po/ca/openvpn.po index 1b75fe6cd7..d756469078 100644 --- a/applications/luci-app-openvpn/po/ca/openvpn.po +++ b/applications/luci-app-openvpn/po/ca/openvpn.po @@ -199,6 +199,9 @@ msgstr "Activa la interfície de gestió a <em>IP</em> <em>port</em>" msgid "Enabled" msgstr "Activat" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "Xifra d'encriptació per paquets" diff --git a/applications/luci-app-openvpn/po/cs/openvpn.po b/applications/luci-app-openvpn/po/cs/openvpn.po index c68742217e..4fba010530 100644 --- a/applications/luci-app-openvpn/po/cs/openvpn.po +++ b/applications/luci-app-openvpn/po/cs/openvpn.po @@ -194,6 +194,9 @@ msgstr "" msgid "Enabled" msgstr "Povoleno" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "" diff --git a/applications/luci-app-openvpn/po/de/openvpn.po b/applications/luci-app-openvpn/po/de/openvpn.po index dc382ee44d..a203c92e79 100644 --- a/applications/luci-app-openvpn/po/de/openvpn.po +++ b/applications/luci-app-openvpn/po/de/openvpn.po @@ -197,6 +197,9 @@ msgstr "Administratorschnittstelle aktivieren" msgid "Enabled" msgstr "Einschalten" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "Verschlüsselungsalgorithmus für Pakete" diff --git a/applications/luci-app-openvpn/po/el/openvpn.po b/applications/luci-app-openvpn/po/el/openvpn.po index 2c787d816c..63dd8985a8 100644 --- a/applications/luci-app-openvpn/po/el/openvpn.po +++ b/applications/luci-app-openvpn/po/el/openvpn.po @@ -198,6 +198,9 @@ msgstr "" msgid "Enabled" msgstr "Ενεργοποιημένο" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "" diff --git a/applications/luci-app-openvpn/po/en/openvpn.po b/applications/luci-app-openvpn/po/en/openvpn.po index a5994dc292..51819f6b09 100644 --- a/applications/luci-app-openvpn/po/en/openvpn.po +++ b/applications/luci-app-openvpn/po/en/openvpn.po @@ -197,6 +197,9 @@ msgstr "Enable management interface on <em>IP</em> <em>port</em>" msgid "Enabled" msgstr "Enabled" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "Encrypt and authenticate all control channel packets with the key" + msgid "Encryption cipher for packets" msgstr "Encryption cipher for packets" diff --git a/applications/luci-app-openvpn/po/es/openvpn.po b/applications/luci-app-openvpn/po/es/openvpn.po index a5141831ce..819e7ee509 100644 --- a/applications/luci-app-openvpn/po/es/openvpn.po +++ b/applications/luci-app-openvpn/po/es/openvpn.po @@ -196,6 +196,9 @@ msgstr "Interfaz de gestión en <em>IP</em> <em>puerto</em>" msgid "Enabled" msgstr "Activado" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "Cifra de encriptación de paquetes" diff --git a/applications/luci-app-openvpn/po/fr/openvpn.po b/applications/luci-app-openvpn/po/fr/openvpn.po index e2f33dc164..331d1931e8 100644 --- a/applications/luci-app-openvpn/po/fr/openvpn.po +++ b/applications/luci-app-openvpn/po/fr/openvpn.po @@ -206,6 +206,9 @@ msgstr "Activer l'interface de gestion sur <em>IP</em> <em>port</em>" msgid "Enabled" msgstr "Activé" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "Méthode de chiffrement des paquets" diff --git a/applications/luci-app-openvpn/po/he/openvpn.po b/applications/luci-app-openvpn/po/he/openvpn.po index 3528444199..517da49080 100644 --- a/applications/luci-app-openvpn/po/he/openvpn.po +++ b/applications/luci-app-openvpn/po/he/openvpn.po @@ -192,6 +192,9 @@ msgstr "" msgid "Enabled" msgstr "" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "" diff --git a/applications/luci-app-openvpn/po/hu/openvpn.po b/applications/luci-app-openvpn/po/hu/openvpn.po index 1f9d691d04..67a8217b1a 100644 --- a/applications/luci-app-openvpn/po/hu/openvpn.po +++ b/applications/luci-app-openvpn/po/hu/openvpn.po @@ -196,6 +196,9 @@ msgstr "" msgid "Enabled" msgstr "Engedélyezve" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "" diff --git a/applications/luci-app-openvpn/po/it/openvpn.po b/applications/luci-app-openvpn/po/it/openvpn.po index 233c144c57..834015b8e8 100644 --- a/applications/luci-app-openvpn/po/it/openvpn.po +++ b/applications/luci-app-openvpn/po/it/openvpn.po @@ -198,6 +198,9 @@ msgstr "" msgid "Enabled" msgstr "Abilitato" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "" diff --git a/applications/luci-app-openvpn/po/ja/openvpn.po b/applications/luci-app-openvpn/po/ja/openvpn.po index 5474008682..232ae27e1f 100644 --- a/applications/luci-app-openvpn/po/ja/openvpn.po +++ b/applications/luci-app-openvpn/po/ja/openvpn.po @@ -196,6 +196,9 @@ msgstr "" msgid "Enabled" msgstr "有効" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "" diff --git a/applications/luci-app-openvpn/po/ms/openvpn.po b/applications/luci-app-openvpn/po/ms/openvpn.po index c439c3eb15..6c6e0d6046 100644 --- a/applications/luci-app-openvpn/po/ms/openvpn.po +++ b/applications/luci-app-openvpn/po/ms/openvpn.po @@ -191,6 +191,9 @@ msgstr "" msgid "Enabled" msgstr "" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "" diff --git a/applications/luci-app-openvpn/po/no/openvpn.po b/applications/luci-app-openvpn/po/no/openvpn.po index 3528444199..517da49080 100644 --- a/applications/luci-app-openvpn/po/no/openvpn.po +++ b/applications/luci-app-openvpn/po/no/openvpn.po @@ -192,6 +192,9 @@ msgstr "" msgid "Enabled" msgstr "" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "" diff --git a/applications/luci-app-openvpn/po/pl/openvpn.po b/applications/luci-app-openvpn/po/pl/openvpn.po index e289a80fc1..bef5a13a1a 100644 --- a/applications/luci-app-openvpn/po/pl/openvpn.po +++ b/applications/luci-app-openvpn/po/pl/openvpn.po @@ -197,6 +197,9 @@ msgstr "Włącz interfejs zarządzalny na <em>IP</em> <em>port</em>" msgid "Enabled" msgstr "Włączone" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "Szyfrowanie dla pakietów" diff --git a/applications/luci-app-openvpn/po/pt-br/openvpn.po b/applications/luci-app-openvpn/po/pt-br/openvpn.po index 84b0540581..26642e2c46 100644 --- a/applications/luci-app-openvpn/po/pt-br/openvpn.po +++ b/applications/luci-app-openvpn/po/pt-br/openvpn.po @@ -198,6 +198,9 @@ msgstr "Ativar o interface de gestão em <em>IP</em> <em>porta</em>" msgid "Enabled" msgstr "Ativado" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "Cifra de encriptação para pacotes" diff --git a/applications/luci-app-openvpn/po/pt/openvpn.po b/applications/luci-app-openvpn/po/pt/openvpn.po index 95c50a571a..d74b0a690d 100644 --- a/applications/luci-app-openvpn/po/pt/openvpn.po +++ b/applications/luci-app-openvpn/po/pt/openvpn.po @@ -198,6 +198,9 @@ msgstr "Activar o interface de gestão em <em>IP</em> <em>porta</em>" msgid "Enabled" msgstr "Activado" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "Cifra de encriptação para pacotes" diff --git a/applications/luci-app-openvpn/po/ro/openvpn.po b/applications/luci-app-openvpn/po/ro/openvpn.po index 4a7a5b7515..ef5e7ce379 100644 --- a/applications/luci-app-openvpn/po/ro/openvpn.po +++ b/applications/luci-app-openvpn/po/ro/openvpn.po @@ -193,6 +193,9 @@ msgstr "" msgid "Enabled" msgstr "" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "" diff --git a/applications/luci-app-openvpn/po/ru/openvpn.po b/applications/luci-app-openvpn/po/ru/openvpn.po index 00e585c374..89cf1161cc 100644 --- a/applications/luci-app-openvpn/po/ru/openvpn.po +++ b/applications/luci-app-openvpn/po/ru/openvpn.po @@ -200,6 +200,9 @@ msgstr "Включить интерфейс управления на <em>IP</em msgid "Enabled" msgstr "Включено" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "Шифровать и аутентифициоровать ключом все пакеты канала управления" + msgid "Encryption cipher for packets" msgstr "Шифрование для пакетов" diff --git a/applications/luci-app-openvpn/po/sk/openvpn.po b/applications/luci-app-openvpn/po/sk/openvpn.po index f001c12eaf..9005529762 100644 --- a/applications/luci-app-openvpn/po/sk/openvpn.po +++ b/applications/luci-app-openvpn/po/sk/openvpn.po @@ -191,6 +191,9 @@ msgstr "" msgid "Enabled" msgstr "" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "" diff --git a/applications/luci-app-openvpn/po/sv/openvpn.po b/applications/luci-app-openvpn/po/sv/openvpn.po index c03e1495cb..838f4650dd 100644 --- a/applications/luci-app-openvpn/po/sv/openvpn.po +++ b/applications/luci-app-openvpn/po/sv/openvpn.po @@ -192,6 +192,9 @@ msgstr "" msgid "Enabled" msgstr "" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "" diff --git a/applications/luci-app-openvpn/po/templates/openvpn.pot b/applications/luci-app-openvpn/po/templates/openvpn.pot index f2e4011662..126cab076f 100644 --- a/applications/luci-app-openvpn/po/templates/openvpn.pot +++ b/applications/luci-app-openvpn/po/templates/openvpn.pot @@ -184,6 +184,9 @@ msgstr "" msgid "Enabled" msgstr "" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "" diff --git a/applications/luci-app-openvpn/po/tr/openvpn.po b/applications/luci-app-openvpn/po/tr/openvpn.po index 7b8ffad34c..917c36d561 100644 --- a/applications/luci-app-openvpn/po/tr/openvpn.po +++ b/applications/luci-app-openvpn/po/tr/openvpn.po @@ -191,6 +191,9 @@ msgstr "" msgid "Enabled" msgstr "" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "" diff --git a/applications/luci-app-openvpn/po/uk/openvpn.po b/applications/luci-app-openvpn/po/uk/openvpn.po index a6910c2309..e98b52a8ae 100644 --- a/applications/luci-app-openvpn/po/uk/openvpn.po +++ b/applications/luci-app-openvpn/po/uk/openvpn.po @@ -195,6 +195,9 @@ msgstr "" msgid "Enabled" msgstr "" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "" diff --git a/applications/luci-app-openvpn/po/vi/openvpn.po b/applications/luci-app-openvpn/po/vi/openvpn.po index 8e8b96dc7f..f3873b068f 100644 --- a/applications/luci-app-openvpn/po/vi/openvpn.po +++ b/applications/luci-app-openvpn/po/vi/openvpn.po @@ -197,6 +197,9 @@ msgstr "Kích hoạt giao diện điều hành trên <em>IP</em> <em>cổng</em> msgid "Enabled" msgstr "Kích hoạt " +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "Encryption cipher cho các gói" diff --git a/applications/luci-app-openvpn/po/zh-cn/openvpn.po b/applications/luci-app-openvpn/po/zh-cn/openvpn.po index 3904ac4bf8..093a9cd071 100644 --- a/applications/luci-app-openvpn/po/zh-cn/openvpn.po +++ b/applications/luci-app-openvpn/po/zh-cn/openvpn.po @@ -196,6 +196,9 @@ msgstr "在<em>IP</em> <em>port</em>上启用可管理接口" msgid "Enabled" msgstr "启用" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "加密数据包" diff --git a/applications/luci-app-openvpn/po/zh-tw/openvpn.po b/applications/luci-app-openvpn/po/zh-tw/openvpn.po index f26aeb097a..556fb9b8f0 100644 --- a/applications/luci-app-openvpn/po/zh-tw/openvpn.po +++ b/applications/luci-app-openvpn/po/zh-tw/openvpn.po @@ -190,6 +190,9 @@ msgstr "" msgid "Enabled" msgstr "" +msgid "Encrypt and authenticate all control channel packets with the key" +msgstr "" + msgid "Encryption cipher for packets" msgstr "" diff --git a/applications/luci-app-p2pblock/po/pt-br/p2pblock.po b/applications/luci-app-p2pblock/po/pt-br/p2pblock.po index de3638164e..8ebac375f2 100644 --- a/applications/luci-app-p2pblock/po/pt-br/p2pblock.po +++ b/applications/luci-app-p2pblock/po/pt-br/p2pblock.po @@ -1,3 +1,7 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" + msgid "Block Time" msgstr "Tempo de bloqueio" diff --git a/applications/luci-app-radicale/po/pt-br/radicale.po b/applications/luci-app-radicale/po/pt-br/radicale.po index 67bf586908..17417fa499 100644 --- a/applications/luci-app-radicale/po/pt-br/radicale.po +++ b/applications/luci-app-radicale/po/pt-br/radicale.po @@ -14,11 +14,15 @@ msgstr "" msgid "" "'AUTO' selects the highest protocol version that client and server support." -msgstr "'AUTO' seleciona a versão mais alto protocolo que o cliente e o servidor suportar." +msgstr "" +"'AUTO' seleciona a versão mais alto protocolo que o cliente e o servidor " +"suportar." msgid "" "'Hostname:Port' or 'IPv4:Port' or '[IPv6]:Port' Radicale should listen on" -msgstr "'NomeDoEquipamento:porta' ou 'IPv4:Porta' ou '[IPv6]:Porta' em que o Radicale deve escutar" +msgstr "" +"'NomeDoEquipamento:porta' ou 'IPv4:Porta' ou '[IPv6]:Porta' em que o " +"Radicale deve escutar" msgid "AUTO" msgstr "AUTO" @@ -48,7 +52,9 @@ msgstr "Autenticação" msgid "" "Authentication login is matched against the 'user' key, and collection's " "path is matched against the 'collection' key." -msgstr "O nome do usuário na autenticação é comparado com a chave do 'user', e o caminho da coleção é comparado com a chave 'coleção'." +msgstr "" +"O nome do usuário na autenticação é comparado com a chave do 'user', e o " +"caminho da coleção é comparado com a chave 'coleção'." msgid "Authentication method" msgstr "Método de autenticação" @@ -68,7 +74,9 @@ msgstr "CalDAV/CardDAV" msgid "" "Calendars and address books are available for both local and remote access, " "possibly limited through authentication policies." -msgstr "Agendas e contados estão disponíveis tanto para acesso local como remoto, possivelmente limitado através das políticas de autenticação." +msgstr "" +"Agendas e contados estão disponíveis tanto para acesso local como remoto, " +"possivelmente limitado através das políticas de autenticação." msgid "Certificate file" msgstr "Arquivo do certificado" @@ -76,7 +84,9 @@ msgstr "Arquivo do certificado" msgid "" "Change here the encoding Radicale will use instead of 'UTF-8' for responses " "to the client and/or to store data inside collections." -msgstr "Mude aqui a codificação que o Radicale usará em vez de 'UTF-8' para respostas a clientes ou para armazenar dados dentro das coleções." +msgstr "" +"Mude aqui a codificação que o Radicale usará em vez de 'UTF-8' para " +"respostas a clientes ou para armazenar dados dentro das coleções." msgid "Ciphers" msgstr "Cifras" @@ -95,7 +105,11 @@ msgid "" "Cross-origin resource sharing (CORS) is a mechanism that allows restricted " "resources (e.g. fonts, JavaScript, etc.) on a web page to be requested from " "another domain outside the domain from which the resource originated." -msgstr "O compartilhamento de recursos de origem cruzada (CORS) é um mecanismo que permite que os recursos de acesso restrito (por exemplo, fontes, JavaScript, etc.) em uma página web ser solicitado de outro domínio fora do domínio a partir do qual o recurso foi originado." +msgstr "" +"O compartilhamento de recursos de origem cruzada (CORS) é um mecanismo que " +"permite que os recursos de acesso restrito (por exemplo, fontes, JavaScript, " +"etc.) em uma página web ser solicitado de outro domínio fora do domínio a " +"partir do qual o recurso foi originado." msgid "Custom" msgstr "Personalizadas" @@ -108,7 +122,9 @@ msgid "Debug" msgstr "Depuração" msgid "Delay (in seconds) during system boot before Radicale start" -msgstr "Atraso (em segundos) durante a inicialização do sistema antes do Radicale iniciar" +msgstr "" +"Atraso (em segundos) durante a inicialização do sistema antes do Radicale " +"iniciar" #, fuzzy msgid "Directory" @@ -131,7 +147,9 @@ msgstr "Ativar HTTPS" msgid "" "Enable/Disable auto-start of Radicale on system start-up and interface events" -msgstr "Ativar/Desativar iniciação automática do Radicale na iniciação do sistema e em eventos de interface" +msgstr "" +"Ativar/Desativar iniciação automática do Radicale na iniciação do sistema e " +"em eventos de interface" msgid "Encoding" msgstr "Codificação" @@ -164,7 +182,9 @@ msgstr "Sistema de arquivos" msgid "" "For example, for the 'user' key, '.+' means 'authenticated user' and '.*' " "means 'anybody' (including anonymous users)." -msgstr "Por exemplo, para a chave 'user', '.+' Significa 'usuário autenticado' e '.*' Significa 'qualquer um' (incluindo usuários anônimos)." +msgstr "" +"Por exemplo, para a chave 'user', '.+' Significa 'usuário autenticado' e '." +"*' Significa 'qualquer um' (incluindo usuários anônimos)." msgid "Full access for Owner only" msgstr "Acesso completo somente para o proprietário" @@ -228,7 +248,8 @@ msgid "Number of backup files of log to create." msgstr "Número de backups dos arquivos de registros(log) a serem criados." msgid "OPTIONAL: See python's ssl module for available ciphers" -msgstr "Opcional: veja o módulo SSL do python para conhecer as cifras disponíveis" +msgstr "" +"Opcional: veja o módulo SSL do python para conhecer as cifras disponíveis" msgid "One or more missing/invalid fields on tab" msgstr "Um ou campos inválidos/ausentes na aba" @@ -242,7 +263,9 @@ msgstr "O caminho/arquivo é necessário!" msgid "" "Place here the 'user:password' pairs for your users which should have access " "to Radicale." -msgstr "Coloque aqui os pares 'usuário:senha' para os seus usuários que devem ter acesso a Radicale." +msgstr "" +"Coloque aqui os pares 'usuário:senha' para os seus usuários que devem ter " +"acesso a Radicale." msgid "Please install current version !" msgstr "Por favor, instale a versão atual!" @@ -263,7 +286,9 @@ msgid "Radicale CalDAV/CardDAV Server" msgstr "Radicale Servidor CalDAV/CardDAV" msgid "Radicale uses '/etc/radicale/rights' as regexp-based file." -msgstr "Radicale usa o '/etc/radicale/rights' como arquivo baseado em expressão regular." +msgstr "" +"Radicale usa o '/etc/radicale/rights' como arquivo baseado em expressão " +"regular." msgid "Radicale uses '/etc/radicale/users' as htpasswd file." msgstr "Radicale usa o '/etc/radicale/users' como o arquivo htpasswd." @@ -307,7 +332,9 @@ msgid "Server" msgstr "Servidor" msgid "Setting this parameter to '0' will disable rotation of log-file." -msgstr "Definindo este parâmetro para '0' irá desativar a rotação dos arquivos de registros(log)." +msgstr "" +"Definindo este parâmetro para '0' irá desativar a rotação dos arquivos de " +"registros(log)." msgid "Software package '%s' is not installed." msgstr "O pacote de software '%s' não está instalado." @@ -349,18 +376,23 @@ msgstr "Sistema" msgid "" "The Radicale Project is a complete CalDAV (calendar) and CardDAV (contact) " "server solution." -msgstr "O Projeto Radicale é uma solução completa de CalDAV (agenda) e CardDAV (contatos)." +msgstr "" +"O Projeto Radicale é uma solução completa de CalDAV (agenda) e CardDAV " +"(contatos)." msgid "" "They can be viewed and edited by calendar and contact clients on mobile " "phones or computers." -msgstr "Eles podem ser visualizados e editados pelos clientes de agenda e de contatos em telefones celulares ou computadores." +msgstr "" +"Eles podem ser visualizados e editados pelos clientes de agenda e de " +"contatos em telefones celulares ou computadores." msgid "To edit the file follow this link!" msgstr "Para editar o arquivo, siga este link!" msgid "To view latest log file follow this link!" -msgstr "Para visualizar mais recente arquivo de registros(log), siga este link!" +msgstr "" +"Para visualizar mais recente arquivo de registros(log), siga este link!" msgid "Value is not a number" msgstr "O valor não é um número" @@ -384,7 +416,9 @@ msgstr "Informação da Versão" msgid "" "WARNING: Only 'File-system' is documented and tested by Radicale development" -msgstr "AVISO: Apenas 'Sistema de Arquivos "está documentado e testado pelo desenvolvimento do Radicale" +msgstr "" +"AVISO: Apenas 'Sistema de Arquivos está documentado e testado pelo " +"desenvolvimento do Radicale" #, fuzzy msgid "Warning" @@ -393,12 +427,16 @@ msgstr "Alerta" msgid "" "You can also get groups from the user regex in the collection with {0}, {1}, " "etc." -msgstr "Você também pode obter grupos a partir da expressão regular do usuário na coleção com {0}, {1} , etc." +msgstr "" +"Você também pode obter grupos a partir da expressão regular do usuário na " +"coleção com {0}, {1} , etc." msgid "" "You can use Python's ConfigParser interpolation values %(login)s and " "%(path)s." -msgstr "Você pode usar a interpolação de valores %(login)s e %(path)s do ConfigParser do Python." +msgstr "" +"Você pode usar a interpolação de valores %(login)s e %(path)s do " +"ConfigParser do Python." msgid "crypt" msgstr "cifrar" @@ -429,4 +467,3 @@ msgstr "necessário" msgid "salted SHA-1" msgstr "SHA-1 com salto" - diff --git a/applications/luci-app-simple-adblock/po/sv/simple-adblock.po b/applications/luci-app-simple-adblock/po/sv/simple-adblock.po new file mode 100644 index 0000000000..8202497ee1 --- /dev/null +++ b/applications/luci-app-simple-adblock/po/sv/simple-adblock.po @@ -0,0 +1,80 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Blacklisted Domain URLs" +msgstr "Svartlistade domänadresser" + +msgid "Blacklisted Domains" +msgstr "Svartlistade domäner" + +msgid "Blacklisted Hosts URLs" +msgstr "Svartlistade värdadresser" + +msgid "Controls system log and console output verbosity" +msgstr "Kontrollerar systemloggar och detaljnivån för konsoll-utmatningen" + +msgid "Enable/start service" +msgstr "Aktivera/starta tjänsten" + +msgid "Force Router DNS" +msgstr "" + +msgid "Force Router DNS server to all local devices" +msgstr "" + +msgid "Forces Router DNS use on local devices, also known as DNS Hijacking" +msgstr "" + +msgid "Individual domains to be blacklisted" +msgstr "Individuella domäner som ska svartlistas" + +msgid "Individual domains to be whitelisted" +msgstr "Individulla domäner som ska svartlistas" + +msgid "LED to indicate status" +msgstr "LED för att indikera status" + +msgid "Let local devices use their own DNS servers if set" +msgstr "" + +msgid "Output Verbosity Setting" +msgstr "" + +msgid "Pick the LED not already used in" +msgstr "" + +msgid "Simple AdBlock" +msgstr "Simple AdBlock" + +msgid "Simple AdBlock Settings" +msgstr ""Inställningar för Simple AdBlock" + +msgid "Some output" +msgstr "Viss utmatning" + +msgid "Suppress output" +msgstr "Förträng utmatning" + +msgid "System LED Configuration" +msgstr "" + +msgid "URLs to lists of domains to be blacklisted" +msgstr "" + +msgid "URLs to lists of domains to be whitelisted" +msgstr "" + +msgid "URLs to lists of hosts to be blacklisted" +msgstr "" + +msgid "Verbose output" +msgstr "Utförlig utmatning" + +msgid "Whitelisted Domain URLs" +msgstr "Vitlistade domänadresser" + +msgid "Whitelisted Domains" +msgstr "Vitlistade domäner" + +msgid "none" +msgstr "ingen" diff --git a/applications/luci-app-splash/po/sv/splash.po b/applications/luci-app-splash/po/sv/splash.po index 055c67b866..a1be1ea6e8 100644 --- a/applications/luci-app-splash/po/sv/splash.po +++ b/applications/luci-app-splash/po/sv/splash.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: PACKAGE VERSION\n" -"Last-Translator: Automatically generated\n" +"Last-Translator: Kristoffer Grundström <hamnisdude@gmail.com>\n" "Language-Team: none\n" "Language: sv\n" "MIME-Version: 1.0\n" @@ -45,6 +45,7 @@ msgstr "" msgid "" "Become an active member of this community and help by operating your own node" msgstr "" +"Bli en aktiv medlem av det här sällskapet och hjälp till genom att tillhandahålla en egen nod" msgid "Blacklist" msgstr "Svartlista" diff --git a/applications/luci-app-unbound/luasrc/controller/unbound.lua b/applications/luci-app-unbound/luasrc/controller/unbound.lua index 0a5abc5a5e..b44bf038eb 100644 --- a/applications/luci-app-unbound/luasrc/controller/unbound.lua +++ b/applications/luci-app-unbound/luasrc/controller/unbound.lua @@ -1,17 +1,151 @@ -- Copyright 2008 Steven Barth <steven@midlink.org> -- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org> +-- Copyright 2017 Eric Luehrsen <ericluehrsen@hotmail.com> -- Licensed to the public under the Apache License 2.0. module("luci.controller.unbound", package.seeall) + function index() - if not nixio.fs.access("/etc/config/unbound") then - return - end + local ucl = luci.model.uci.cursor() + local valexp = ucl:get_first("unbound", "unbound", "extended_luci") + local valman = ucl:get_first("unbound", "unbound", "manual_conf") + + + if not nixio.fs.access("/etc/config/unbound") then + return + end + + + if valexp == "1" then + -- Expanded View + entry({"admin", "services", "unbound"}, firstchild(), _("Recursive DNS")).dependent = false + + -- UCI Tab(s) + entry({"admin", "services", "unbound", "configure"}, cbi("unbound/configure"), _("Settings"), 10) + + -- Status Tab(s) + entry({"admin", "services", "unbound", "status"}, firstchild(), _("Status"), 20) + entry({"admin", "services", "unbound", "status", "syslog"}, call("QuerySysLog"), _("Log"), 50).leaf = true + + + if nixio.fs.access("/usr/sbin/unbound-control") then + -- Require unbound-control to execute + entry({"admin", "services", "unbound", "status", "statistics"}, call("QueryStatistics"), _("Statistics"), 10).leaf = true + entry({"admin", "services", "unbound", "status", "localdata"}, call("QueryLocalData"), _("Local Data"), 20).leaf = true + entry({"admin", "services", "unbound", "status", "localzone"}, call("QueryLocalZone"), _("Local Zones"), 30).leaf = true + + else + entry({"admin", "services", "unbound", "status", "statistics"}, call("ShowEmpty"), _("Statistics"), 10).leaf = true + end + + + -- Raw File Tab(s) + entry({"admin", "services", "unbound", "files"}, firstchild(), _("Files"), 30) + + + if valman ~= "1" then + entry({"admin", "services", "unbound", "files", "base"}, call("ShowUnboundConf"), _("UCI: Unbound"), 10).leaf = true + else + entry({"admin", "services", "unbound", "files", "base"}, cbi("unbound/manual"), _("Edit: Unbound"), 10).leaf = true + end + + + entry({"admin", "services", "unbound", "files", "server"}, cbi("unbound/server"), _("Edit: Server"), 20).leaf = true + entry({"admin", "services", "unbound", "files", "extended"}, cbi("unbound/extended"), _("Edit: Extended"), 30).leaf = true + + + if nixio.fs.access("/var/lib/unbound/unbound_dhcp.conf") then + entry({"admin", "services", "unbound", "files", "dhcp"}, call("ShowDHCPConf"), _("Include: DHCP"), 40).leaf = true + end + + + if nixio.fs.access("/var/lib/unbound/adb_list.overall") then + entry({"admin", "services", "unbound", "files", "adblock"}, call("ShowAdblock"), _("Include: Adblock"), 50).leaf = true + end + + else + -- Simple View to UCI only + entry({"admin", "services", "unbound"}, cbi("unbound/configure"), _("Recursive DNS")).dependent = false + end +end + + +function ShowEmpty() + local lclhead = "Unbound Control" + local lcldesc = luci.i18n.translate("This could display more statistics with the unbound-control package.") + luci.template.render("unbound/show-empty", {heading = lclhead, description = lcldesc}) +end + + +function QuerySysLog() + local lclhead = "System Log" + local lcldata = luci.util.exec("logread | grep -i unbound") + local lcldesc = luci.i18n.translate("This shows syslog filtered for events involving Unbound.") + luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata}) +end + + +function QueryStatistics() + local lclhead = "Unbound Control Stats" + local lcldata = luci.util.exec("unbound-control -c /var/lib/unbound/unbound.conf stats_noreset") + local lcldesc = luci.i18n.translate("This shows some performance statistics tracked by Unbound.") + luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata}) +end + + +function QueryLocalData() + local lclhead = "Unbound Control Local Data" + local lcldata = luci.util.exec("unbound-control -c /var/lib/unbound/unbound.conf list_local_data") + local lcldesc = luci.i18n.translate("This shows local host records that shortcut recursion.") + luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata}) +end + + +function QueryLocalZone() + local lclhead = "Unbound Control Local Zones" + local lcldata = luci.util.exec("unbound-control -c /var/lib/unbound/unbound.conf list_local_zones") + local lcldesc = luci.i18n.translate("This shows local zone definitions that affect recursion routing or processing. ") + luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata}) +end + + +function ShowUnboundConf() + local unboundfile = "/var/lib/unbound/unbound.conf" + local lclhead = "Unbound Conf" + local lcldata = nixio.fs.readfile(unboundfile) + local lcldesc = luci.i18n.translate("This shows configuration generated by UCI:") + lcldesc = lcldesc .. " (" .. unboundfile .. ")" + luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata}) +end + + +function ShowDHCPConf() + local dhcpfile = "/var/lib/unbound/unbound_dhcp.conf" + local lclhead = "DHCP Conf" + local lcldata = nixio.fs.readfile(dhcpfile) + local lcldesc = luci.i18n.translate("This shows LAN hosts added by DHCP hook scripts:") + lcldesc = lcldesc .. " (" .. dhcpfile .. ")" + luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata}) +end + + +function ShowAdblock() + local adblockfile = "/var/lib/unbound/adb_list.overall" + local lclhead = "Adblock Conf" + local lcldata, lcldesc + - local page + if nixio.fs.stat(adblockfile).size > 262144 then + lcldesc = luci.i18n.translate("Adblock domain list is too large for LuCI:") + lcldesc = lcldesc .. " (" .. adblockfile .. ")" + luci.template.render("unbound/show-empty", {heading = lclhead, description = lcldesc}) - page = entry({"admin", "services", "unbound"}, cbi("unbound"), _("Recursive DNS")) - page.dependent = true + else + lcldata = nixio.fs.readfile(adblockfile) + lcldesc = luci.i18n.translate("This shows blocked domains provided by Adblock scripts:") + lcldesc = lcldesc .. " (" .. adblockfile .. ")" + luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata}) + end end diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua deleted file mode 100644 index bfaacb40bc..0000000000 --- a/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua +++ /dev/null @@ -1,216 +0,0 @@ --- Copyright 2008 Steven Barth <steven@midlink.org> --- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com> --- Copyright 2016 Dan Luedtke <mail@danrl.com> --- Licensed to the public under the Apache License 2.0. - -local m -local s1 -local ena, mcf, lsv, rlh, rpv, vld, nvd, eds, prt, tlm -local ctl, dlk, dom, dty, lfq, wfq, exa, ctl, d64, pfx, qry, qrs -local pro, tgr, rsc, rsn, ag2 - -m = Map("unbound", translate("Recursive DNS"), - translatef("<a href=\"%s\" target=\"_blank\">Unbound</a>" - .. " is a validating, recursive, and caching DNS resolver. " - .. "UCI help can be found on " - .. "<a href=\"%s\" target=\"_blank\">github</a>.", - "https://www.unbound.net/", - "https://github.com/openwrt/packages/blob/master/net/unbound/files/README.md")) - - -s1 = m:section(TypedSection, "unbound") -s1.addremove = false -s1.anonymous = true -s1:tab("service", translate("Basic Settings")) -s1:tab("advanced", translate("Advanced Settings")) -s1:tab("resource", translate("Resource Settings")) - ---LuCI or Not - -ena = s1:taboption("service", Flag, "enabled", translate("Enable Unbound:"), - translate("Enable the initialization scripts for Unbound")) -ena.rmempty = false - -mcf = s1:taboption("service", Flag, "manual_conf", translate("Manual Conf:"), - translate("Skip UCI and use /etc/unbound/unbound.conf")) -mcf.rmempty = false - -function ena.cfgvalue(self, section) - return luci.sys.init.enabled("unbound") and self.enabled or self.disabled -end - -function ena.write(self, section, value) - if value == "1" then - luci.sys.init.enable("unbound") - luci.sys.call("/etc/init.d/unbound start >/dev/null") - else - luci.sys.call("/etc/init.d/unbound stop >/dev/null") - luci.sys.init.disable("unbound") - end - - return Flag.write(self, section, value) -end - ---Basic Tab - -lsv = s1:taboption("service", Flag, "localservice", translate("Local Service:"), - translate("Accept queries only from local subnets")) -lsv.rmempty = false - -rlh = s1:taboption("service", Flag, "rebind_localhost", translate("Block Localhost Rebind:"), - translate("Prevent upstream response of 127.0.0.0/8")) -rlh.rmempty = false - -rpv = s1:taboption("service", Flag, "rebind_protection", translate("Block Private Rebind:"), - translate("Prevent upstream response of RFC1918 ranges")) -rpv.rmempty = false - -vld = s1:taboption("service", Flag, "validator", translate("Enable DNSSEC:"), - translate("Enable the DNSSEC validator module")) -vld.rmempty = false - -nvd = s1:taboption("service", Flag, "validator_ntp", translate("DNSSEC NTP Fix:"), - translate("Break the loop where DNSSEC needs NTP and NTP needs DNS")) -nvd.rmempty = false -nvd:depends({ validator = true }) - -eds = s1:taboption("service", Value, "edns_size", translate("EDNS Size:"), - translate("Limit extended DNS packet size")) -eds.datatype = "and(uinteger,min(512),max(4096))" -eds.rmempty = false - -prt = s1:taboption("service", Value, "listen_port", translate("Listening Port:"), - translate("Choose Unbounds listening port")) -prt.datatype = "port" -prt.rmempty = false - -tlm = s1:taboption("service", Value, "ttl_min", translate("TTL Minimum:"), - translate("Prevent excessively short cache periods")) -tlm.datatype = "and(uinteger,min(0),max(600))" -tlm.rmempty = false - ---Advanced Tab - -ctl = s1:taboption("advanced", Flag, "unbound_control", translate("Unbound Control App:"), - translate("Enable unecrypted localhost access for unbound-control")) -ctl.rmempty = false - -dlk = s1:taboption("advanced", ListValue, "dhcp_link", translate("DHCP Link:"), - translate("Link to supported programs to load DHCP into DNS")) -dlk:value("none", translate("No Link")) -dlk:value("dnsmasq", "dnsmasq") -dlk:value("odhcpd", "odhcpd") -dlk.rmempty = false - -dom = s1:taboption("advanced", Value, "domain", translate("Local Domain:"), - translate("Domain suffix for this router and DHCP clients")) -dom.placeholder = "lan" -dom:depends({ dhcp_link = "none" }) -dom:depends({ dhcp_link = "odhcpd" }) - -dty = s1:taboption("advanced", ListValue, "domain_type", translate("Local Domain Type:"), - translate("How to treat queries of this local domain")) -dty:value("deny", translate("Ignored")) -dty:value("refuse", translate("Refused")) -dty:value("static", translate("Only Local")) -dty:value("transparent", translate("Also Forwarded")) -dty:depends({ dhcp_link = "none" }) -dty:depends({ dhcp_link = "odhcpd" }) - -lfq = s1:taboption("advanced", ListValue, "add_local_fqdn", translate("LAN DNS:"), - translate("How to enter the LAN or local network router in DNS")) -lfq:value("0", translate("No DNS")) -lfq:value("1", translate("Hostname, Primary Address")) -lfq:value("2", translate("Hostname, All Addresses")) -lfq:value("3", translate("Host FQDN, All Addresses")) -lfq:value("4", translate("Interface FQDN, All Addresses")) -lfq:depends({ dhcp_link = "none" }) -lfq:depends({ dhcp_link = "odhcpd" }) - -wfq = s1:taboption("advanced", ListValue, "add_wan_fqdn", translate("WAN DNS:"), - translate("Override the WAN side router entry in DNS")) -wfq:value("0", translate("Upstream")) -wfq:value("1", translate("Hostname, Primary Address")) -wfq:value("2", translate("Hostname, All Addresses")) -wfq:value("3", translate("Host FQDN, All Addresses")) -wfq:value("4", translate("Interface FQDN, All Addresses")) -wfq:depends({ dhcp_link = "none" }) -wfq:depends({ dhcp_link = "odhcpd" }) - -exa = s1:taboption("advanced", ListValue, "add_extra_dns", translate("Extra DNS:"), - translate("Use extra DNS entries found in /etc/config/dhcp")) -exa:value("0", translate("Ignore")) -exa:value("1", translate("Include Network/Hostnames")) -exa:value("2", translate("Advanced MX/SRV RR")) -exa:value("3", translate("Advanced CNAME RR")) -exa:depends({ dhcp_link = "none" }) -exa:depends({ dhcp_link = "odhcpd" }) - -ctl = s1:taboption("advanced", Flag, "dhcp4_slaac6", translate("DHCPv4 to SLAAC:"), - translate("Use DHCPv4 MAC to discover IP6 hosts SLAAC (EUI64)")) -ctl.rmempty = false - -d64 = s1:taboption("advanced", Flag, "dns64", translate("Enable DNS64:"), - translate("Enable the DNS64 module")) -d64.rmempty = false - -pfx = s1:taboption("advanced", Value, "dns64_prefix", translate("DNS64 Prefix:"), - translate("Prefix for generated DNS64 addresses")) -pfx.datatype = "ip6addr" -pfx.placeholder = "64:ff9b::/96" -pfx.optional = true -pfx:depends({ dns64 = true }) - -qry = s1:taboption("advanced", Flag, "query_minimize", translate("Query Minimize:"), - translate("Break down query components for limited added privacy")) -qry.rmempty = false - -qrs = s1:taboption("advanced", Flag, "query_min_strict", translate("Strict Minimize:"), - translate("Strict version of 'query minimize' but it can break DNS")) -qrs.rmempty = false -qrs:depends({ query_minimize = true }) - ---TODO: dnsmasq needs to not reference resolve-file and get off port 53. - ---Resource Tuning Tab - -pro = s1:taboption("resource", ListValue, "protocol", translate("Recursion Protocol:"), - translate("Chose the protocol recursion queries leave on")) -pro:value("mixed", translate("IP4 and IP6")) -pro:value("ip6_prefer", translate("IP6 Preferred")) -pro:value("ip4_only", translate("IP4 Only")) -pro:value("ip6_only", translate("IP6 Only")) -pro.rmempty = false - -rsn = s1:taboption("resource", ListValue, "recursion", translate("Recursion Strength:"), - translate("Recursion activity affects memory growth and CPU load")) -rsn:value("aggressive", translate("Aggressive")) -rsn:value("default", translate("Default")) -rsn:value("passive", translate("Passive")) -rsn.rmempty = false - -rsc = s1:taboption("resource", ListValue, "resource", translate("Memory Resource:"), - translate("Use menu System/Processes to observe any memory growth")) -rsc:value("large", translate("Large")) -rsc:value("medium", translate("Medium")) -rsc:value("small", translate("Small")) -rsc:value("tiny", translate("Tiny")) -rsc.rmempty = false - -ag2 = s1:taboption("resource", Value, "root_age", translate("Root DSKEY Age:"), - translate("Limit days between RFC5011 to reduce flash writes")) -ag2.datatype = "and(uinteger,min(1),max(99))" -ag2:value("3", "3") -ag2:value("9", "9 ("..translate("default")..")") -ag2:value("12", "12") -ag2:value("24", "24") -ag2:value("99", "99 ("..translate("never")..")") - -tgr = s1:taboption("resource", Value, "trigger", translate("Trigger Networks:"), - translate("Networks that may trigger Unbound to reload (avoid wan6)")) -tgr.template = "cbi/network_netlist" -tgr.widget = "checkbox" -tgr.cast = "string" - -return m - diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua new file mode 100644 index 0000000000..cdf7757e3a --- /dev/null +++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua @@ -0,0 +1,273 @@ +-- Copyright 2008 Steven Barth <steven@midlink.org> +-- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com> +-- Copyright 2016 Dan Luedtke <mail@danrl.com> +-- Licensed to the public under the Apache License 2.0. + +local m1, s1 +local ena, mcf, lci, lsv, rlh, rpv, vld, nvd, eds, prt, tlm +local ctl, dlk, dom, dty, lfq, wfq, exa, dp6, d64, pfx, qry, qrs +local pro, tgr, rsc, rsn, ag2, stt +local ucl = luci.model.uci.cursor() +local valman = ucl:get_first("unbound", "unbound", "manual_conf") + +m1 = Map("unbound") + +s1 = m1:section(TypedSection, "unbound") +s1.addremove = false +s1.anonymous = true + +--LuCI, Unbound, or Not +s1:tab("basic", translate("Basic"), + translatef("<h3>Unbound Basic Settings</h3>\n" + .. "<a href=\"%s\" target=\"_blank\">Unbound</a>" + .. " is a validating, recursive, and caching DNS resolver. " + .. "UCI help can be found on " + .. "<a href=\"%s\" target=\"_blank\">github</a>.", + "https://www.unbound.net/", + "https://github.com/openwrt/packages/blob/master/net/unbound/files/README.md")) + +ena = s1:taboption("basic", Flag, "enabled", translate("Enable Unbound:"), + translate("Enable the initialization scripts for Unbound")) +ena.rmempty = false + +mcf = s1:taboption("basic", Flag, "manual_conf", translate("Manual Conf:"), + translate("Skip UCI and use /etc/unbound/unbound.conf")) +mcf.rmempty = false + +lci = s1:taboption("basic", Flag, "extended_luci", translate("Advanced LuCI:"), + translate("See detailed tabs for debug and advanced manual configuration")) +lci.rmempty = false + + +function ena.cfgvalue(self, section) + return luci.sys.init.enabled("unbound") and self.enabled or self.disabled +end + + +function ena.write(self, section, value) + if value == "1" then + luci.sys.init.enable("unbound") + luci.sys.call("/etc/init.d/unbound start >/dev/null") + else + luci.sys.call("/etc/init.d/unbound stop >/dev/null") + luci.sys.init.disable("unbound") + end + + return Flag.write(self, section, value) +end + + +if valman ~= "1" then + -- Not in manual configuration mode; show UCI + s1:tab("advanced", translate("Advanced"), + translatef("<h3>Unbound Advanced Settings</h3>\n" + .. "Advanced setttings and plugin modules for " + .. "<a href=\"%s\" target=\"_blank\">Unbound</a>" + .. " DNS resolver.", "https://www.unbound.net/")) + + s1:tab("resource", translate("Resource"), + translatef("<h3>Unbound Resource Settings</h3>\n" + .. "Memory and protocol setttings for " + .. "<a href=\"%s\" target=\"_blank\">Unbound</a>" + .. " DNS resolver.", "https://www.unbound.net/")) + + --Basic Tab + lsv = s1:taboption("basic", Flag, "localservice", translate("Local Service:"), + translate("Accept queries only from local subnets")) + lsv.rmempty = false + + rlh = s1:taboption("basic", Flag, "rebind_localhost", translate("Block Localhost Rebind:"), + translate("Prevent upstream response of 127.0.0.0/8")) + rlh.rmempty = false + + rpv = s1:taboption("basic", Flag, "rebind_protection", translate("Block Private Rebind:"), + translate("Prevent upstream response of RFC1918 ranges")) + rpv.rmempty = false + + vld = s1:taboption("basic", Flag, "validator", translate("Enable DNSSEC:"), + translate("Enable the DNSSEC validator module")) + vld.rmempty = false + + nvd = s1:taboption("basic", Flag, "validator_ntp", translate("DNSSEC NTP Fix:"), + translate("Break the loop where DNSSEC needs NTP and NTP needs DNS")) + nvd.rmempty = false + nvd:depends({ validator = true }) + + eds = s1:taboption("basic", Value, "edns_size", translate("EDNS Size:"), + translate("Limit extended DNS packet size")) + eds.datatype = "and(uinteger,min(512),max(4096))" + eds.rmempty = false + + prt = s1:taboption("basic", Value, "listen_port", translate("Listening Port:"), + translate("Choose Unbounds listening port")) + prt.datatype = "port" + prt.rmempty = false + + tlm = s1:taboption("basic", Value, "ttl_min", translate("TTL Minimum:"), + translate("Prevent excessively short cache periods")) + tlm.datatype = "and(uinteger,min(0),max(600))" + tlm.rmempty = false + + --Advanced Tab + ctl = s1:taboption("advanced", ListValue, "unbound_control", translate("Unbound Control App:"), + translate("Enable access for unbound-control")) + ctl.rmempty = false + ctl:value("0", translate("No Remote Control")) + ctl:value("1", translate("Local Host, No Encryption")) + ctl:value("2", translate("Local Host, Encrypted")) + ctl:value("3", translate("Local Subnet, Encrypted")) + ctl:value("4", translate("Local Subnet, Static Encryption")) + + dlk = s1:taboption("advanced", ListValue, "dhcp_link", translate("DHCP Link:"), + translate("Link to supported programs to load DHCP into DNS")) + dlk:value("none", translate("No Link")) + dlk:value("dnsmasq", "dnsmasq") + dlk:value("odhcpd", "odhcpd") + dlk.rmempty = false + + dom = s1:taboption("advanced", Value, "domain", translate("Local Domain:"), + translate("Domain suffix for this router and DHCP clients")) + dom.placeholder = "lan" + dom:depends({ dhcp_link = "none" }) + dom:depends({ dhcp_link = "odhcpd" }) + + dty = s1:taboption("advanced", ListValue, "domain_type", translate("Local Domain Type:"), + translate("How to treat queries of this local domain")) + dty:value("deny", translate("Ignored")) + dty:value("refuse", translate("Refused")) + dty:value("static", translate("Only Local")) + dty:value("transparent", translate("Also Forwarded")) + dty:depends({ dhcp_link = "none" }) + dty:depends({ dhcp_link = "odhcpd" }) + + lfq = s1:taboption("advanced", ListValue, "add_local_fqdn", translate("LAN DNS:"), + translate("How to enter the LAN or local network router in DNS")) + lfq:value("0", translate("No DNS")) + lfq:value("1", translate("Hostname, Primary Address")) + lfq:value("2", translate("Hostname, All Addresses")) + lfq:value("3", translate("Host FQDN, All Addresses")) + lfq:value("4", translate("Interface FQDN, All Addresses")) + lfq:depends({ dhcp_link = "none" }) + lfq:depends({ dhcp_link = "odhcpd" }) + + wfq = s1:taboption("advanced", ListValue, "add_wan_fqdn", translate("WAN DNS:"), + translate("Override the WAN side router entry in DNS")) + wfq:value("0", translate("Upstream")) + wfq:value("1", translate("Hostname, Primary Address")) + wfq:value("2", translate("Hostname, All Addresses")) + wfq:value("3", translate("Host FQDN, All Addresses")) + wfq:value("4", translate("Interface FQDN, All Addresses")) + wfq:depends({ dhcp_link = "none" }) + wfq:depends({ dhcp_link = "odhcpd" }) + + exa = s1:taboption("advanced", ListValue, "add_extra_dns", translate("Extra DNS:"), + translate("Use extra DNS entries found in /etc/config/dhcp")) + exa:value("0", translate("Ignore")) + exa:value("1", translate("Include Network/Hostnames")) + exa:value("2", translate("Advanced MX/SRV RR")) + exa:value("3", translate("Advanced CNAME RR")) + exa:depends({ dhcp_link = "none" }) + exa:depends({ dhcp_link = "odhcpd" }) + + dp6 = s1:taboption("advanced", Flag, "dhcp4_slaac6", translate("DHCPv4 to SLAAC:"), + translate("Use DHCPv4 MAC to discover IP6 hosts SLAAC (EUI64)")) + dp6.rmempty = false + + d64 = s1:taboption("advanced", Flag, "dns64", translate("Enable DNS64:"), + translate("Enable the DNS64 module")) + d64.rmempty = false + + pfx = s1:taboption("advanced", Value, "dns64_prefix", translate("DNS64 Prefix:"), + translate("Prefix for generated DNS64 addresses")) + pfx.datatype = "ip6addr" + pfx.placeholder = "64:ff9b::/96" + pfx.optional = true + pfx:depends({ dns64 = true }) + + qry = s1:taboption("advanced", Flag, "query_minimize", translate("Query Minimize:"), + translate("Break down query components for limited added privacy")) + qry.rmempty = false + + qrs = s1:taboption("advanced", Flag, "query_min_strict", translate("Strict Minimize:"), + translate("Strict version of 'query minimize' but it can break DNS")) + qrs.rmempty = false + qrs:depends({ query_minimize = true }) + + --TODO: dnsmasq needs to not reference resolve-file and get off port 53. + + --Resource Tuning Tab + pro = s1:taboption("resource", ListValue, "protocol", translate("Recursion Protocol:"), + translate("Chose the protocol recursion queries leave on")) + pro:value("mixed", translate("IP4 and IP6")) + pro:value("ip6_prefer", translate("IP6 Preferred")) + pro:value("ip4_only", translate("IP4 Only")) + pro:value("ip6_only", translate("IP6 Only")) + pro.rmempty = false + + rsn = s1:taboption("resource", ListValue, "recursion", translate("Recursion Strength:"), + translate("Recursion activity affects memory growth and CPU load")) + rsn:value("aggressive", translate("Aggressive")) + rsn:value("default", translate("Default")) + rsn:value("passive", translate("Passive")) + rsn.rmempty = false + + rsc = s1:taboption("resource", ListValue, "resource", translate("Memory Resource:"), + translate("Use menu System/Processes to observe any memory growth")) + rsc:value("large", translate("Large")) + rsc:value("medium", translate("Medium")) + rsc:value("small", translate("Small")) + rsc:value("tiny", translate("Tiny")) + rsc.rmempty = false + + ag2 = s1:taboption("resource", Value, "root_age", translate("Root DSKEY Age:"), + translate("Limit days between RFC5011 to reduce flash writes")) + ag2.datatype = "and(uinteger,min(1),max(99))" + ag2:value("3", "3") + ag2:value("9", "9 ("..translate("default")..")") + ag2:value("12", "12") + ag2:value("24", "24") + ag2:value("99", "99 ("..translate("never")..")") + + stt = s1:taboption("resource", Flag, "extended_stats", translate("Extended Statistics:"), + translate("Extended statistics are printed from unbound-control")) + stt.rmempty = false + + tgr = s1:taboption("resource", Value, "trigger", translate("Trigger Networks:"), + translate("Networks that may trigger Unbound to reload (avoid wan6)")) + tgr.template = "cbi/network_netlist" + tgr.widget = "checkbox" + tgr.cast = "string" + +else + s1:tab("rfc5011", translate("RFC5011"), + translatef("<h3>Unbound RFC5011 Settings</h3>\n" + .. "RFC5011 copy scripts protect flash ROM even with UCI disabled.")) + + ag2 = s1:taboption("rfc5011", Value, "root_age", translate("Root DSKEY Age:"), + translate("Limit days to copy /var/->/etc/ to reduce flash writes")) + ag2.datatype = "and(uinteger,min(1),max(99))" + ag2:value("3", "3") + ag2:value("9", "9 ("..translate("default")..")") + ag2:value("12", "12") + ag2:value("24", "24") + ag2:value("99", "99 ("..translate("never")..")") +end + + +function m1.on_after_commit(self) + function ena.validate(self, value) + if value ~= "0" then + luci.sys.call("/etc/init.d/unbound restart >/dev/null 2>&1") + else + luci.sys.call("/etc/init.d/unbound stop >/dev/null 2>&1") + end + end + + + -- Restart Unbound with configuration and reload the page (some options hide) + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "unbound")) +end + + +return m1 + diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua new file mode 100644 index 0000000000..67d2ec6c6b --- /dev/null +++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua @@ -0,0 +1,30 @@ +-- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com> +-- Licensed to the public under the Apache License 2.0. + +local m4, s4, frm +local filename = "/etc/unbound/unbound_ext.conf" +local description = translatef("Here you may edit 'forward:' and 'remote-control:' in an extended 'include:'") +description = description .. " (" .. filename .. ")" + +m4 = SimpleForm("editing", nil) +m4:append(Template("unbound/css-editing")) +m4.submit = translate("Save") +m4.reset = false +s4 = m4:section(SimpleSection, "Unbound Extended Conf", description) +frm = s4:option(TextValue, "data") +frm.datatype = "string" +frm.rows = 20 + + +function frm.cfgvalue() + return nixio.fs.readfile(filename) or "" +end + + +function frm.write(self, section, data) + return nixio.fs.writefile(filename, luci.util.trim(data:gsub("\r\n", "\n"))) +end + + +return m4 + diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua new file mode 100644 index 0000000000..5cfb9c32c1 --- /dev/null +++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua @@ -0,0 +1,30 @@ +-- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com> +-- Licensed to the public under the Apache License 2.0. + +local m2, s2, frm +local filename = "/etc/unbound/unbound.conf" +local description = translatef("Here you may edit raw 'unbound.conf' when you don't use UCI:") +description = description .. " (" .. filename .. ")" + +m2 = SimpleForm("editing", nil) +m2:append(Template("unbound/css-editing")) +m2.submit = translate("Save") +m2.reset = false +s2 = m2:section(SimpleSection, "Unbound Conf", description) +frm = s2:option(TextValue, "data") +frm.datatype = "string" +frm.rows = 20 + + +function frm.cfgvalue() + return nixio.fs.readfile(filename) or "" +end + + +function frm.write(self, section, data) + return nixio.fs.writefile(filename, luci.util.trim(data:gsub("\r\n", "\n"))) +end + + +return m2 + diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua new file mode 100644 index 0000000000..d0ac407847 --- /dev/null +++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua @@ -0,0 +1,30 @@ +-- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com> +-- Licensed to the public under the Apache License 2.0. + +local m3, s3, frm +local filename = "/etc/unbound/unbound_srv.conf" +local description = translatef("Here you may edit the 'server:' clause in an internal 'include:'") +description = description .. " (" .. filename .. ")" + +m3 = SimpleForm("editing", nil) +m3:append(Template("unbound/css-editing")) +m3.submit = translate("Save") +m3.reset = false +s3 = m3:section(SimpleSection, "Unbound Server Conf", description) +frm = s3:option(TextValue, "data") +frm.datatype = "string" +frm.rows = 20 + + +function frm.cfgvalue() + return nixio.fs.readfile(filename) or "" +end + + +function frm.write(self, section, data) + return nixio.fs.writefile(filename, luci.util.trim(data:gsub("\r\n", "\n"))) +end + + +return m3 + diff --git a/applications/luci-app-unbound/luasrc/view/unbound/css-editing.htm b/applications/luci-app-unbound/luasrc/view/unbound/css-editing.htm new file mode 100644 index 0000000000..44d09378c3 --- /dev/null +++ b/applications/luci-app-unbound/luasrc/view/unbound/css-editing.htm @@ -0,0 +1,8 @@ +<style type="text/css"> + textarea + { + background-color: #fffff0; + font-family: monospace; + } +</style> + diff --git a/applications/luci-app-unbound/luasrc/view/unbound/show-empty.htm b/applications/luci-app-unbound/luasrc/view/unbound/show-empty.htm new file mode 100644 index 0000000000..87d6cc68cb --- /dev/null +++ b/applications/luci-app-unbound/luasrc/view/unbound/show-empty.htm @@ -0,0 +1,5 @@ +<%+header%> +<h3><%=heading:pcdata()%></h3> +<p><%=description:pcdata()%></p> +<%+footer%> + diff --git a/applications/luci-app-unbound/luasrc/view/unbound/show-textbox.htm b/applications/luci-app-unbound/luasrc/view/unbound/show-textbox.htm new file mode 100644 index 0000000000..c0a7d133dc --- /dev/null +++ b/applications/luci-app-unbound/luasrc/view/unbound/show-textbox.htm @@ -0,0 +1,8 @@ +<%+header%> +<h3><%=heading:pcdata()%></h3> +<p><%=description:pcdata()%></p> +<div> +<textarea style="width: 100%; height: 480px; font-family: monospace;" readonly="readonly" wrap="off" rows="<%=content:cmatch("\n")+2%>"><%=content:pcdata()%></textarea> +</div> +<%+footer%> + diff --git a/applications/luci-app-unbound/root/etc/uci-defaults/60_luci-unbound b/applications/luci-app-unbound/root/etc/uci-defaults/60_luci-unbound index cc714ac53e..c2ac8c93b6 100644 --- a/applications/luci-app-unbound/root/etc/uci-defaults/60_luci-unbound +++ b/applications/luci-app-unbound/root/etc/uci-defaults/60_luci-unbound @@ -8,18 +8,5 @@ uci -q batch <<-EOF >/dev/null EOF rm -f /tmp/luci-indexcache -[ ! -x /usr/sbin/unbound-control ] && exit 0 - -uci -q batch <<-EOF >/dev/null - set luci.unboundhosts=command - set luci.unboundhosts.name='Unbound Local Hosts' - set luci.unboundhosts.command='unbound-control -c /var/lib/unbound/unbound.conf list_local_data' - set luci.unboundzones=command - set luci.unboundzones.name='Unbound Local Zones' - set luci.unboundzones.command='unbound-control -c /var/lib/unbound/unbound.conf list_local_zones' - commit luci -EOF - -rm -f /tmp/luci-indexcache exit 0 |