-
-
+
diff --git a/src/components/wizard-internet/wizard-internet.js b/src/components/wizard-internet/wizard-internet.js
index 111db87..c03d2df 100644
--- a/src/components/wizard-internet/wizard-internet.js
+++ b/src/components/wizard-internet/wizard-internet.js
@@ -1,4 +1,5 @@
import { copy, module } from 'angular';
+import { assign, clone } from 'lodash';
export default module('app.components.wizard-internet', [])
.component('wizardInternet', {
@@ -6,31 +7,76 @@ export default module('app.components.wizard-internet', [])
internet: '<',
onUpdate: '&',
},
- // TODO: handle vpn
- controller: class WizardContactCtrl {
+ controller: class WizardInternetCtrl {
constructor($scope) {
'ngInject';
+ this.$scope = $scope;
+
this.newInternet = {};
- $scope.$watch('$ctrl.internet', this.updateFromInput.bind(this), true);
- $scope.$watch('$ctrl.newInternet', this.updateOutput.bind(this), true);
+ $scope.$watch('$ctrl.internet', this.updateFromInput.bind(this));
+ $scope.$watch('$ctrl.internetTunnelEnabled', this.updateInternetTunnel.bind(this));
+ $scope.$watch('$ctrl.meshTunnelEnabled', this.updateMeshTunnel.bind(this));
+ $scope.$watch('$ctrl.speedLimitEnabled', this.updateSpeedLimit.bind(this));
+ $scope.$watchCollection('$ctrl.newInternet', this.updateOutput.bind(this));
}
updateFromInput(internet) {
- copy(internet, this.newInternet);
+ const newInternet = clone(internet || {});
+
+ if (!newInternet.share) {
+ delete newInternet.internetTunnel;
+ }
+
+ this.internetTunnelEnabled = newInternet.internetTunnel !== undefined;
+ this.meshTunnelEnabled = newInternet.meshTunnel !== undefined;
+
+ if (!newInternet.share && !this.meshTunnelEnabled) {
+ delete newInternet.speedLimitDown;
+ delete newInternet.speedLimitUp;
+ }
+
+ this.speedLimitEnabled =
+ (this.$scope.internetForm.limitDown && !this.$scope.internetForm.limitDown.$pristine) ||
+ (this.$scope.internetForm.limitUp && !this.$scope.internetForm.limitUp.$pristine) ||
+ newInternet.speedLimitDown !== undefined ||
+ newInternet.speedLimitUp !== undefined;
+
+ copy({}, this.newInternet);
+ assign(this.newInternet, newInternet);
}
- updateOutput(newInternet) {
- let internet = copy(newInternet);
- if (!internet.share) {
- internet = {};
+ updateInternetTunnel(enabled) {
+ if (!enabled) delete this.newInternet.internetTunnel;
+ if (enabled && !this.newInternet.internetTunnel) this.newInternet.internetTunnel = {};
+ }
+
+ updateMeshTunnel(enabled) {
+ if (!enabled) delete this.newInternet.meshTunnel;
+ if (enabled && !this.newInternet.meshTunnel) this.newInternet.meshTunnel = {};
+ }
+
+ updateSpeedLimit(enabled) {
+ if (!enabled) {
+ delete this.newInternet.speedLimitDown;
+ delete this.newInternet.speedLimitUp;
+ }
+ }
+
+ updateOutput() {
+ if (!this.newInternet.share && !this.newInternet.meshTunnel) {
+ this.onUpdate({internet: undefined});
+ return;
}
- if (!internet.speedLimit) {
- delete internet.speedLimit;
- delete internet.speedLimitDown;
- delete internet.speedLimitUp;
+
+ const internet = clone(this.newInternet);
+
+ if (!internet.share) {
+ delete internet.share;
+ delete internet.internetTunnel;
}
+
this.onUpdate({internet});
}
},
diff --git a/src/components/wizard-tunnel/wizard-tunnel.html b/src/components/wizard-tunnel/wizard-tunnel.html
new file mode 100644
index 0000000..57e4bcc
--- /dev/null
+++ b/src/components/wizard-tunnel/wizard-tunnel.html
@@ -0,0 +1,14 @@
+
diff --git a/src/components/wizard-tunnel/wizard-tunnel.js b/src/components/wizard-tunnel/wizard-tunnel.js
new file mode 100644
index 0000000..7807f38
--- /dev/null
+++ b/src/components/wizard-tunnel/wizard-tunnel.js
@@ -0,0 +1,66 @@
+import { copy, module } from 'angular';
+import { clone } from 'lodash';
+
+export default module('app.components.wizard-tunnel', [])
+ .component('wizardTunnel', {
+ bindings: {
+ tunnel: '<',
+ onUpdate: '&',
+ },
+ controller: class WizardTunnelCtrl {
+ constructor($scope) {
+ 'ngInject';
+
+ this.files = {};
+
+ this.tunnelConf = [
+ {
+ fileExtensions: '.ovpn,.cnf,.conf,text/*',
+ property: 'config',
+ required: true,
+ },
+ {
+ fileExtensions: '.crt,.cert,text/*',
+ property: 'cert',
+ },
+ {
+ fileExtensions: '.crt,.cert, text/*',
+ property: 'ca',
+ },
+ {
+ fileExtensions: '.key,text/*',
+ property: 'key',
+ },
+ {
+ fileExtensions: '.key,text/*',
+ property: 'tls-auth',
+ },
+ {
+ fileExtensions: '*',
+ property: 'auth-user-pass',
+ },
+ {
+ fileExtensions: '*',
+ property: 'secret',
+ },
+ ];
+
+ $scope.$watch('$ctrl.tunnel', this.updateFromInput.bind(this), true);
+ $scope.$watch('$ctrl.type', this.updateOutput.bind(this));
+ $scope.$watchCollection('$ctrl.files', this.updateOutput.bind(this));
+ }
+
+ updateFromInput() {
+ const tunnel = this.tunnel || {};
+
+ this.type = tunnel.type || 'openvpn';
+ copy(tunnel.files || {}, this.files);
+ }
+
+ updateOutput() {
+ const tunnel = {type: this.type, files: clone(this.files)};
+ this.onUpdate({tunnel});
+ }
+ },
+ template: require('./wizard-tunnel.html'),
+ });
diff --git a/src/components/wizard/wizard.html b/src/components/wizard/wizard.html
index 80b1999..4f5991f 100644
--- a/src/components/wizard/wizard.html
+++ b/src/components/wizard/wizard.html
@@ -71,8 +71,8 @@
diff --git a/src/components/wizard/wizard.js b/src/components/wizard/wizard.js
index d6455c9..57e6bb4 100644
--- a/src/components/wizard/wizard.js
+++ b/src/components/wizard/wizard.js
@@ -1,5 +1,5 @@
import { copy, module } from 'angular';
-import uiRouter from 'angular-ui-router';
+import uiRouter from '@uirouter/angularjs';
require('./wizard.less');
diff --git a/src/config/translate.js b/src/config/translate.js
index c2d4266..a384914 100644
--- a/src/config/translate.js
+++ b/src/config/translate.js
@@ -21,5 +21,5 @@ export default module('app.config.translate', [])
$translateProvider.determinePreferredLanguage();
// sanitize translations with $sanitize
- $translateProvider.useSanitizeValueStrategy('sanitize');
+ $translateProvider.useSanitizeValueStrategy('sanitizeParameters');
});
diff --git a/src/nls/locale-de.json b/src/nls/locale-de.json
index 796b30c..5124de4 100644
--- a/src/nls/locale-de.json
+++ b/src/nls/locale-de.json
@@ -25,9 +25,17 @@
"dropnotsupported": "Dein Browser unterstützt leider kein Drag and Drop für Dateiupload :("
}
},
+ "device": {
+ "headline": "Gerät",
+ "model": {
+ "label": "Modell"
+ },
+ "wireless": {
+ "label": "WLAN-Schnittstellen"
+ }
+ },
"basicRouterSetup": {
"headline": "Basis Router Einrichtung ",
- "model": "für {{model}}",
"routerName": {
"label": "Routername",
"placeholder": "funkenpumpe3000",
@@ -116,75 +124,96 @@
},
"offlineMsg" : "Du scheinst keine Verbindung zum Internet zu haben. Die Karte funktioniert nur, wenn du online bist. Du kannst deinen Standort manuell setzen oder dies später tun."
},
- "internetSharing": {
- "headline": "Internet teilen",
- "help": "Freifunk kann für lokale Dienste und den Zugang zum Internet genutzt werden. Letzteres wird erst dadurch ermöglicht, dass Menschen, die Router betreiben, ihre Internetverbindung teilen.",
+ "load-file-form": {
+ "cert": {
+ "label": "Zertifikat",
+ "select": "Zertifikatsdatei",
+ "error": {
+ "pattern": "Falsches Dateiformat oder falscher Dateiname. Nur Textdateien sind erlaubt."
+ }
+ },
+ "key": {
+ "label": "Schlüssel",
+ "select": "Schlüsseldatei",
+ "error": {
+ "pattern": "Falsches Dateiformat oder falscher Dateiname. Nur Textdateien sind erlaubt."
+ }
+ },
+ "tls-auth": {
+ "label": "TLS Auth Schlüssel",
+ "select": "Schlüsseldatei",
+ "error": {
+ "pattern": "Falsches Dateiformat oder falscher Dateiname. Nur Textdateien sind erlaubt."
+ }
+ },
+ "ca": {
+ "label": "CA Zertifikat",
+ "select": "Zertifikatsdatei",
+ "error": {
+ "pattern": "Falsches Dateiformat oder falscher Dateiname. Nur Textdateien sind erlaubt."
+ }
+ },
+ "secret": {
+ "label": "secret",
+ "select": "Zertifikatsdatei",
+ "error": {
+ "pattern": "Falsches Dateiformat oder falscher Dateiname. Nur Textdateien sind erlaubt."
+ }
+ },
+ "auth-user-pass": {
+ "label": "Auth User pass",
+ "select": "auth user pass Datei",
+ "error": {
+ "pattern": "Falsches Dateiformat oder falscher Dateiname. Nur Textdateien sind erlaubt."
+ }
+ },
+ "config": {
+ "label": "Konfiguration",
+ "select": ".ovpn Datei",
+ "customvpn": "Ich möchte einen anderen VPN Service nutzen. Dann benötigst du eine opnVPN Konfigurationsdatei von deinem Provider.",
+ "error": {
+ "pattern": "Falsches Dateiformat oder falscher Dateiname. Nur Textdateien sind erlaubt."
+ }
+ }
+ },
+ "internet": {
+ "headline": "Internet",
+ "help": "Du kannst deine vorhandene Internetverbindung nutzen, um den Internetzugang mit dem Freifunknetz zu teilen und/oder um dich mit anderen Freifunkroutern zu verbinden, die (noch) nicht über WLAN erreichbar sind. Verbinde dazu den Internet oder WAN-Anschluss deines Freifunkrouters mit deinem Internetrouter und konfiguriere es hier. ",
"shareInternet": {
"label": "Internet teilen",
"help": "Ja, ich möchte meine Internetverbindung mit dem Freifunknetz teilen.",
"thanks": "Danke fürs Teilen deiner Internetverbindung ❤"
},
- "limitspeed": {
- "label": "Geschwindigkeit beschränken.",
- "help": "Wir empfehlen keine Limits für den Datentransfer anzugeben. Solltest du später doch Probleme feststellen, kannst du immer noch die Übertragungsrate für deine geteilte Internetverbindung anpassen."
- },
- "transferSpeed": {
- "label": "Übertragungslimit",
- "help": "Du kannst die Schnelligkeit deiner aktuellen Verbindung hier überprüfen. Lass die folgenden Felder leer, wenn die Datenübertragung nicht limitieren möchtest.",
+ "speedLimit": {
+ "enabled": {
+ "label": "Geschwindigkeit beschränken.",
+ "help": "Wir empfehlen keine Limits für den Datentransfer anzugeben. Solltest du später doch Probleme feststellen, kannst du immer noch die Übertragungsrate für deine geteilte Internetverbindung anpassen."
+ },
+ "help": "Du kannst die Schnelligkeit deiner aktuellen Verbindung hier überprüfen. Lass die folgenden Felder leer, wenn die Datenübertragung nicht limitieren möchtest.",
"down": {
- "help": "Download Transfer Limit in Mbit/s."
+ "help": "Download Transfer Limit in Mbit/s."
},
"up": {
- "help": "Upload Transfer Limit in Mbit/s."
+ "help": "Upload Transfer Limit in Mbit/s."
}
},
- "antistoererhaftung": {
- "label": "VPN",
- "help": "Leitet deinen Internetverkehr über einen Tunnel zu einem anderen Server weiter."
+ "internetTunnel": {
+ "label": "Internettunnel",
+ "help": "Leite den Internetverkehr aus dem Freifunknetz über einen Tunnel über einen anderen Server. Mehr Informationen findest du unter Internet Tunnel."
},
- "meshvpn": {
- "label": "Mesh VPN",
- "help": "Verbindet Mesh-Wolken über Internettunnel. (Du kannst das einschalten, wenn dein Router nicht zu anderen Routern per Funk verbunden ist.)"
+ "meshTunnel": {
+ "label": "Meshtunnel",
+ "help": "Benutz deine Internetverbindung, um dich mit anderen Freifunkroutern zu verbinden, falls dein Freifunkrouter keine anderen oder nur wenige Freifunknachbarn über WLAN sehen kann. Mehr Informationen findest du unter Mesh Tunnel."
},
- "generateCertificate": {
+ "tunnel": {
"label": "VPN Zertifikat und Schlüssel für diesen Router.",
- "help": "Der Förderverein Freie Netzwerke betreibt den VPN03 um dich vor der Störerhaftung zu schützen. Wenn du hier den Haken setzt, werden automatisch Zertifikat und Schlüssel für den VPN03 generiert. Setzte den Haken nicht, wenn du bereits eine VPN03 Konfiguration hast oder einen anderen VPN Service nutzen möchtest.\n",
- "certificate": {
- "label": "VPN Zertifikat",
- "select": "Zertifikatsdatei",
- "error": {
- "pattern": "Falsches Dateiformat oder falscher Dateiname. Nur Textdateien sind erlaubt."
- }
- },
- "key": {
- "label": "VPN Schlüssel",
- "select": "Schlüsseldatei",
- "error": {
- "pattern": "Falsches Dateiformat oder falscher Dateiname. Nur Textdateien sind erlaubt."
- }
- },
- "takey": {
- "label": "TLS Auth Schlüssel",
- "select": "Schlüsseldatei",
- "error": {
- "pattern": "Falsches Dateiformat oder falscher Dateiname. Nur Textdateien sind erlaubt."
- }
- },
- "conf": {
- "label": "VPN Konfigurationsdatei",
- "select": ".ovpn Datei",
- "customvpn": "Ich möchte einen anderen VPN Service nutzen. Dann benötigst du eine opnVPN Konfigurationsdatei von deinem Provider.",
- "error": {
- "pattern": "Falsches Dateiformat oder falscher Dateiname. Nur Textdateien sind erlaubt."
- }
- },
"select": "Wähle eine Datei aus",
"browse": "Durchsuchen",
"error.required": "Die Datei ist erforderlich. Sie kann auch automatisch generiert werden, wenn du den Haken weiter oben setzt."
},
"vpninfo": {
"showlist": "VPN Provider Liste",
- "list": "Evernet eG stellt VPN für Freifunkas bereitIPredator stellt einen verschlüsselten Tunnel von deinem Computer zum Internet bereitFreifunk Rheinland ist Community ProviderFörderverein Freie Netzwerke betreibt unverschlüsselte VPN03 Server.Oder wähle einen anderen VPN Provider z.B. aus dieser Liste: http://www.vpnvergleich.net/"
+ "list": "
Evernet eG stellt VPN für Freifunkas bereitIPredator stellt einen verschlüsselten Tunnel von deinem Computer zum Internet bereitFreifunk Rheinland ist Community ProviderOder wähle einen anderen VPN Provider z.B. aus dieser Liste: http://www.vpnvergleich.net/"
}
},
"ip": {
@@ -209,11 +238,11 @@
"error.ipSubnet": "Das ist kein valides IPv4 Subnetz.",
"error.ipSubnetSmall": "Das IPv4 Subnetz darf nicht größer als /30 sein.",
"wifi": {
- "label": "Mesh {{index}}",
+ "label": "Mesh IP {{index}}",
"help": "Eine einzelne IPv4 Addresse für das WIfi Device {{name}}."
},
"lan": {
- "label": "Mesh 3",
+ "label": "Mesh IP LAN",
"help": "Eine einzelne IPv4 Adresse für das LAN Interface."
}
},
@@ -296,21 +325,63 @@
"configIncorrect": "Die Daten sind nicht korrekt. Bitte überprüfe die Felder die mit
markiert sind.",
"applysuccesful": "Deine Konfiguration wurde erfolgreich gespeichert! Yeah!",
"applyerror": "Deine Konfiguration konnte nicht gespeichert werden. Bitte schau in den Logs auf dem Router nach Details.",
- "uploaderror": "Deine Konfiguration konnte nicht zum Router geladen werden. Prüfe bitte deine Verbindung und deinen Router.",
"save": "Speichern & Neustarten",
"download": "Konfiguration herunterladen",
- "olsrinfo": {
- "headline": "OLSR Statusinformationen",
- "help": "Diese Tabelle zeigt die OLSR-Nachbarn.",
- "label": "Nachbarn",
- "urllabel": "URL zum Router",
+ "statusSystem": {
+ "headline": "Systemstatus",
+ "help": "Grundlegende Informationen zu deinem Router",
+ "noData": "Es konnten nicht alle Systemdaten geladen werden. Bitte überprüf die Verbindung zu deinem Router.",
+ "board": {
+ "title": "Hardware- und Softwaredetails",
+ "systemheadline": "System",
+ "hostname": "Hostname",
+ "system": "Chipsatz",
+ "model": "Modell",
+ "kernel": "Kernel",
+ "releaseheadline": "Betriebssystemversion",
+ "distribution": "Distribution",
+ "version": "Version",
+ "revision": "Revision",
+ "codename": "Codename",
+ "target": "Target",
+ "description": "Beschreibung"
+ },
+ "live": {
+ "status": "Livestatus",
+ "uptime": "Uptime",
+ "load": "Load",
+ "memory": "Arbeitsspeicher"
+ }
+ },
+ "statusOlsr": {
+ "headline": "OLSR Status",
+ "help": "Diese Seite zeigt OLSR Nachbarn, Routen und Schnittstellen",
"refresh": "Tabelle aktualisieren",
- "column": {
- "localip": "Lokale IP",
- "remoteip": "Entfernte IP",
- "lq": "Linkqualität",
- "nlq": "Linkqualität aus Sicht des Nachbarn",
- "etx" : "Linkkosten"
+ "neighbors": {
+ "title": "Nachbarn",
+ "noData": "Aktuell gibt es keine Daten von OLSR.",
+ "noNeighbors": "Aktuell sind keine Nachbarn vorhanden.",
+ "columns": {
+ "ipAddress": "IP",
+ "multiPointRelay": "Multi point relay",
+ "multiPointRelaySelector": "Multi point relay selector",
+ "symmetric": "Symmetric",
+ "twoHopNeighborCount": "2 hop neighbor count",
+ "willingness": "Willingness"
+ }
+ },
+ "links": {
+ "title": "Links",
+ "noData": "Aktuell gibt es keine Daten von OLSR.",
+ "noLinks": "Aktuell sind keine Verbindungen vorhanden.",
+ "columns": {
+ "localip": "Lokale IP",
+ "remoteip": "Entfernte IP",
+ "interface": "Schnittstelle",
+ "lq": "Linkqualität",
+ "nlq": "Linkqualität des Nachbarn",
+ "etx": "Linkkosten"
+ }
}
}
}
diff --git a/src/nls/locale-en.json b/src/nls/locale-en.json
index 3cbc5cd..1894748 100644
--- a/src/nls/locale-en.json
+++ b/src/nls/locale-en.json
@@ -3,7 +3,7 @@
"intro": "Freifunk Berlin",
"loadconfiglink": "Load existing config",
"loadrouterinfolink": "Refresh information from router",
- "description": "Freifunk is an independent, free and open community network built by volunteers.",
+ "description": "Freifunk is an independent, free, and open community network built by volunteers.",
"freifunk": "We agree to the
pico peering agreement, please read more about the
vision and our
memorandum of understanding",
"offlineWarning": {
"headline": "No internet connection",
@@ -124,21 +124,72 @@
},
"offlineMsg" : "Your internet connections seems offline. Using the map only works when you're online. You can add your location manually or do that later."
},
- "internetSharing": {
- "headline": "Internet sharing",
- "help": "Freifunk can be used for local services and grants access to the internet. This is possible because people within the network decide to share their internet connections.",
+ "load-file-form": {
+ "cert": {
+ "label": "Certificate",
+ "select": ".cert file",
+ "error": {
+ "pattern": "Wrong file format or name. Only text files are allowed."
+ }
+ },
+ "key": {
+ "label": "Key",
+ "select": ".key file",
+ "error": {
+ "pattern": "Wrong file format or name. Only text files are allowed."
+ }
+ },
+ "tls-auth": {
+ "label": "TLS Auth key",
+ "select": ".key file",
+ "error": {
+ "pattern": "Wrong file format or name. Only text files are allowed."
+ }
+ },
+ "ca": {
+ "label": "CA Certificate",
+ "select": ".cert file",
+ "error": {
+ "pattern": "Wrong file format or name. Only text files are allowed."
+ }
+ },
+ "secret": {
+ "label": "Secret",
+ "select": "secret file",
+ "error": {
+ "pattern": "Wrong file format or name. Only text files are allowed."
+ }
+ },
+ "auth-user-pass": {
+ "label": "Auth User pass",
+ "select": "auth user pass file",
+ "error": {
+ "pattern": "Wrong file format or name. Only text files are allowed."
+ }
+ },
+ "config": {
+ "label": "Configuration file",
+ "select": ".ovpn file",
+ "customvpn": "I want to use another VPN service. Then you need an opnVPN config file from your VPN provider.",
+ "error": {
+ "pattern": "Wrong file format or name. Only text files are allowed."
+ }
+ }
+ },
+ "internet": {
+ "headline": "Internet",
+ "help": "You can use your existing internet connection for sharing it in the Freifunk network or for connecting to other Freifunk routers that you can't reach via wifi (yet). Connect the
Internet or
WAN port of your Freifunk router to your internet router and configure ",
"shareInternet": {
"label": "Share internet",
"help": "Yes, I'd like to share my internet connection within the Freifunk network.",
"thanks": "Thank you for sharing your internet connection!"
},
- "limitspeed": {
- "label": "Limit speed",
- "help": "If you encounter speed problems, you can limit the data transfer rate of your shared connection. Our advice: start without any limits, you can adjust that later."
- },
- "transferSpeed": {
- "label": "Transfer limit",
- "help": "You can determine your current transfer speed
here. Leave the fields blank if you do not wish to limit the transfer speed.",
+ "speedLimit": {
+ "enabled": {
+ "label": "Limit speed",
+ "help": "You can limit the data transfer rate for Freifunk traffic on your internet connection. Our advice: start without any limits, you can adjust that later if you encounter speed problems."
+ },
+ "help": "You can determine your current transfer speed
here. You can leave a field blank if you only want to limit one direction.",
"down": {
"placeholder": "",
"help": "Download transfer limit in
Mbit/s."
@@ -148,53 +199,23 @@
"help": "Upload transfer limit in
Mbit/s."
}
},
- "antistoererhaftung": {
- "label": "VPN",
- "help": "Tunnels your internet traffic to a different server."
+ "internetTunnel": {
+ "label": "Internet tunnel",
+ "help": "Tunnels traffic from Freifunk to the internet via a different server. See
Internet Tunnel for more information."
},
- "meshvpn": {
- "label": "Mesh VPN",
- "help": "Connects mesh clouds via internet tunnel. (Use, if your router is not connected to the backbone via radio.)"
+ "meshTunnel": {
+ "label": "Mesh tunnel",
+ "help": "Use your internet connection to connect to other Freifunk routers in case your Freifunk router does not see any neighbors via wifi. See
Mesh Tunnel for more information."
},
- "generateCertificate": {
+ "tunnel": {
"label": "VPN certificate and key for this router",
- "help": "The
Förderverein Freie Netzwerke operates the
VPN03 servers for protecting yourself from the
Störerhaftung. If this option is enabled, the wizard automatically generates a new certificate and key for VPN03. Disable this option if you already have a VPN03 config or if you want to use another VPN service (OpenVPN).",
- "certificate": {
- "label": "VPN certificate",
- "select": ".cert file",
- "error": {
- "pattern": "Wrong file format or name. Only text files are allowed."
- }
- },
- "key": {
- "label": "VPN key",
- "select": ".key file",
- "error": {
- "pattern": "Wrong file format or name. Only text files are allowed."
- }
- },
- "takey": {
- "label": "TLS Auth key",
- "select": ".key file",
- "error": {
- "pattern": "Wrong file format or name. Only text files are allowed."
- }
- },
- "conf": {
- "label": "VPN configuration file",
- "select": ".ovpn file",
- "customvpn": "I want to use another VPN service. Then you need an opnVPN config file from your VPN provider.",
- "error": {
- "pattern": "Wrong file format or name. Only text files are allowed."
- }
- },
"select": "Select your file",
"browse": "Browse",
"error.required": "The file is required. It is generated automatically if you select the checkbox above."
},
"vpninfo": {
"showlist": "List VPN Providers",
- "list": "
Evernet eG is providing VPN for FreifunkasIPredator provides you with an encrypted tunnel from your computer to the Internet.Freifunk Rheinland acts as Community ProviderFörderverein Freie Netzwerke operates non encrypted VPN03 servers.Or choose an OpenVPN for example from this comparision: http://www.vpnvergleich.net/"
+ "list": "
Evernet eG is providing VPN for FreifunkasIPredator provides you with an encrypted tunnel from your computer to the Internet.Freifunk Rheinland acts as Community ProviderOr choose an OpenVPN for example from this comparision: http://www.vpnvergleich.net/"
}
},
"ip": {
diff --git a/webpack.config.js b/webpack.config.js
index 010175e..8aef058 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -68,7 +68,7 @@ module.exports = {
// less to css
test: /\.less$/,
loader: extractCss.extract({
- loader: ['css-loader?sourceMap', 'less-loader?sourceMap'],
+ use: ['css-loader?sourceMap', 'less-loader?sourceMap'],
}),
},
{