mirror of
https://github.com/Telecominfraproject/wlan-cloud-ucentralgw-ui.git
synced 2025-10-30 02:12:33 +00:00
Compare commits
45 Commits
v2.3.0-RC1
...
release/v2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a41f66f002 | ||
|
|
866036f323 | ||
|
|
6c4cbff1a6 | ||
|
|
6298d4f29a | ||
|
|
8f0828a394 | ||
|
|
8cbecc20bc | ||
|
|
e9562dcf82 | ||
|
|
750fa5be5e | ||
|
|
c4cfc76b2d | ||
|
|
e02f939cb8 | ||
|
|
2deebea6c8 | ||
|
|
fc2b1bb23c | ||
|
|
848d94bad1 | ||
|
|
4bde6e2d1f | ||
|
|
e7694b644f | ||
|
|
07b3ac967a | ||
|
|
c955bd9126 | ||
|
|
ee69783a66 | ||
|
|
b43c86520f | ||
|
|
0952f62bf0 | ||
|
|
44be7ec634 | ||
|
|
cddb0e94fa | ||
|
|
1a9fb77361 | ||
|
|
f7392461ad | ||
|
|
b567dc26f8 | ||
|
|
a08f84f5b3 | ||
|
|
b1277ff2ac | ||
|
|
aea1550a77 | ||
|
|
262c1fe1e2 | ||
|
|
2d1e684c69 | ||
|
|
5c6fb8b9ec | ||
|
|
a6be8b08c3 | ||
|
|
6503c1b84d | ||
|
|
1fc1588303 | ||
|
|
ae03c5c33e | ||
|
|
2d2603ff27 | ||
|
|
55881b0c5e | ||
|
|
adf752db85 | ||
|
|
d211669244 | ||
|
|
99af39db69 | ||
|
|
e707239d12 | ||
|
|
d349e43523 | ||
|
|
d52df89ab3 | ||
|
|
ae48518271 | ||
|
|
d7238881dc |
@@ -30,3 +30,13 @@ Create chart name and version as used by the chart label.
|
||||
{{- define "owgwui.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "owgwui.ingress.apiVersion" -}}
|
||||
{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1" -}}
|
||||
{{- print "networking.k8s.io/v1" -}}
|
||||
{{- else if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" -}}
|
||||
{{- print "networking.k8s.io/v1beta1" -}}
|
||||
{{- else -}}
|
||||
{{- print "extensions/v1beta1" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
@@ -26,6 +26,12 @@ spec:
|
||||
{{- with .Values.services.owgwui.labels }}
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- if .Values.podAnnotations }}
|
||||
annotations:
|
||||
{{- with .Values.podAnnotations }}
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
spec:
|
||||
|
||||
containers:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
{{- range $ingress, $ingressValue := .Values.ingresses }}
|
||||
{{- if $ingressValue.enabled }}
|
||||
---
|
||||
apiVersion: extensions/v1beta1
|
||||
apiVersion: {{ include "owgwui.ingress.apiVersion" $root }}
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: {{ include "owgwui.fullname" $root }}-{{ $ingress }}
|
||||
@@ -36,9 +36,23 @@ spec:
|
||||
paths:
|
||||
{{- range $ingressValue.paths }}
|
||||
- path: {{ .path }}
|
||||
{{- if $root.Capabilities.APIVersions.Has "networking.k8s.io/v1" }}
|
||||
pathType: {{ .pathType | default "ImplementationSpecific" }}
|
||||
{{- end }}
|
||||
backend:
|
||||
{{- if $root.Capabilities.APIVersions.Has "networking.k8s.io/v1" }}
|
||||
service:
|
||||
name: {{ include "owgwui.fullname" $root }}-{{ .serviceName }}
|
||||
port:
|
||||
{{- if kindIs "string" .servicePort }}
|
||||
name: {{ .servicePort }}
|
||||
{{- else }}
|
||||
number: {{ .servicePort }}
|
||||
{{- end }}
|
||||
{{- else }}
|
||||
serviceName: {{ include "owgwui.fullname" $root }}-{{ .serviceName }}
|
||||
servicePort: {{ .servicePort }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ fullnameOverride: ""
|
||||
images:
|
||||
owgwui:
|
||||
repository: tip-tip-wlan-cloud-ucentral.jfrog.io/owgw-ui
|
||||
tag: v2.3.0-RC1
|
||||
tag: v2.4.2
|
||||
pullPolicy: Always
|
||||
|
||||
services:
|
||||
@@ -48,6 +48,7 @@ ingresses:
|
||||
- chart-example.local
|
||||
paths:
|
||||
- path: /
|
||||
pathType: ImplementationSpecific
|
||||
serviceName: owgwui
|
||||
servicePort: http
|
||||
|
||||
@@ -69,6 +70,8 @@ tolerations: []
|
||||
|
||||
affinity: {}
|
||||
|
||||
podAnnotations: {}
|
||||
|
||||
# Application
|
||||
public_env_variables:
|
||||
DEFAULT_UCENTRALSEC_URL: https://ucentral.dpaas.arilia.com:16001
|
||||
|
||||
18
package-lock.json
generated
18
package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "ucentral-client",
|
||||
"version": "2.3.9",
|
||||
"version": "2.4.3",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "ucentral-client",
|
||||
"version": "2.3.9",
|
||||
"version": "2.4.3",
|
||||
"dependencies": {
|
||||
"@coreui/coreui": "^3.4.0",
|
||||
"@coreui/icons": "^2.0.1",
|
||||
@@ -32,7 +32,7 @@
|
||||
"react-tooltip": "^4.2.21",
|
||||
"react-widgets": "^5.1.1",
|
||||
"sass": "^1.35.1",
|
||||
"ucentral-libs": "^0.9.98",
|
||||
"ucentral-libs": "^1.0.37",
|
||||
"uuid": "^8.3.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -14842,9 +14842,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/ucentral-libs": {
|
||||
"version": "0.9.98",
|
||||
"resolved": "https://registry.npmjs.org/ucentral-libs/-/ucentral-libs-0.9.98.tgz",
|
||||
"integrity": "sha512-Fwn0sqFS2u5bIN5gtbslgAZnki2J4iz6ucGVJmKdvghm+E45+KYFC2yGWGNlBfBkKIsSDlSIIhQHFEo0JTTCZg==",
|
||||
"version": "1.0.37",
|
||||
"resolved": "https://registry.npmjs.org/ucentral-libs/-/ucentral-libs-1.0.37.tgz",
|
||||
"integrity": "sha512-ALQobos6DIvXEydPotUixP7AZaDlUm2qUFkvR8F0EsdeSAW1UeYEg7Gp5r6RtxUqxp6DKpPCxOQ9bcqcl5556g==",
|
||||
"dependencies": {
|
||||
"@coreui/coreui": "^3.4.0",
|
||||
"@coreui/icons": "^2.0.1",
|
||||
@@ -27716,9 +27716,9 @@
|
||||
}
|
||||
},
|
||||
"ucentral-libs": {
|
||||
"version": "0.9.98",
|
||||
"resolved": "https://registry.npmjs.org/ucentral-libs/-/ucentral-libs-0.9.98.tgz",
|
||||
"integrity": "sha512-Fwn0sqFS2u5bIN5gtbslgAZnki2J4iz6ucGVJmKdvghm+E45+KYFC2yGWGNlBfBkKIsSDlSIIhQHFEo0JTTCZg==",
|
||||
"version": "1.0.37",
|
||||
"resolved": "https://registry.npmjs.org/ucentral-libs/-/ucentral-libs-1.0.37.tgz",
|
||||
"integrity": "sha512-ALQobos6DIvXEydPotUixP7AZaDlUm2qUFkvR8F0EsdeSAW1UeYEg7Gp5r6RtxUqxp6DKpPCxOQ9bcqcl5556g==",
|
||||
"requires": {
|
||||
"@coreui/coreui": "^3.4.0",
|
||||
"@coreui/icons": "^2.0.1",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ucentral-client",
|
||||
"version": "2.3.9",
|
||||
"version": "2.4.3",
|
||||
"dependencies": {
|
||||
"@coreui/coreui": "^3.4.0",
|
||||
"@coreui/icons": "^2.0.1",
|
||||
@@ -26,7 +26,7 @@
|
||||
"react-tooltip": "^4.2.21",
|
||||
"react-widgets": "^5.1.1",
|
||||
"sass": "^1.35.1",
|
||||
"ucentral-libs": "^0.9.98",
|
||||
"ucentral-libs": "^1.0.37",
|
||||
"uuid": "^8.3.2"
|
||||
},
|
||||
"main": "index.js",
|
||||
|
||||
@@ -52,8 +52,10 @@
|
||||
"commands_executed": "Ausgeführte Befehle",
|
||||
"compatible": "kompatibel",
|
||||
"completed": "Abgeschlossen",
|
||||
"concurrent_devices": "Gleichzeitige Geräte",
|
||||
"config_id": "Konfigurations ID",
|
||||
"confirm": "Bestätigen",
|
||||
"confirm_stop_editing": "Möchten Sie die Bearbeitung wirklich beenden? Dadurch werden alle nicht gespeicherten Änderungen, die Sie vorgenommen haben, verworfen.",
|
||||
"connected": "Verbindung wurde hergestellt",
|
||||
"copied": "kopiert!",
|
||||
"copy_to_clipboard": "In die Zwischenablage kopieren",
|
||||
@@ -71,7 +73,7 @@
|
||||
"details": "Einzelheiten",
|
||||
"device": "Gerät #{{serialNumber}}",
|
||||
"device_dashboard": "Geräte-Dashboard",
|
||||
"device_delete": "Gerät Nr.{{serialNumber}}löschen",
|
||||
"device_delete": "#{{serialNumber}}löschen",
|
||||
"device_deleted": "Gerät erfolgreich gelöscht",
|
||||
"device_health": "Gerätezustand",
|
||||
"device_list": "Liste der Geräte",
|
||||
@@ -102,17 +104,21 @@
|
||||
"forgot_password_title": "Passwort vergessen",
|
||||
"from": "Von",
|
||||
"general_error": "API-Fehler, wenden Sie sich bitte an Ihren Administrator",
|
||||
"go_back": "Geh zurück",
|
||||
"hide": "verbergen",
|
||||
"hour": "stunde",
|
||||
"hours": "std",
|
||||
"id": "ID",
|
||||
"invalid_credentials": "Ungültiger Benutzername und / oder Passwort",
|
||||
"invalid_file": "Die ausgewählte Datei war ungültig, bitte lesen Sie die Anweisungen und passen Sie Ihre Datei entsprechend an",
|
||||
"invalid_password": "Dieses Passwort entspricht nicht den grundlegenden Passwortregeln. Bitte besuchen Sie unsere Seite Passwortrichtlinien, um mehr zu erfahren",
|
||||
"invalid_pem": "Ihre PEM-Datei ist ungültig. Es sollte mit '-----BEGIN CERTIFICATE-----' ODER '-----BEGIN PRIVATE KEY-----' beginnen und mit '-----END CERTIFICATE--- enden. --' ODER '-----END PRIVATSCHLÜSSEL-----'",
|
||||
"ip_address": "IP Adresse",
|
||||
"ips": "IPs",
|
||||
"item": "Artikel",
|
||||
"items": "Artikel",
|
||||
"items_per_page": "Objekte pro Seite:",
|
||||
"key": "Schlüssel",
|
||||
"last_dashboard_refresh": "Letzte Dashboard-Aktualisierung",
|
||||
"later_tonight": "Später am Abend",
|
||||
"latest": "Neueste",
|
||||
@@ -121,8 +127,10 @@
|
||||
"loading_more_ellipsis": "Mehr laden ...",
|
||||
"logout": "Ausloggen",
|
||||
"mac": "MAC-Adresse",
|
||||
"main": "Main",
|
||||
"manufacturer": "Hersteller",
|
||||
"memory_used": "Verwendeter Speicher",
|
||||
"min_max": "Min: {{min}}, Max: {{max}}",
|
||||
"minute": "Minute",
|
||||
"minutes": "protokoll",
|
||||
"modified": "Geändert",
|
||||
@@ -155,7 +163,9 @@
|
||||
"second": "zweite",
|
||||
"seconds": "sekunden",
|
||||
"seconds_elapsed": "Sekunden verstrichen",
|
||||
"see_details": "Siehe Einzelheiten",
|
||||
"select": "wählen",
|
||||
"serial_num": "Seriennummer",
|
||||
"serial_number": "Seriennummer",
|
||||
"show_all": "Zeige alles",
|
||||
"socket_connection_closed": "Verbindung geschlossen!",
|
||||
@@ -205,6 +215,7 @@
|
||||
"device_password": "Passwort",
|
||||
"device_type": "Gerätetyp",
|
||||
"device_types": "Gerätetypen",
|
||||
"devices_affected": "Von dieser Konfiguration betroffene Geräte:",
|
||||
"edit_configuration": "Konfiguration bearbeiten",
|
||||
"error_delete": "Fehler beim Versuch zu löschen: {{error}}",
|
||||
"error_fetching_config": "Fehler beim Abrufen der Konfiguration",
|
||||
@@ -232,6 +243,7 @@
|
||||
"used_by": "Benutzt von",
|
||||
"used_by_details": "{{entities}} Entitäten, {{venues}} Veranstaltungsorte und {{devices}} Geräte",
|
||||
"uuid": "Konfigurations-ID",
|
||||
"view_affected_devices": "Betroffene Geräte anzeigen",
|
||||
"view_config": "Konfiguration anzeigen",
|
||||
"view_in_use": "In Verwendung anzeigen",
|
||||
"view_json": "Rohe Konfiguration anzeigen"
|
||||
@@ -250,6 +262,7 @@
|
||||
"access_pin": "Zugangs-PIN",
|
||||
"add_contact": "Kontakt hinzufügen",
|
||||
"create_contact": "Kontakt erstellen",
|
||||
"currently_selected_contact": "Aktuell ausgewählter Kontakt: {{contact}}",
|
||||
"delete": "Kontakt löschen?",
|
||||
"error_assign": "Fehler beim Versuch, Kontakt zuzuweisen: {{error}}",
|
||||
"error_creation": "Fehler beim Versuch, einen Kontakt zu erstellen: {{error}}",
|
||||
@@ -287,8 +300,12 @@
|
||||
"healthchecks_title": "Healthchecks löschen"
|
||||
},
|
||||
"device": {
|
||||
"certificate_explanation": "Zertifikate der angeschlossenen Geräte",
|
||||
"error_fetching_device": "Fehler beim Abrufen der Geräteinformationen: {{error}}",
|
||||
"error_fetching_devices": "Fehler beim Abrufen von Geräten: {{error}}"
|
||||
"error_fetching_devices": "Fehler beim Abrufen von Geräten: {{error}}",
|
||||
"health_explanation": "Zustand der angeschlossenen Geräte",
|
||||
"memory_explanation": "Von angeschlossenen Geräten belegter Speicher",
|
||||
"uptimes_explanation": "Zeit, zu der verbundene Geräte aktiv und verbunden waren"
|
||||
},
|
||||
"device_logs": {
|
||||
"log": "Protokoll",
|
||||
@@ -309,10 +326,12 @@
|
||||
"delete_warning": "Achtung: Dieser Vorgang kann nicht rückgängig gemacht werden",
|
||||
"edit_failure": "Aktualisierung fehlgeschlagen : {{error}}",
|
||||
"enter_here": "Geben Sie hier die IP(s) ein, die Sie hinzufügen möchten",
|
||||
"entire_tree": "Seitenverzeichnis",
|
||||
"entities": "Entitäten",
|
||||
"entity": "Entität",
|
||||
"error_fetch_entity": "Fehler beim Abrufen von Entitätsinformationen",
|
||||
"error_fetching": "Fehler beim Abrufen von Entitäten",
|
||||
"error_fetching_map": "Fehler beim Abrufen der Karte: {{error}}",
|
||||
"error_saving": "Fehler beim Speichern der Entität",
|
||||
"higher_priority": "Stellen Sie eine höhere Priorität ein",
|
||||
"ip_detection": "IP-Erkennung",
|
||||
@@ -324,6 +343,7 @@
|
||||
"only_unassigned": "Nur nicht zugewiesen",
|
||||
"select_entity": "Wählen Sie diese Entität aus",
|
||||
"selected_entity": "Ausgewählte Einheit",
|
||||
"selected_map": "Ausgewählte Karte",
|
||||
"update_failure_error": "Fehler beim Versuch, die Entität zu aktualisieren: {{error}}",
|
||||
"valid_serial": "Muss eine gültige Seriennummer sein (12 HEX-Zeichen)",
|
||||
"venues": "Veranstaltungsorte"
|
||||
@@ -336,6 +356,7 @@
|
||||
"warning": "Achtung: Nach dem Absenden kann dies nicht rückgängig gemacht werden"
|
||||
},
|
||||
"firmware": {
|
||||
"age_explanation": "Durchschnittliche Anzahl der Tage für alle Geräte, von denen wir diesen Wert erhalten können",
|
||||
"average_age": "Durchschnittliches Firmware-Alter",
|
||||
"choose_custom": "Wählen",
|
||||
"details_title": "Bild #{{image}} Details",
|
||||
@@ -348,9 +369,11 @@
|
||||
"image": "Bild",
|
||||
"image_date": "Bilddatum",
|
||||
"installed_firmware": "Installierte Firmware",
|
||||
"latest_explanation": "Geräte, auf denen erkannte Firmware in der neuesten Version ausgeführt wird",
|
||||
"latest_version_installed": "Neueste Version installiert Version",
|
||||
"newer_firmware_available": "Neuere Versionen verfügbar",
|
||||
"reinstall_latest": "Neu installieren",
|
||||
"release": "Veröffentlichung",
|
||||
"revision": "Revision",
|
||||
"show_dev": "Dev-Releases anzeigen",
|
||||
"size": "Größe",
|
||||
@@ -457,7 +480,8 @@
|
||||
"unassigned_deleted_devices": "{{number}} Geräte gelöscht und nicht zugewiesen",
|
||||
"unassigned_tags": "Nicht zugewiesene Tags",
|
||||
"validating_import_file": "Importdatei und -daten werden validiert...",
|
||||
"venue": "Tagungsort"
|
||||
"venue": "Tagungsort",
|
||||
"view_in_gateway": "Im Gateway anzeigen"
|
||||
},
|
||||
"location": {
|
||||
"add": "Ort hinzufügen",
|
||||
@@ -465,13 +489,16 @@
|
||||
"city": "Stadt",
|
||||
"country": "Land",
|
||||
"create": "Standort erstellen",
|
||||
"currently_selected": "Aktuell ausgewählter Standort: {{location}}",
|
||||
"delete": "Ort löschen?",
|
||||
"error_assign": "Fehler beim Versuch, den Standort zuzuweisen: {{error}}",
|
||||
"error_creation": "Fehler beim Versuch, Standorte zu erstellen: {{error}}",
|
||||
"error_delete": "Fehler beim Löschen des Standorts: {{error}}",
|
||||
"error_fetching_single": "Fehler beim Versuch, den Standort abzurufen: {{error}}",
|
||||
"geocode": "GeoCode",
|
||||
"mobiles": "MOBILES",
|
||||
"no_associated": "Kein zugeordneter Standort",
|
||||
"phones": "Telefone",
|
||||
"postal": "Postleitzahl",
|
||||
"search": "Suchen Sie nach Standorten, um die Felder unten automatisch auszufüllen",
|
||||
"state": "Zustand",
|
||||
@@ -533,6 +560,59 @@
|
||||
"settings": {
|
||||
"title": "die Einstellungen"
|
||||
},
|
||||
"simulation": {
|
||||
"add": "Simulation hinzufügen",
|
||||
"cancel": "Stornieren",
|
||||
"cancel_success": "Simulationslauf erfolgreich abgebrochen!",
|
||||
"check_ongoing_sims": "Folge laufender Sim",
|
||||
"client_interval": "Kundenintervall",
|
||||
"delete_simulation": "Sim löschen. {{name}}",
|
||||
"end": "Endete",
|
||||
"error_creating": "Fehler beim Erstellen der Simulation: {{error}}",
|
||||
"error_delete": "Fehler beim Löschen der Simulation: {{error}}",
|
||||
"error_devices": "Fehler Geräte",
|
||||
"error_edit": "Fehler beim Versuch, die Simulation zu speichern: {{error}}",
|
||||
"error_edit_run": "Fehler beim Versuch, den Ausführungsstatus zu ändern: {{error}}",
|
||||
"error_fetching_simulations": "Fehler beim Abrufen der Simulationen: {{error}}",
|
||||
"error_start_run": "Fehler beim Versuch, einen Simulationslauf zu starten: {{error}}",
|
||||
"gateway": "Tor",
|
||||
"healtcheck_interval": "Healthcheck-Intervall",
|
||||
"keep_alive": "Bleib am Leben",
|
||||
"last_refresh": "Letzte Aktualisierung",
|
||||
"length": "Länge",
|
||||
"live_devices": "Live-Geräte",
|
||||
"mac_prefix": "MAC-Präfix",
|
||||
"max_associations": "max. Verbände",
|
||||
"max_clients": "Max. Kunden",
|
||||
"messages_transmitted": "Gesendete Nachrichten",
|
||||
"min_associations": "Mindest. Verbände",
|
||||
"min_clients": "Mindest. Kunden",
|
||||
"pause": "Pause",
|
||||
"pause_success": "Lauf pausiert!",
|
||||
"prefix_length": "Erforderlich, muss eine Länge von 6 Zeichen haben",
|
||||
"previous_runs": "Vorherige Läufe",
|
||||
"received": "empfangen",
|
||||
"received_messages": "Erhaltene Nachrichten",
|
||||
"reconnect_interval": "Wiederverbindungsintervall",
|
||||
"resume": "Fortsetzen",
|
||||
"resume_success": "Lauf wieder aufgenommen!",
|
||||
"run": "Simulationslauf",
|
||||
"run_simulation": "Simulation ausführen",
|
||||
"started": "gestartet",
|
||||
"state_interval": "Zustandsintervall",
|
||||
"stop": "Halt",
|
||||
"stop_success": "Lauf gestoppt!",
|
||||
"success_creating": "Simulation erfolgreich erstellt!",
|
||||
"success_run_start": "Erfolgreich gestarteter Lauf!",
|
||||
"successful_delete": "Simulation erfolgreich gelöscht!",
|
||||
"successful_edit": "Erfolgreich bearbeitete Simulation!",
|
||||
"threads": "Themen",
|
||||
"time_full_devices": "Zeit für volle Geräte",
|
||||
"title": "Simulationen",
|
||||
"transmitted": "Übertragen",
|
||||
"valid_cert": "Gültiges Zertifikat",
|
||||
"valid_key": "Gültiger Schlüssel"
|
||||
},
|
||||
"statistics": {
|
||||
"data": "Daten (KB)",
|
||||
"latest_statistics": "Neueste Statistiken",
|
||||
@@ -606,7 +686,7 @@
|
||||
"check_phone": "Bitte überprüfen Sie Ihr Telefon auf Ihren Validierungscode",
|
||||
"confirm_new_password": "Bestätige neues Passwort",
|
||||
"create": "Benutzer erstellen",
|
||||
"create_failure": "Fehler beim Erstellen des Benutzers. Bitte stellen Sie sicher, dass diese E-Mail-Adresse nicht bereits mit einem Konto verknüpft ist.",
|
||||
"create_failure": "Fehler beim Erstellen des Benutzers: {{error}}",
|
||||
"create_success": "Benutzer erfolgreich erstellt",
|
||||
"creating": "Benutzer erstellen ...",
|
||||
"delete_avatar": "Avatar löschen",
|
||||
@@ -620,6 +700,7 @@
|
||||
"email_address": "E-Mail-Addresse",
|
||||
"enter_new_phone": "Geben Sie Ihre neue Telefonnummer ein:",
|
||||
"error_fetching_users": "Fehler beim Abrufen der Nutzer: {{error}}",
|
||||
"error_retrieving": "Fehler beim Abrufen des Benutzers",
|
||||
"error_sending_code": "Fehler beim Versuch, den Validierungscode zu senden. Bitte bestätigen Sie, dass Ihre Telefonnummer gültig ist.",
|
||||
"force_password_change": "Passwortänderung bei der Anmeldung erzwingen",
|
||||
"id": "Benutzeridentifikation.",
|
||||
|
||||
@@ -52,8 +52,10 @@
|
||||
"commands_executed": "Commands Executed",
|
||||
"compatible": "Compatible",
|
||||
"completed": "Completed",
|
||||
"concurrent_devices": "Concurrent Devices",
|
||||
"config_id": "Config. Id",
|
||||
"confirm": "Confirm",
|
||||
"confirm_stop_editing": "Are you sure you want to stop editing? This will cancel any unsaved changes you have made.",
|
||||
"connected": "Connected",
|
||||
"copied": "Copied!",
|
||||
"copy_to_clipboard": "Copy to clipboard",
|
||||
@@ -71,7 +73,7 @@
|
||||
"details": "Details",
|
||||
"device": "Device #{{serialNumber}}",
|
||||
"device_dashboard": "Device Dashboard",
|
||||
"device_delete": "Delete Device #{{serialNumber}}",
|
||||
"device_delete": "Delete #{{serialNumber}}",
|
||||
"device_deleted": "Device Successfully Deleted",
|
||||
"device_health": "Device Health",
|
||||
"device_list": "List of Devices",
|
||||
@@ -102,17 +104,21 @@
|
||||
"forgot_password_title": "Forgot Password",
|
||||
"from": "From",
|
||||
"general_error": "API Error, please consult your administrator",
|
||||
"go_back": "Go Back",
|
||||
"hide": "Hide",
|
||||
"hour": "hour",
|
||||
"hours": "hours",
|
||||
"id": "Id",
|
||||
"invalid_credentials": "Invalid username and/or password",
|
||||
"invalid_file": "The chosen file was invalid, please read the instructions and adjust your file accordingly",
|
||||
"invalid_password": "This password does not confirm to basic password rules. Please visit our Password Policy page to learn more",
|
||||
"invalid_pem": "Your .pem file is invalid. It should start with '-----BEGIN CERTIFICATE-----' OR '-----BEGIN PRIVATE KEY-----' and it should end with '-----END CERTIFICATE-----' OR '-----END PRIVATE KEY-----'",
|
||||
"ip_address": "IP Address",
|
||||
"ips": "IPs",
|
||||
"item": "Item",
|
||||
"items": "Items",
|
||||
"items_per_page": "Items per page: ",
|
||||
"key": "Key",
|
||||
"last_dashboard_refresh": "Last Dashboard Refresh",
|
||||
"later_tonight": "Later tonight",
|
||||
"latest": "Latest",
|
||||
@@ -121,8 +127,10 @@
|
||||
"loading_more_ellipsis": "Loading more...",
|
||||
"logout": "Logout",
|
||||
"mac": "MAC Address",
|
||||
"main": "Main",
|
||||
"manufacturer": "Manufacturer",
|
||||
"memory_used": "Memory Used",
|
||||
"min_max": "Min: {{min}}, Max: {{max}}",
|
||||
"minute": "minute",
|
||||
"minutes": "minutes",
|
||||
"modified": "Modified",
|
||||
@@ -155,7 +163,9 @@
|
||||
"second": "second",
|
||||
"seconds": "seconds",
|
||||
"seconds_elapsed": "Seconds elapsed",
|
||||
"see_details": "See Details",
|
||||
"select": "Select",
|
||||
"serial_num": "Serial #",
|
||||
"serial_number": "Serial Number",
|
||||
"show_all": "Show All",
|
||||
"socket_connection_closed": "Connection closed!",
|
||||
@@ -205,6 +215,7 @@
|
||||
"device_password": "Password",
|
||||
"device_type": "Device Type",
|
||||
"device_types": "Device Types",
|
||||
"devices_affected": "Devices affected by this configuration: ",
|
||||
"edit_configuration": "Edit Configuration",
|
||||
"error_delete": "Error while trying to delete: {{error}}",
|
||||
"error_fetching_config": "Error while fetching configuration",
|
||||
@@ -232,6 +243,7 @@
|
||||
"used_by": "Used By",
|
||||
"used_by_details": "{{entities}} Entities, {{venues}} Venues and {{devices}} Devices",
|
||||
"uuid": "Config ID",
|
||||
"view_affected_devices": "View Affected Devices",
|
||||
"view_config": "View Configuration",
|
||||
"view_in_use": "View In Use",
|
||||
"view_json": "View raw JSON"
|
||||
@@ -250,6 +262,7 @@
|
||||
"access_pin": "Access PIN",
|
||||
"add_contact": "Add Contact",
|
||||
"create_contact": "Create Contact",
|
||||
"currently_selected_contact": "Currently Selected Contact: {{contact}}",
|
||||
"delete": "Delete Contact?",
|
||||
"error_assign": "Error while trying to assign contact: {{error}}",
|
||||
"error_creation": "Error while trying to create contact: {{error}}",
|
||||
@@ -287,8 +300,12 @@
|
||||
"healthchecks_title": "Delete Healthchecks"
|
||||
},
|
||||
"device": {
|
||||
"certificate_explanation": "Certificates of connected devices",
|
||||
"error_fetching_device": "Error fetching device information: {{error}}",
|
||||
"error_fetching_devices": "Error while fetching devices: {{error}}"
|
||||
"error_fetching_devices": "Error while fetching devices: {{error}}",
|
||||
"health_explanation": "Health of connected devices",
|
||||
"memory_explanation": "Memory used by connected devices",
|
||||
"uptimes_explanation": "Time connected devices have been up and connected"
|
||||
},
|
||||
"device_logs": {
|
||||
"log": "Log",
|
||||
@@ -309,10 +326,12 @@
|
||||
"delete_warning": "Warning: this operation cannot be reverted",
|
||||
"edit_failure": "Update unsuccessful : {{error}}",
|
||||
"enter_here": "Enter the IP(s) you'd like to add here",
|
||||
"entire_tree": "Site Map",
|
||||
"entities": "Entities",
|
||||
"entity": "Entity",
|
||||
"error_fetch_entity": "Error while fetching entity information",
|
||||
"error_fetching": "Error while fetching entities",
|
||||
"error_fetching_map": "Error fetching map: {{error}}",
|
||||
"error_saving": "Error while saving entity",
|
||||
"higher_priority": "Make Higher Priority",
|
||||
"ip_detection": "IP Detection",
|
||||
@@ -324,6 +343,7 @@
|
||||
"only_unassigned": "Only Unassigned",
|
||||
"select_entity": "Select this Entity",
|
||||
"selected_entity": "Selected Entity",
|
||||
"selected_map": "Selected Map",
|
||||
"update_failure_error": "Error while trying to update entity: {{error}}",
|
||||
"valid_serial": "Needs to be a valid serial number (12 HEX characters)",
|
||||
"venues": "Venues"
|
||||
@@ -336,6 +356,7 @@
|
||||
"warning": "Warning: Once you submit this cannot be reverted"
|
||||
},
|
||||
"firmware": {
|
||||
"age_explanation": "Average number of days for all devices from which we can obtain that value",
|
||||
"average_age": "Average Firmware Age",
|
||||
"choose_custom": "Choose",
|
||||
"details_title": "Image #{{image}} Details",
|
||||
@@ -348,9 +369,11 @@
|
||||
"image": "Image",
|
||||
"image_date": "Image Date",
|
||||
"installed_firmware": "Installed Firmware",
|
||||
"latest_explanation": "Devices running recognized firmware at its latest version",
|
||||
"latest_version_installed": "Latest Version Installed",
|
||||
"newer_firmware_available": "Newer Revisions Available",
|
||||
"reinstall_latest": "Reinstall ",
|
||||
"release": "Release",
|
||||
"revision": "Revision",
|
||||
"show_dev": "Show Dev Releases",
|
||||
"size": "Size",
|
||||
@@ -457,7 +480,8 @@
|
||||
"unassigned_deleted_devices": "{{number}} Devices Deleted and Unassigned",
|
||||
"unassigned_tags": "Unassigned tags",
|
||||
"validating_import_file": "Validating import file and data...",
|
||||
"venue": "Venue"
|
||||
"venue": "Venue",
|
||||
"view_in_gateway": "Details in Gateway"
|
||||
},
|
||||
"location": {
|
||||
"add": "Add Location",
|
||||
@@ -465,13 +489,16 @@
|
||||
"city": "City",
|
||||
"country": "Country",
|
||||
"create": "Create Location",
|
||||
"currently_selected": "Currently Selected Location: {{location}}",
|
||||
"delete": "Delete Location?",
|
||||
"error_assign": "Error while trying to assign location: {{error}}",
|
||||
"error_creation": "Error while trying to create locations: {{error}}",
|
||||
"error_delete": "Error while deleting location: {{error}}",
|
||||
"error_fetching_single": "Error while trying to fetch location: {{error}}",
|
||||
"geocode": "GeoCode",
|
||||
"mobiles": "Mobiles",
|
||||
"no_associated": "No Associated Location",
|
||||
"phones": "Phones",
|
||||
"postal": "ZIP/Postal Code",
|
||||
"search": "Search locations to auto fill the fields below",
|
||||
"state": "State",
|
||||
@@ -533,6 +560,59 @@
|
||||
"settings": {
|
||||
"title": "Settings"
|
||||
},
|
||||
"simulation": {
|
||||
"add": "Add Simulation",
|
||||
"cancel": "Cancel",
|
||||
"cancel_success": "Simulation Run Successfully Cancelled!",
|
||||
"check_ongoing_sims": "Follow Ongoing Sim",
|
||||
"client_interval": "Client Interval",
|
||||
"delete_simulation": "Delete Sim. {{name}}",
|
||||
"end": "Ended",
|
||||
"error_creating": "Error creating simulation: {{error}}",
|
||||
"error_delete": "Error while deleting simulation: {{error}}",
|
||||
"error_devices": "Error Devices",
|
||||
"error_edit": "Error while trying to save simulation: {{error}}",
|
||||
"error_edit_run": "Error while trying to change run state: {{error}}",
|
||||
"error_fetching_simulations": "Error fetching simulations: {{error}}",
|
||||
"error_start_run": "Error while trying to start a simulation run: {{error}}",
|
||||
"gateway": "Gateway",
|
||||
"healtcheck_interval": "Healthcheck Interval",
|
||||
"keep_alive": "Keep Alive",
|
||||
"last_refresh": "Last Refresh",
|
||||
"length": "Length",
|
||||
"live_devices": "Live Devices",
|
||||
"mac_prefix": "MAC Prefix",
|
||||
"max_associations": "Max. Associations",
|
||||
"max_clients": "Max. Clients",
|
||||
"messages_transmitted": "Messages Transmitted",
|
||||
"min_associations": "Min. Associations",
|
||||
"min_clients": "Min. Clients",
|
||||
"pause": "Pause",
|
||||
"pause_success": "Run Paused!",
|
||||
"prefix_length": "Required, needs to be of a length of 6 characters",
|
||||
"previous_runs": "Previous Runs",
|
||||
"received": "Received",
|
||||
"received_messages": "Messages Received",
|
||||
"reconnect_interval": "Reconnect Interval",
|
||||
"resume": "Resume",
|
||||
"resume_success": "Run Resumed!",
|
||||
"run": "Simulation Run",
|
||||
"run_simulation": "Run Simulation",
|
||||
"started": "Started",
|
||||
"state_interval": "State Interval",
|
||||
"stop": "Stop",
|
||||
"stop_success": "Run Stopped!",
|
||||
"success_creating": "Simulation Successfully Created!",
|
||||
"success_run_start": "Successfully Started Run!",
|
||||
"successful_delete": "Successfully Deleted Simulation!",
|
||||
"successful_edit": "Successfully Edited Simulation!",
|
||||
"threads": "Threads",
|
||||
"time_full_devices": "Time to Full Devices",
|
||||
"title": "Simulations",
|
||||
"transmitted": "Transmitted",
|
||||
"valid_cert": "Valid Certificate",
|
||||
"valid_key": "Valid Key"
|
||||
},
|
||||
"statistics": {
|
||||
"data": "Data (KB)",
|
||||
"latest_statistics": "Latest Statistics",
|
||||
@@ -606,7 +686,7 @@
|
||||
"check_phone": "Please check your phone for your validation code",
|
||||
"confirm_new_password": "Confirm New Password",
|
||||
"create": "Create User",
|
||||
"create_failure": "Error while creating user. Please make sure this email address is not already linked to an account.",
|
||||
"create_failure": "Error while creating user: {{error}}",
|
||||
"create_success": "User Created Successfully",
|
||||
"creating": "Creating User...",
|
||||
"delete_avatar": "Delete Avatar",
|
||||
@@ -620,6 +700,7 @@
|
||||
"email_address": "Email Address",
|
||||
"enter_new_phone": "Enter your new phone number: ",
|
||||
"error_fetching_users": "Error fetching users: {{error}}",
|
||||
"error_retrieving": "Error retrieving user",
|
||||
"error_sending_code": "Error while trying to send validation code. Please confirm that your phone number is valid.",
|
||||
"force_password_change": "Force Password Change on Login",
|
||||
"id": "User Id.",
|
||||
|
||||
@@ -52,8 +52,10 @@
|
||||
"commands_executed": "Comandos ejecutados",
|
||||
"compatible": "Compatible",
|
||||
"completed": "terminado",
|
||||
"concurrent_devices": "Dispositivos concurrentes",
|
||||
"config_id": "Config. Identificación",
|
||||
"confirm": "Confirmar",
|
||||
"confirm_stop_editing": "¿Estás seguro de que quieres dejar de editar? Esto cancelará cualquier cambio no guardado que haya realizado.",
|
||||
"connected": "Conectado",
|
||||
"copied": "Copiado!",
|
||||
"copy_to_clipboard": "Copiar al portapapeles",
|
||||
@@ -71,7 +73,7 @@
|
||||
"details": "Detalles",
|
||||
"device": "Dispositivo n.º{{serialNumber}}",
|
||||
"device_dashboard": "Panel de control del dispositivo",
|
||||
"device_delete": "Eliminar dispositivo n.º{{serialNumber}}",
|
||||
"device_delete": "Eliminar #{{serialNumber}}",
|
||||
"device_deleted": "Dispositivo eliminado correctamente",
|
||||
"device_health": "Salud del dispositivo",
|
||||
"device_list": "Listado de dispositivos",
|
||||
@@ -102,17 +104,21 @@
|
||||
"forgot_password_title": "Se te olvidó tu contraseña",
|
||||
"from": "Desde",
|
||||
"general_error": "Error de API, consulte a su administrador",
|
||||
"go_back": "Regresa",
|
||||
"hide": "Esconder",
|
||||
"hour": "hora",
|
||||
"hours": "horas",
|
||||
"id": "Carné de identidad",
|
||||
"invalid_credentials": "Nombre de usuario y / o contraseña inválido",
|
||||
"invalid_file": "El archivo elegido no es válido, lea las instrucciones y ajuste su archivo en consecuencia",
|
||||
"invalid_password": "Esta contraseña no confirma las reglas básicas de contraseña. Visite nuestra página de Política de contraseñas para obtener más información.",
|
||||
"invalid_pem": "Su archivo .pem no es válido. Debe comenzar con '----- BEGIN CERTIFICATE -----' O '----- BEGIN PRIVATE KEY -----' y debe terminar con '----- END CERTIFICATE --- - 'O' ----- FIN DE CLAVE PRIVADA ----- '",
|
||||
"ip_address": "Dirección IP",
|
||||
"ips": "IPs",
|
||||
"item": "ít",
|
||||
"items": "artículos",
|
||||
"items_per_page": "Artículos por página:",
|
||||
"key": "Llave",
|
||||
"last_dashboard_refresh": "Última actualización del panel",
|
||||
"later_tonight": "Más tarde esta noche",
|
||||
"latest": "último",
|
||||
@@ -121,8 +127,10 @@
|
||||
"loading_more_ellipsis": "Cargando más ...",
|
||||
"logout": "Cerrar sesión",
|
||||
"mac": "Dirección MAC",
|
||||
"main": "Principal",
|
||||
"manufacturer": "Fabricante",
|
||||
"memory_used": "Memoria usada",
|
||||
"min_max": "Mín .: {{min}}, Máx .: {{max}}",
|
||||
"minute": "minuto",
|
||||
"minutes": "minutos",
|
||||
"modified": "Modificado",
|
||||
@@ -155,7 +163,9 @@
|
||||
"second": "segundo",
|
||||
"seconds": "segundos",
|
||||
"seconds_elapsed": "Segundos transcurridos",
|
||||
"see_details": "Ver detalles",
|
||||
"select": "Seleccionar",
|
||||
"serial_num": "Número de serie",
|
||||
"serial_number": "Número de serie",
|
||||
"show_all": "Mostrar todo",
|
||||
"socket_connection_closed": "¡Conexión cerrada!",
|
||||
@@ -205,6 +215,7 @@
|
||||
"device_password": "Contraseña",
|
||||
"device_type": "Tipo de dispositivo",
|
||||
"device_types": "Tipos de dispositivos",
|
||||
"devices_affected": "Dispositivos afectados por esta configuración:",
|
||||
"edit_configuration": "Editar configuración",
|
||||
"error_delete": "Error al intentar eliminar: {{error}}",
|
||||
"error_fetching_config": "Error al obtener la configuración",
|
||||
@@ -232,6 +243,7 @@
|
||||
"used_by": "Usado por",
|
||||
"used_by_details": "{{entities}} Entidades, {{venues}} lugares y {{devices}} dispositivos",
|
||||
"uuid": "ID de configuración",
|
||||
"view_affected_devices": "Ver dispositivos afectados",
|
||||
"view_config": "Ver configuración",
|
||||
"view_in_use": "Ver en uso",
|
||||
"view_json": "Ver JSON sin procesar"
|
||||
@@ -250,6 +262,7 @@
|
||||
"access_pin": "PIN de acceso",
|
||||
"add_contact": "Agregar contacto",
|
||||
"create_contact": "Crear contacto",
|
||||
"currently_selected_contact": "Contacto seleccionado actualmente: {{contact}}",
|
||||
"delete": "¿Borrar contacto?",
|
||||
"error_assign": "Error al intentar asignar el contacto: {{error}}",
|
||||
"error_creation": "Error al intentar crear contacto: {{error}}",
|
||||
@@ -287,8 +300,12 @@
|
||||
"healthchecks_title": "Eliminar comprobaciones de estado"
|
||||
},
|
||||
"device": {
|
||||
"certificate_explanation": "Certificados de dispositivos conectados",
|
||||
"error_fetching_device": "Error al obtener la información del dispositivo: {{error}}",
|
||||
"error_fetching_devices": "Error al recuperar dispositivos: {{error}}"
|
||||
"error_fetching_devices": "Error al recuperar dispositivos: {{error}}",
|
||||
"health_explanation": "Salud de los dispositivos conectados",
|
||||
"memory_explanation": "Memoria utilizada por dispositivos conectados",
|
||||
"uptimes_explanation": "Tiempo que los dispositivos conectados han estado en funcionamiento y conectados"
|
||||
},
|
||||
"device_logs": {
|
||||
"log": "Iniciar sesión",
|
||||
@@ -309,10 +326,12 @@
|
||||
"delete_warning": "Advertencia: esta operación no se puede revertir",
|
||||
"edit_failure": "Actualización fallida: {{error}}",
|
||||
"enter_here": "Ingrese las IP que desea agregar aquí",
|
||||
"entire_tree": "Site MAp",
|
||||
"entities": "entidades",
|
||||
"entity": "Entidad",
|
||||
"error_fetch_entity": "Error al obtener la información de la entidad",
|
||||
"error_fetching": "Error al recuperar entidades",
|
||||
"error_fetching_map": "Error al obtener el mapa: {{error}}",
|
||||
"error_saving": "Error al guardar la entidad",
|
||||
"higher_priority": "Dar mayor prioridad",
|
||||
"ip_detection": "Detección de IP",
|
||||
@@ -324,6 +343,7 @@
|
||||
"only_unassigned": "Solo sin asignar",
|
||||
"select_entity": "Seleccione esta entidad",
|
||||
"selected_entity": "Entidad seleccionada",
|
||||
"selected_map": "Mapa seleccionado",
|
||||
"update_failure_error": "Error al intentar actualizar la entidad: {{error}}",
|
||||
"valid_serial": "Debe ser un número de serie válido (12 caracteres HEX)",
|
||||
"venues": "Sedes"
|
||||
@@ -336,6 +356,7 @@
|
||||
"warning": "Advertencia: una vez que envíe, esto no se podrá revertir"
|
||||
},
|
||||
"firmware": {
|
||||
"age_explanation": "Número medio de días para todos los dispositivos de los que podemos obtener ese valor",
|
||||
"average_age": "Edad promedio del firmware",
|
||||
"choose_custom": "Escoger",
|
||||
"details_title": "Detalles de la imagen n. °{{image}} ",
|
||||
@@ -348,9 +369,11 @@
|
||||
"image": "Imagen",
|
||||
"image_date": "Fecha de la imagen",
|
||||
"installed_firmware": "Firmware instalado",
|
||||
"latest_explanation": "Dispositivos que ejecutan firmware reconocido en su última versión",
|
||||
"latest_version_installed": "Última versión instalada",
|
||||
"newer_firmware_available": "Nuevas revisiones disponibles",
|
||||
"reinstall_latest": "Reinstalar",
|
||||
"release": "Lanzamiento",
|
||||
"revision": "Revisión",
|
||||
"show_dev": "Mostrar lanzamientos para desarrolladores",
|
||||
"size": "Tamaño",
|
||||
@@ -457,7 +480,8 @@
|
||||
"unassigned_deleted_devices": "{{number}} Dispositivos eliminados y sin asignar",
|
||||
"unassigned_tags": "Etiquetas sin asignar",
|
||||
"validating_import_file": "Validando archivo y datos de importación ...",
|
||||
"venue": "Lugar de encuentro"
|
||||
"venue": "Lugar de encuentro",
|
||||
"view_in_gateway": "Ver en Gateway"
|
||||
},
|
||||
"location": {
|
||||
"add": "Añade una ubicación",
|
||||
@@ -465,13 +489,16 @@
|
||||
"city": "ciudad",
|
||||
"country": "País",
|
||||
"create": "Crear ubicación",
|
||||
"currently_selected": "Ubicación seleccionada actualmente: {{location}}",
|
||||
"delete": "¿Eliminar ubicación?",
|
||||
"error_assign": "Error al intentar asignar la ubicación: {{error}}",
|
||||
"error_creation": "Error al intentar crear ubicaciones: {{error}}",
|
||||
"error_delete": "Error al eliminar la ubicación: {{error}}",
|
||||
"error_fetching_single": "Error al intentar obtener la ubicación: {{error}}",
|
||||
"geocode": "Geocode",
|
||||
"mobiles": "MOBILES",
|
||||
"no_associated": "Sin ubicación asociada",
|
||||
"phones": "Los telefonos",
|
||||
"postal": "código postal",
|
||||
"search": "Busque ubicaciones para completar automáticamente los campos a continuación",
|
||||
"state": "Estado",
|
||||
@@ -533,6 +560,59 @@
|
||||
"settings": {
|
||||
"title": "Ajustes"
|
||||
},
|
||||
"simulation": {
|
||||
"add": "Agregar simulación",
|
||||
"cancel": "Cancelar",
|
||||
"cancel_success": "¡La ejecución de la simulación se canceló con éxito!",
|
||||
"check_ongoing_sims": "Seguir Sim en curso",
|
||||
"client_interval": "Intervalo de cliente",
|
||||
"delete_simulation": "Eliminar Sim. {{name}}",
|
||||
"end": "Término",
|
||||
"error_creating": "Error al crear la simulación: {{error}}",
|
||||
"error_delete": "Error al eliminar la simulación: {{error}}",
|
||||
"error_devices": "Dispositivos de error",
|
||||
"error_edit": "Error al intentar guardar la simulación: {{error}}",
|
||||
"error_edit_run": "Error al intentar cambiar el estado de ejecución: {{error}}",
|
||||
"error_fetching_simulations": "Error al obtener simulaciones: {{error}}",
|
||||
"error_start_run": "Error al intentar iniciar una ejecución de simulación: {{error}}",
|
||||
"gateway": "Puerta",
|
||||
"healtcheck_interval": "Intervalo de comprobación de estado",
|
||||
"keep_alive": "Mantener viva",
|
||||
"last_refresh": "Última actualización",
|
||||
"length": "Longitud",
|
||||
"live_devices": "Dispositivos en vivo",
|
||||
"mac_prefix": "Prefijo MAC",
|
||||
"max_associations": "Max. Asociaciones",
|
||||
"max_clients": "Max. Clientela",
|
||||
"messages_transmitted": "Mensajes transmitidos",
|
||||
"min_associations": "Min. Asociaciones",
|
||||
"min_clients": "Min. Clientela",
|
||||
"pause": "pausa",
|
||||
"pause_success": "¡Ejecutar en pausa!",
|
||||
"prefix_length": "Obligatorio, debe tener una longitud de 6 caracteres",
|
||||
"previous_runs": "Ejecuciones anteriores",
|
||||
"received": "recibido",
|
||||
"received_messages": "Mensajes recibidos",
|
||||
"reconnect_interval": "Intervalo de reconexión",
|
||||
"resume": "Currículum",
|
||||
"resume_success": "¡Ejecutar reanudado!",
|
||||
"run": "Ejecución de simulación",
|
||||
"run_simulation": "Ejecutar simulación",
|
||||
"started": "Empezado",
|
||||
"state_interval": "Intervalo de estado",
|
||||
"stop": "Detener",
|
||||
"stop_success": "¡Corre, detenido!",
|
||||
"success_creating": "¡Simulación creada con éxito!",
|
||||
"success_run_start": "¡Ejecución iniciada con éxito!",
|
||||
"successful_delete": "¡Simulación eliminada con éxito!",
|
||||
"successful_edit": "¡Simulación editada con éxito!",
|
||||
"threads": "Trapos",
|
||||
"time_full_devices": "Tiempo para dispositivos completos",
|
||||
"title": "Simulaciones",
|
||||
"transmitted": "Transmitido",
|
||||
"valid_cert": "Certificado válido",
|
||||
"valid_key": "Clave válida"
|
||||
},
|
||||
"statistics": {
|
||||
"data": "Datos (KB)",
|
||||
"latest_statistics": "Últimas estadísticas",
|
||||
@@ -606,7 +686,7 @@
|
||||
"check_phone": "Por favor revise su teléfono para su código de validación",
|
||||
"confirm_new_password": "confirmar nueva contraseña",
|
||||
"create": "Crear usuario",
|
||||
"create_failure": "Error al crear usuario. Asegúrese de que esta dirección de correo electrónico no esté vinculada a una cuenta.",
|
||||
"create_failure": "Error al crear el usuario: {{error}}",
|
||||
"create_success": "Usuario creado con éxito",
|
||||
"creating": "Creando usuario ...",
|
||||
"delete_avatar": "Eliminar avatar",
|
||||
@@ -620,6 +700,7 @@
|
||||
"email_address": "Dirección de correo electrónico",
|
||||
"enter_new_phone": "Ingrese su nuevo número de teléfono:",
|
||||
"error_fetching_users": "Error al obtener usuarios: {{error}}",
|
||||
"error_retrieving": "Error al recuperar usuario",
|
||||
"error_sending_code": "Error al intentar enviar el código de validación. Confirma que tu número de teléfono es válido.",
|
||||
"force_password_change": "Forzar cambio de contraseña al iniciar sesión",
|
||||
"id": "Id. De usuario",
|
||||
|
||||
@@ -52,8 +52,10 @@
|
||||
"commands_executed": "commandes exécutées",
|
||||
"compatible": "Compatible",
|
||||
"completed": "Terminé",
|
||||
"concurrent_devices": "Périphériques simultanés",
|
||||
"config_id": "Config. Identifiant",
|
||||
"confirm": "Confirmer",
|
||||
"confirm_stop_editing": "Voulez-vous vraiment arrêter la modification ? Cela annulera toutes les modifications non enregistrées que vous avez apportées.",
|
||||
"connected": "Connecté",
|
||||
"copied": "Copié!",
|
||||
"copy_to_clipboard": "Copier dans le presse-papier",
|
||||
@@ -71,7 +73,7 @@
|
||||
"details": "Détails",
|
||||
"device": "N° d'appareil{{serialNumber}}",
|
||||
"device_dashboard": "Tableau de bord de l'appareil",
|
||||
"device_delete": "Supprimer l'appareil n°{{serialNumber}}",
|
||||
"device_delete": "Supprimer #{{serialNumber}}",
|
||||
"device_deleted": "Appareil supprimé avec succès",
|
||||
"device_health": "Santé de l'appareil",
|
||||
"device_list": "Liste des appareils",
|
||||
@@ -102,17 +104,21 @@
|
||||
"forgot_password_title": "Mot de passe oublié",
|
||||
"from": "De",
|
||||
"general_error": "Erreur API, veuillez consulter votre administrateur",
|
||||
"go_back": "Retourner",
|
||||
"hide": "Cacher",
|
||||
"hour": "heure",
|
||||
"hours": "heures",
|
||||
"id": "Id",
|
||||
"invalid_credentials": "Nom d'utilisateur et / ou mot de passe incorrect",
|
||||
"invalid_file": "Le fichier choisi n'était pas valide, veuillez lire les instructions et ajuster votre fichier en conséquence",
|
||||
"invalid_password": "Ce mot de passe ne confirme pas les règles de base des mots de passe. Veuillez visiter notre page Politique de mot de passe pour en savoir plus",
|
||||
"invalid_pem": "Votre fichier .pem n'est pas valide. Il doit commencer par '-----BEGIN CERTIFICATE-----' OU '-----BEGIN PRIVATE KEY-----' et il doit se terminer par '-----END CERTIFICATE--- --' OU '-----FIN CLÉ PRIVÉE-----'",
|
||||
"ip_address": "Adresse IP",
|
||||
"ips": "IPS",
|
||||
"item": "article",
|
||||
"items": "Articles",
|
||||
"items_per_page": "Objets par page:",
|
||||
"key": "Clé",
|
||||
"last_dashboard_refresh": "Dernière actualisation du tableau de bord",
|
||||
"later_tonight": "Plus tard ce soir",
|
||||
"latest": "Dernier",
|
||||
@@ -121,8 +127,10 @@
|
||||
"loading_more_ellipsis": "Chargement plus ...",
|
||||
"logout": "Connectez - Out",
|
||||
"mac": "ADRESSE MAC",
|
||||
"main": "Principale",
|
||||
"manufacturer": "fabricant",
|
||||
"memory_used": "Mémoire utilisée",
|
||||
"min_max": "Min : {{min}}, Max : {{max}}",
|
||||
"minute": "minute",
|
||||
"minutes": "minutes",
|
||||
"modified": "Modifié",
|
||||
@@ -155,7 +163,9 @@
|
||||
"second": "seconde",
|
||||
"seconds": "secondes",
|
||||
"seconds_elapsed": "Secondes écoulées",
|
||||
"see_details": "Voir les détails",
|
||||
"select": "sélectionner",
|
||||
"serial_num": "Numéro de série",
|
||||
"serial_number": "Numéro de série",
|
||||
"show_all": "Montre tout",
|
||||
"socket_connection_closed": "Connexion fermée !",
|
||||
@@ -205,6 +215,7 @@
|
||||
"device_password": "Mot de passe",
|
||||
"device_type": "Type d'appareil",
|
||||
"device_types": "Types d'appareils",
|
||||
"devices_affected": "Appareils concernés par cette configuration :",
|
||||
"edit_configuration": "Modifier la configuration",
|
||||
"error_delete": "Erreur lors de la tentative de suppression : {{error}}",
|
||||
"error_fetching_config": "Erreur lors de la récupération de la configuration",
|
||||
@@ -232,6 +243,7 @@
|
||||
"used_by": "Utilisé par",
|
||||
"used_by_details": "{{entities}} Entités, {{venues}} Lieux et {{devices}} Appareils",
|
||||
"uuid": "Identifiant de configuration",
|
||||
"view_affected_devices": "Afficher les appareils concernés",
|
||||
"view_config": "Afficher la configuration",
|
||||
"view_in_use": "Afficher en cours d'utilisation",
|
||||
"view_json": "Afficher le JSON brut"
|
||||
@@ -250,6 +262,7 @@
|
||||
"access_pin": "NIP d'accès",
|
||||
"add_contact": "Ajouter le contact",
|
||||
"create_contact": "Créer un contact",
|
||||
"currently_selected_contact": "Contact actuellement sélectionné : {{contact}}",
|
||||
"delete": "Effacer le contact?",
|
||||
"error_assign": "Erreur lors de la tentative d'attribution du contact : {{error}}",
|
||||
"error_creation": "Erreur lors de la tentative de création du contact : {{error}}",
|
||||
@@ -287,8 +300,12 @@
|
||||
"healthchecks_title": "Supprimer les vérifications d'état"
|
||||
},
|
||||
"device": {
|
||||
"certificate_explanation": "Certificats des appareils connectés",
|
||||
"error_fetching_device": "Erreur lors de la récupération des informations sur l'appareil : {{error}}",
|
||||
"error_fetching_devices": "Erreur lors de la récupération des appareils : {{error}}"
|
||||
"error_fetching_devices": "Erreur lors de la récupération des appareils : {{error}}",
|
||||
"health_explanation": "Santé des appareils connectés",
|
||||
"memory_explanation": "Mémoire utilisée par les appareils connectés",
|
||||
"uptimes_explanation": "Heure à laquelle les appareils connectés ont été activés et connectés"
|
||||
},
|
||||
"device_logs": {
|
||||
"log": "Bûche",
|
||||
@@ -309,10 +326,12 @@
|
||||
"delete_warning": "Attention : cette opération ne peut pas être annulée",
|
||||
"edit_failure": "Échec de la mise à jour : {{error}}",
|
||||
"enter_here": "Entrez les IP que vous souhaitez ajouter ici",
|
||||
"entire_tree": "Site MAp",
|
||||
"entities": "Entités",
|
||||
"entity": "Entité",
|
||||
"error_fetch_entity": "Erreur lors de la récupération des informations sur l'entité",
|
||||
"error_fetching": "Erreur lors de la récupération des entités",
|
||||
"error_fetching_map": "Erreur lors de la récupération de la carte : {{error}}",
|
||||
"error_saving": "Erreur lors de l'enregistrement de l'entité",
|
||||
"higher_priority": "Faire une priorité plus élevée",
|
||||
"ip_detection": "Détection IP",
|
||||
@@ -324,6 +343,7 @@
|
||||
"only_unassigned": "Uniquement non attribué",
|
||||
"select_entity": "Sélectionnez cette entité",
|
||||
"selected_entity": "Entité sélectionnée",
|
||||
"selected_map": "Carte sélectionnée",
|
||||
"update_failure_error": "Erreur lors de la tentative de mise à jour de l'entité : {{error}}",
|
||||
"valid_serial": "Doit être un numéro de série valide (12 caractères HEX)",
|
||||
"venues": "Les lieux"
|
||||
@@ -336,6 +356,7 @@
|
||||
"warning": "Avertissement : Une fois que vous avez soumis, cela ne peut pas être annulé"
|
||||
},
|
||||
"firmware": {
|
||||
"age_explanation": "Nombre moyen de jours pour tous les appareils à partir desquels nous pouvons obtenir cette valeur",
|
||||
"average_age": "Âge moyen du micrologiciel",
|
||||
"choose_custom": "Choisir",
|
||||
"details_title": "Image #{{image}} Détails",
|
||||
@@ -348,9 +369,11 @@
|
||||
"image": "Image",
|
||||
"image_date": "Date de l'image",
|
||||
"installed_firmware": "Micrologiciel installé",
|
||||
"latest_explanation": "Appareils exécutant un firmware reconnu dans sa dernière version",
|
||||
"latest_version_installed": "Dernière version installée",
|
||||
"newer_firmware_available": "Révisions plus récentes disponibles",
|
||||
"reinstall_latest": "Réinstaller",
|
||||
"release": "libération",
|
||||
"revision": "Révision",
|
||||
"show_dev": "Afficher les versions des développeurs",
|
||||
"size": "Taille",
|
||||
@@ -457,7 +480,8 @@
|
||||
"unassigned_deleted_devices": "{{number}} appareils supprimés et non attribués",
|
||||
"unassigned_tags": "Balises non attribuées",
|
||||
"validating_import_file": "Validation du fichier d'importation et des données...",
|
||||
"venue": "Lieu"
|
||||
"venue": "Lieu",
|
||||
"view_in_gateway": "Afficher dans la passerelle"
|
||||
},
|
||||
"location": {
|
||||
"add": "Ajouter un emplacement",
|
||||
@@ -465,13 +489,16 @@
|
||||
"city": "Ville",
|
||||
"country": "Pays",
|
||||
"create": "Créer un lieu",
|
||||
"currently_selected": "Emplacement actuellement sélectionné : {{location}}",
|
||||
"delete": "Supprimer le lieu?",
|
||||
"error_assign": "Erreur lors de la tentative d'attribution de l'emplacement : {{error}}",
|
||||
"error_creation": "Erreur lors de la tentative de création d'établissements : {{error}}",
|
||||
"error_delete": "Erreur lors de la suppression de l'emplacement : {{error}}",
|
||||
"error_fetching_single": "Erreur lors de la tentative de récupération de l'emplacement : {{error}}",
|
||||
"geocode": "Géocode",
|
||||
"mobiles": "MOBILES",
|
||||
"no_associated": "Aucun emplacement associé",
|
||||
"phones": "Téléphones",
|
||||
"postal": "Zip / code postal",
|
||||
"search": "Recherchez des emplacements pour remplir automatiquement les champs ci-dessous",
|
||||
"state": "Etat",
|
||||
@@ -533,6 +560,59 @@
|
||||
"settings": {
|
||||
"title": "Réglages"
|
||||
},
|
||||
"simulation": {
|
||||
"add": "Ajouter une simulation",
|
||||
"cancel": "annuler",
|
||||
"cancel_success": "Exécution de la simulation annulée avec succès !",
|
||||
"check_ongoing_sims": "Suivre le Sim en cours",
|
||||
"client_interval": "Intervalle client",
|
||||
"delete_simulation": "Supprimer Sim. {{name}}",
|
||||
"end": "Terminé",
|
||||
"error_creating": "Erreur lors de la création de la simulation : {{error}}",
|
||||
"error_delete": "Erreur lors de la suppression de la simulation : {{error}}",
|
||||
"error_devices": "Périphériques d'erreur",
|
||||
"error_edit": "Erreur lors de la tentative d'enregistrement de la simulation : {{error}}",
|
||||
"error_edit_run": "Erreur lors de la tentative de modification de l'état d'exécution : {{error}}",
|
||||
"error_fetching_simulations": "Erreur lors de la récupération des simulations : {{error}}",
|
||||
"error_start_run": "Erreur lors de la tentative de démarrage d'une simulation : {{error}}",
|
||||
"gateway": "passerelle",
|
||||
"healtcheck_interval": "Intervalle de vérification de l'état",
|
||||
"keep_alive": "Rester en vie",
|
||||
"last_refresh": "Dernier rafraîchissement",
|
||||
"length": "Longueur",
|
||||
"live_devices": "Appareils en direct",
|
||||
"mac_prefix": "Préfixe MAC",
|
||||
"max_associations": "Max. Les associations",
|
||||
"max_clients": "Max. Clients",
|
||||
"messages_transmitted": "Messages transmis",
|
||||
"min_associations": "Min. Les associations",
|
||||
"min_clients": "Min. Clients",
|
||||
"pause": "Pause",
|
||||
"pause_success": "Exécuter en pause !",
|
||||
"prefix_length": "Obligatoire, doit être d'une longueur de 6 caractères",
|
||||
"previous_runs": "Courses précédentes",
|
||||
"received": "reçu",
|
||||
"received_messages": "Messages reçus",
|
||||
"reconnect_interval": "Intervalle de reconnexion",
|
||||
"resume": "CV",
|
||||
"resume_success": "Exécution reprise !",
|
||||
"run": "Exécution de simulation",
|
||||
"run_simulation": "Exécuter la simulation",
|
||||
"started": "commencé",
|
||||
"state_interval": "Intervalle d'état",
|
||||
"stop": "Arrêtez",
|
||||
"stop_success": "Exécution arrêtée !",
|
||||
"success_creating": "Simulation créée avec succès !",
|
||||
"success_run_start": "Exécution démarrée avec succès !",
|
||||
"successful_delete": "Simulation supprimée avec succès !",
|
||||
"successful_edit": "Simulation éditée avec succès !",
|
||||
"threads": "Fils",
|
||||
"time_full_devices": "Temps pour les appareils pleins",
|
||||
"title": "Simulations",
|
||||
"transmitted": "Transmis",
|
||||
"valid_cert": "Certificat valide",
|
||||
"valid_key": "Clé valide"
|
||||
},
|
||||
"statistics": {
|
||||
"data": "Données (Ko)",
|
||||
"latest_statistics": "Dernières statistiques",
|
||||
@@ -606,7 +686,7 @@
|
||||
"check_phone": "Veuillez vérifier votre téléphone pour votre code de validation",
|
||||
"confirm_new_password": "Confirmer le nouveau mot de passe",
|
||||
"create": "Créer un utilisateur",
|
||||
"create_failure": "Erreur lors de la création de l'utilisateur. Veuillez vous assurer que cette adresse e-mail n'est pas déjà liée à un compte.",
|
||||
"create_failure": "Erreur lors de la création de l'utilisateur : {{error}}",
|
||||
"create_success": "L'utilisateur a été créé avec succès",
|
||||
"creating": "Création de l'utilisateur...",
|
||||
"delete_avatar": "Supprimer l'avatar",
|
||||
@@ -620,6 +700,7 @@
|
||||
"email_address": "Adresse électronique",
|
||||
"enter_new_phone": "Saisissez votre nouveau numéro de téléphone :",
|
||||
"error_fetching_users": "Erreur lors de la récupération des utilisateurs : {{error}}",
|
||||
"error_retrieving": "Erreur lors de la récupération de l'utilisateur",
|
||||
"error_sending_code": "Erreur lors de la tentative d'envoi du code de validation. Veuillez confirmer que votre numéro de téléphone est valide.",
|
||||
"force_password_change": "Forcer le changement de mot de passe lors de la connexion",
|
||||
"id": "Identifiant d'utilisateur.",
|
||||
|
||||
@@ -52,8 +52,10 @@
|
||||
"commands_executed": "Comandos Executados",
|
||||
"compatible": "Compatível",
|
||||
"completed": "Concluído",
|
||||
"concurrent_devices": "Dispositivos Simultâneos",
|
||||
"config_id": "Config. Identidade",
|
||||
"confirm": "confirme",
|
||||
"confirm_stop_editing": "Tem certeza que deseja parar de editar? Isso cancelará todas as alterações não salvas que você fez.",
|
||||
"connected": "Conectado",
|
||||
"copied": "Copiado!",
|
||||
"copy_to_clipboard": "Copiar para área de transferência",
|
||||
@@ -71,7 +73,7 @@
|
||||
"details": "Detalhes",
|
||||
"device": "Dispositivo nº{{serialNumber}}",
|
||||
"device_dashboard": "Painel do dispositivo",
|
||||
"device_delete": "Excluir dispositivo nº{{serialNumber}}",
|
||||
"device_delete": "Excluir #{{serialNumber}}",
|
||||
"device_deleted": "Dispositivo excluído com sucesso",
|
||||
"device_health": "Saúde do Dispositivo",
|
||||
"device_list": "Lista de Dispositivos",
|
||||
@@ -102,17 +104,21 @@
|
||||
"forgot_password_title": "Esqueceu a senha",
|
||||
"from": "De",
|
||||
"general_error": "Erro de API, consulte o seu administrador",
|
||||
"go_back": "Volte",
|
||||
"hide": "Ocultar",
|
||||
"hour": "hora",
|
||||
"hours": "horas",
|
||||
"id": "identidade",
|
||||
"invalid_credentials": "Nome de usuário e / ou senha inválidos",
|
||||
"invalid_file": "O arquivo escolhido era inválido, por favor, leia as instruções e ajuste seu arquivo de acordo",
|
||||
"invalid_password": "Esta senha não está de acordo com as regras básicas de senha. Visite nossa página de Política de Senha para saber mais",
|
||||
"invalid_pem": "Seu arquivo .pem é inválido. Deve começar com '----- BEGIN CERTIFICATE -----' OU '----- BEGIN PRIVATE KEY -----' e deve terminar com '----- END CERTIFICATE --- - 'OU' ----- END PRIVATE KEY ----- '",
|
||||
"ip_address": "Endereço de IP",
|
||||
"ips": "IPs",
|
||||
"item": "Item",
|
||||
"items": "Unid",
|
||||
"items_per_page": "Itens por página:",
|
||||
"key": "Chave",
|
||||
"last_dashboard_refresh": "Última atualização do painel",
|
||||
"later_tonight": "Logo à noite",
|
||||
"latest": "Mais recentes",
|
||||
@@ -121,8 +127,10 @@
|
||||
"loading_more_ellipsis": "Carregando mais ...",
|
||||
"logout": "Sair",
|
||||
"mac": "Endereço MAC",
|
||||
"main": "a Principal",
|
||||
"manufacturer": "Fabricante",
|
||||
"memory_used": "Memória Usada",
|
||||
"min_max": "Mín: {{min}}, Máx: {{max}}",
|
||||
"minute": "minuto",
|
||||
"minutes": "minutos",
|
||||
"modified": "Modificado",
|
||||
@@ -155,7 +163,9 @@
|
||||
"second": "segundo",
|
||||
"seconds": "segundos",
|
||||
"seconds_elapsed": "Segundos decorridos",
|
||||
"see_details": "Veja detalhes",
|
||||
"select": "Selecione",
|
||||
"serial_num": "Nº de série",
|
||||
"serial_number": "Número de série",
|
||||
"show_all": "mostre tudo",
|
||||
"socket_connection_closed": "Conexão fechada!",
|
||||
@@ -205,6 +215,7 @@
|
||||
"device_password": "Senha",
|
||||
"device_type": "Tipo de dispositivo",
|
||||
"device_types": "Tipos de dispositivos",
|
||||
"devices_affected": "Dispositivos afetados por esta configuração:",
|
||||
"edit_configuration": "Editar configuração",
|
||||
"error_delete": "Erro ao tentar excluir: {{error}}",
|
||||
"error_fetching_config": "Erro ao buscar configuração",
|
||||
@@ -232,6 +243,7 @@
|
||||
"used_by": "Usado por",
|
||||
"used_by_details": "{{entities}} Entidades, {{venues}} Locais e {{devices}} Dispositivos",
|
||||
"uuid": "ID de configuração",
|
||||
"view_affected_devices": "Exibir dispositivos afetados",
|
||||
"view_config": "Ver configuração",
|
||||
"view_in_use": "Visualização em uso",
|
||||
"view_json": "Exibir JSON bruto"
|
||||
@@ -250,6 +262,7 @@
|
||||
"access_pin": "PIN de acesso",
|
||||
"add_contact": "Adicionar contato",
|
||||
"create_contact": "Criar Contato",
|
||||
"currently_selected_contact": "Contato atualmente selecionado: {{contact}}",
|
||||
"delete": "Excluir contato?",
|
||||
"error_assign": "Erro ao tentar atribuir contato: {{error}}",
|
||||
"error_creation": "Erro ao tentar criar contato: {{error}}",
|
||||
@@ -287,8 +300,12 @@
|
||||
"healthchecks_title": "Excluir verificações de saúde"
|
||||
},
|
||||
"device": {
|
||||
"certificate_explanation": "Certificados de dispositivos conectados",
|
||||
"error_fetching_device": "Erro ao buscar informações do dispositivo: {{error}}",
|
||||
"error_fetching_devices": "Erro ao buscar dispositivos: {{error}}"
|
||||
"error_fetching_devices": "Erro ao buscar dispositivos: {{error}}",
|
||||
"health_explanation": "Saúde de dispositivos conectados",
|
||||
"memory_explanation": "Memória usada por dispositivos conectados",
|
||||
"uptimes_explanation": "Há tempo em que os dispositivos conectados estão ativados e conectados"
|
||||
},
|
||||
"device_logs": {
|
||||
"log": "Registro",
|
||||
@@ -309,10 +326,12 @@
|
||||
"delete_warning": "Aviso: esta operação não pode ser revertida",
|
||||
"edit_failure": "Atualização malsucedida: {{error}}",
|
||||
"enter_here": "Digite o (s) IP (s) que deseja adicionar aqui",
|
||||
"entire_tree": "Mapa do Site",
|
||||
"entities": "Entidades",
|
||||
"entity": "Entidade",
|
||||
"error_fetch_entity": "Erro ao buscar informações da entidade",
|
||||
"error_fetching": "Erro ao buscar entidades",
|
||||
"error_fetching_map": "Erro ao buscar mapa: {{error}}",
|
||||
"error_saving": "Erro ao salvar entidade",
|
||||
"higher_priority": "Dê maior prioridade",
|
||||
"ip_detection": "Detecção de IP",
|
||||
@@ -324,6 +343,7 @@
|
||||
"only_unassigned": "Apenas não atribuídos",
|
||||
"select_entity": "Selecione esta Entidade",
|
||||
"selected_entity": "Entidade Selecionada",
|
||||
"selected_map": "Mapa Selecionado",
|
||||
"update_failure_error": "Erro ao tentar atualizar a entidade: {{error}}",
|
||||
"valid_serial": "Precisa ser um número de série válido (12 caracteres HEX)",
|
||||
"venues": "Locais"
|
||||
@@ -336,6 +356,7 @@
|
||||
"warning": "Aviso: depois de enviar, isso não pode ser revertido"
|
||||
},
|
||||
"firmware": {
|
||||
"age_explanation": "Número médio de dias para todos os dispositivos dos quais podemos obter esse valor",
|
||||
"average_age": "Idade Média do Firmware",
|
||||
"choose_custom": "Escolher",
|
||||
"details_title": "Detalhes da imagem #{{image}} ",
|
||||
@@ -348,9 +369,11 @@
|
||||
"image": "Imagem",
|
||||
"image_date": "Data da Imagem",
|
||||
"installed_firmware": "Firmware Instalado",
|
||||
"latest_explanation": "Dispositivos executando firmware reconhecido em sua versão mais recente",
|
||||
"latest_version_installed": "Última versão instalada",
|
||||
"newer_firmware_available": "Novas revisões disponíveis",
|
||||
"reinstall_latest": "Reinstalar",
|
||||
"release": "LANÇAMENTO",
|
||||
"revision": "Revisão",
|
||||
"show_dev": "Mostrar lançamentos de desenvolvimento",
|
||||
"size": "Tamanho",
|
||||
@@ -457,7 +480,8 @@
|
||||
"unassigned_deleted_devices": "{{number}} Dispositivos excluídos e não atribuídos",
|
||||
"unassigned_tags": "Tags não atribuídas",
|
||||
"validating_import_file": "Validando arquivo de importação e dados ...",
|
||||
"venue": "Local"
|
||||
"venue": "Local",
|
||||
"view_in_gateway": "Ver no Gateway"
|
||||
},
|
||||
"location": {
|
||||
"add": "Adicionar Local",
|
||||
@@ -465,13 +489,16 @@
|
||||
"city": "Cidade",
|
||||
"country": "País",
|
||||
"create": "Criar local",
|
||||
"currently_selected": "Local selecionado atualmente: {{location}}",
|
||||
"delete": "Excluir localização?",
|
||||
"error_assign": "Erro ao tentar atribuir local: {{error}}",
|
||||
"error_creation": "Erro ao tentar criar locais: {{error}}",
|
||||
"error_delete": "Erro ao excluir localização: {{error}}",
|
||||
"error_fetching_single": "Erro ao tentar buscar localização: {{error}}",
|
||||
"geocode": "GeoCode",
|
||||
"mobiles": "Móbiles",
|
||||
"no_associated": "Sem localização associada",
|
||||
"phones": "Telefones",
|
||||
"postal": "CEP / Código Postal",
|
||||
"search": "Pesquise locais para preencher automaticamente os campos abaixo",
|
||||
"state": "Estado",
|
||||
@@ -533,6 +560,59 @@
|
||||
"settings": {
|
||||
"title": "Definições"
|
||||
},
|
||||
"simulation": {
|
||||
"add": "Adicionar Simulação",
|
||||
"cancel": "Cancelar",
|
||||
"cancel_success": "Simulação cancelada com sucesso!",
|
||||
"check_ongoing_sims": "Seguir Sim em Curso",
|
||||
"client_interval": "Intervalo do Cliente",
|
||||
"delete_simulation": "Excluir Sim. {{name}}",
|
||||
"end": "Terminado",
|
||||
"error_creating": "Erro ao criar simulação: {{error}}",
|
||||
"error_delete": "Erro ao excluir simulação: {{error}}",
|
||||
"error_devices": "Dispositivos de Erro",
|
||||
"error_edit": "Erro ao tentar salvar a simulação: {{error}}",
|
||||
"error_edit_run": "Erro ao tentar alterar o estado de execução: {{error}}",
|
||||
"error_fetching_simulations": "Erro ao buscar simulações: {{error}}",
|
||||
"error_start_run": "Erro ao tentar iniciar uma simulação: {{error}}",
|
||||
"gateway": "Gateway",
|
||||
"healtcheck_interval": "Intervalo de verificação de saúde",
|
||||
"keep_alive": "Mantenha vivo",
|
||||
"last_refresh": "Última atualização",
|
||||
"length": "Comprimento",
|
||||
"live_devices": "Dispositivos Live",
|
||||
"mac_prefix": "Prefixo MAC",
|
||||
"max_associations": "Máx. Associações",
|
||||
"max_clients": "Máx. Clientes",
|
||||
"messages_transmitted": "Mensagens Transmitidas",
|
||||
"min_associations": "Min. Associações",
|
||||
"min_clients": "Min. Clientes",
|
||||
"pause": "pausa",
|
||||
"pause_success": "Executar em pausa!",
|
||||
"prefix_length": "Obrigatório, deve ter 6 caracteres",
|
||||
"previous_runs": "Execuções anteriores",
|
||||
"received": "recebido",
|
||||
"received_messages": "Mensagens recebidas",
|
||||
"reconnect_interval": "Intervalo de reconexão",
|
||||
"resume": "Currículo",
|
||||
"resume_success": "Executar retomado!",
|
||||
"run": "Simulação Rodada",
|
||||
"run_simulation": "Executar Simulação",
|
||||
"started": "Começado",
|
||||
"state_interval": "Intervalo de estado",
|
||||
"stop": "Pare",
|
||||
"stop_success": "Run Stopped!",
|
||||
"success_creating": "Simulação criada com sucesso!",
|
||||
"success_run_start": "Execução iniciada com sucesso!",
|
||||
"successful_delete": "Simulação excluída com sucesso!",
|
||||
"successful_edit": "Simulação editada com sucesso!",
|
||||
"threads": "Tópicos",
|
||||
"time_full_devices": "Tempo para dispositivos completos",
|
||||
"title": "Simulações",
|
||||
"transmitted": "Transmitido",
|
||||
"valid_cert": "Certificado Válido",
|
||||
"valid_key": "Chave Válida"
|
||||
},
|
||||
"statistics": {
|
||||
"data": "Dados (KB)",
|
||||
"latest_statistics": "Estatísticas mais recentes",
|
||||
@@ -606,7 +686,7 @@
|
||||
"check_phone": "Por favor, verifique o seu telefone para o seu código de validação",
|
||||
"confirm_new_password": "confirme a nova senha",
|
||||
"create": "Criar usuário",
|
||||
"create_failure": "Erro ao criar usuário. Certifique-se de que este endereço de e-mail ainda não esteja vinculado a uma conta.",
|
||||
"create_failure": "Erro ao criar usuário: {{error}}",
|
||||
"create_success": "Usuário criado com sucesso",
|
||||
"creating": "Criando usuário ...",
|
||||
"delete_avatar": "Apagar Avatar",
|
||||
@@ -620,6 +700,7 @@
|
||||
"email_address": "Endereço de e-mail",
|
||||
"enter_new_phone": "Insira seu novo número de telefone:",
|
||||
"error_fetching_users": "Erro ao buscar usuários: {{error}}",
|
||||
"error_retrieving": "Erro ao recuperar usuário",
|
||||
"error_sending_code": "Erro ao tentar enviar o código de validação. Por favor, confirme se o seu número de telefone é válido.",
|
||||
"force_password_change": "Forçar mudança de senha no login",
|
||||
"id": "ID do usuário.",
|
||||
|
||||
@@ -17,7 +17,7 @@ const DetailsModal = ({ t, show, toggle, details, commandUuid }) => (
|
||||
</div>
|
||||
</CModalHeader>
|
||||
<CModalBody>
|
||||
<pre className="ignore">{JSON.stringify(details, null, 4)}</pre>
|
||||
<pre className="ignore">{JSON.stringify(details, null, 2)}</pre>
|
||||
</CModalBody>
|
||||
</CModal>
|
||||
);
|
||||
|
||||
@@ -27,7 +27,7 @@ const initialState = {
|
||||
error: false,
|
||||
},
|
||||
userRole: {
|
||||
value: 'admin',
|
||||
value: 'accounting',
|
||||
error: false,
|
||||
},
|
||||
notes: {
|
||||
@@ -42,16 +42,11 @@ const initialState = {
|
||||
},
|
||||
};
|
||||
|
||||
const CreateUserModal = ({ show, toggle, getUsers }) => {
|
||||
const CreateUserModal = ({ show, toggle, getUsers, policies }) => {
|
||||
const { t } = useTranslation();
|
||||
const { currentToken, endpoints } = useAuth();
|
||||
const { addToast } = useToast();
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [policies, setPolicies] = useState({
|
||||
passwordPolicy: '',
|
||||
passwordPattern: '',
|
||||
accessPolicy: '',
|
||||
});
|
||||
const [formFields, updateFieldWithId, updateField, setFormFields] = useFormFields(initialState);
|
||||
|
||||
const toggleChange = () => {
|
||||
@@ -107,10 +102,10 @@ const CreateUserModal = ({ show, toggle, getUsers }) => {
|
||||
});
|
||||
toggle();
|
||||
})
|
||||
.catch(() => {
|
||||
.catch((e) => {
|
||||
addToast({
|
||||
title: t('common.error'),
|
||||
body: t('user.create_failure'),
|
||||
body: t('user.create_failure', { error: e.response?.data?.ErrorDescription }),
|
||||
color: 'danger',
|
||||
autohide: true,
|
||||
});
|
||||
@@ -122,23 +117,6 @@ const CreateUserModal = ({ show, toggle, getUsers }) => {
|
||||
setLoading(false);
|
||||
}
|
||||
};
|
||||
|
||||
const getPasswordPolicy = () => {
|
||||
axiosInstance
|
||||
.post(`${endpoints.owsec}/api/v1/oauth2?requirements=true`, {})
|
||||
.then((response) => {
|
||||
const newPolicies = response.data;
|
||||
newPolicies.accessPolicy = `${endpoints.owsec}${newPolicies.accessPolicy}`;
|
||||
newPolicies.passwordPolicy = `${endpoints.owsec}${newPolicies.passwordPolicy}`;
|
||||
setPolicies(response.data);
|
||||
})
|
||||
.catch(() => {});
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
if (policies.passwordPattern.length === 0) getPasswordPolicy();
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
setFormFields(initialState);
|
||||
}, [show]);
|
||||
@@ -177,6 +155,7 @@ CreateUserModal.propTypes = {
|
||||
show: PropTypes.bool.isRequired,
|
||||
toggle: PropTypes.func.isRequired,
|
||||
getUsers: PropTypes.func.isRequired,
|
||||
policies: PropTypes.instanceOf(Object).isRequired,
|
||||
};
|
||||
|
||||
export default React.memo(CreateUserModal);
|
||||
|
||||
@@ -19,7 +19,7 @@ const DeviceConfigurationModal = ({ show, toggle, configuration }) => (
|
||||
<CModalTitle className="text-dark">{t('configuration.title')}</CModalTitle>
|
||||
</CModalHeader>
|
||||
<CModalBody>
|
||||
<pre className="ignore">{JSON.stringify(configuration, null, 4)}</pre>
|
||||
<pre className="ignore">{JSON.stringify(configuration, null, 2)}</pre>
|
||||
</CModalBody>
|
||||
<CModalFooter>
|
||||
<CButton color="secondary" onClick={toggle}>
|
||||
|
||||
@@ -48,7 +48,7 @@ const DeviceFirmwareModal = ({
|
||||
|
||||
const allFirmwares = [];
|
||||
let continueFirmware = true;
|
||||
let i = 1;
|
||||
let i = 0;
|
||||
while (continueFirmware) {
|
||||
const newFirmwares = await getPartialFirmware(i);
|
||||
if (newFirmwares === null || newFirmwares.length === 0) continueFirmware = false;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { useHistory, useLocation } from 'react-router-dom';
|
||||
import { useHistory } from 'react-router-dom';
|
||||
import axiosInstance from 'utils/axiosInstance';
|
||||
import { getItem, setItem } from 'utils/localStorageHelper';
|
||||
import DeviceSearchBar from 'components/DeviceSearchBar';
|
||||
@@ -16,8 +16,7 @@ const DeviceList = () => {
|
||||
const { t } = useTranslation();
|
||||
const { addToast } = useToast();
|
||||
const history = useHistory();
|
||||
const { search } = useLocation();
|
||||
const page = new URLSearchParams(search).get('page');
|
||||
const [page, setPage] = useState(parseInt(sessionStorage.getItem('deviceTable') ?? 0, 10));
|
||||
const { currentToken, endpoints } = useAuth();
|
||||
const [upgradeStatus, setUpgradeStatus] = useState({
|
||||
loading: false,
|
||||
@@ -69,7 +68,7 @@ const DeviceList = () => {
|
||||
axiosInstance
|
||||
.get(
|
||||
`${endpoints.owgw}/api/v1/devices?deviceWithStatus=true&limit=${devicePerPage}&offset=${
|
||||
devicePerPage * selectedPage + 1
|
||||
devicePerPage * selectedPage
|
||||
}`,
|
||||
options,
|
||||
)
|
||||
@@ -225,13 +224,15 @@ const DeviceList = () => {
|
||||
};
|
||||
|
||||
const updatePageCount = ({ selected: selectedPage }) => {
|
||||
history.push(`/devices?page=${selectedPage}`);
|
||||
sessionStorage.setItem('deviceTable', selectedPage);
|
||||
setPage(selectedPage);
|
||||
getDeviceInformation(selectedPage);
|
||||
};
|
||||
|
||||
const upgradeToLatest = (device) => {
|
||||
setUpgradeStatus({
|
||||
loading: true,
|
||||
serialNumber: device.serialNumber,
|
||||
});
|
||||
|
||||
const options = {
|
||||
@@ -354,9 +355,6 @@ const DeviceList = () => {
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
if (page === undefined || page === null || Number.isNaN(page)) {
|
||||
history.push(`/devices?page=0`);
|
||||
}
|
||||
getCount();
|
||||
}, []);
|
||||
|
||||
|
||||
@@ -106,7 +106,7 @@ const DeviceLogs = () => {
|
||||
|
||||
const getDetails = (index, logDetails) => {
|
||||
if (details.includes(index))
|
||||
return <pre className="ignore">{JSON.stringify(logDetails, null, 4)}</pre>;
|
||||
return <pre className="ignore">{JSON.stringify(logDetails, null, 2)}</pre>;
|
||||
return <pre className="ignore" />;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,11 +1,28 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { CButton, CModal, CModalBody, CModalHeader, CModalTitle, CPopover } from '@coreui/react';
|
||||
import {
|
||||
CButton,
|
||||
CModal,
|
||||
CModalBody,
|
||||
CModalHeader,
|
||||
CModalTitle,
|
||||
CPopover,
|
||||
CNav,
|
||||
CNavLink,
|
||||
CTabPane,
|
||||
CTabContent,
|
||||
} from '@coreui/react';
|
||||
import CIcon from '@coreui/icons-react';
|
||||
import { cilPencil, cilSave, cilX } from '@coreui/icons';
|
||||
import axiosInstance from 'utils/axiosInstance';
|
||||
import { useFormFields, useAuth, useToast, FirmwareDetailsForm } from 'ucentral-libs';
|
||||
import {
|
||||
useFormFields,
|
||||
useAuth,
|
||||
useToast,
|
||||
FirmwareDetailsForm,
|
||||
DetailedNotesTable,
|
||||
} from 'ucentral-libs';
|
||||
|
||||
const initialState = {
|
||||
created: {
|
||||
@@ -33,11 +50,6 @@ const initialState = {
|
||||
error: false,
|
||||
editable: true,
|
||||
},
|
||||
owner: {
|
||||
value: '',
|
||||
error: false,
|
||||
editable: true,
|
||||
},
|
||||
revision: {
|
||||
value: '',
|
||||
error: false,
|
||||
@@ -65,6 +77,7 @@ const EditFirmwareModal = ({ show, toggle, firmwareId, refreshTable }) => {
|
||||
const { addToast } = useToast();
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [editing, setEditing] = useState(false);
|
||||
const [index, setIndex] = useState(0);
|
||||
const [firmware, updateWithId, updateWithKey, setFirmware] = useFormFields(initialState);
|
||||
|
||||
const getFirmware = () => {
|
||||
@@ -168,6 +181,7 @@ const EditFirmwareModal = ({ show, toggle, firmwareId, refreshTable }) => {
|
||||
if (show) {
|
||||
getFirmware();
|
||||
setEditing(false);
|
||||
setIndex(0);
|
||||
}
|
||||
}, [show]);
|
||||
|
||||
@@ -201,14 +215,48 @@ const EditFirmwareModal = ({ show, toggle, firmwareId, refreshTable }) => {
|
||||
</CPopover>
|
||||
</div>
|
||||
</CModalHeader>
|
||||
<CModalBody>
|
||||
<FirmwareDetailsForm
|
||||
t={t}
|
||||
fields={firmware}
|
||||
addNote={addNote}
|
||||
updateFieldsWithId={updateWithId}
|
||||
editing={editing}
|
||||
/>
|
||||
<CModalBody className="px-3 pt-0">
|
||||
<CNav variant="tabs" className="mb-0 p-0">
|
||||
<CNavLink
|
||||
className="font-weight-bold"
|
||||
href="#"
|
||||
active={index === 0}
|
||||
onClick={() => setIndex(0)}
|
||||
>
|
||||
{t('common.main')}
|
||||
</CNavLink>
|
||||
<CNavLink
|
||||
className="font-weight-bold"
|
||||
href="#"
|
||||
active={index === 1}
|
||||
onClick={() => setIndex(1)}
|
||||
>
|
||||
{t('configuration.notes')}
|
||||
</CNavLink>
|
||||
</CNav>
|
||||
<CTabContent>
|
||||
<CTabPane active={index === 0} className="pt-2">
|
||||
{index === 0 ? (
|
||||
<FirmwareDetailsForm
|
||||
t={t}
|
||||
fields={firmware}
|
||||
updateFieldsWithId={updateWithId}
|
||||
editing={editing}
|
||||
/>
|
||||
) : null}
|
||||
</CTabPane>
|
||||
<CTabPane active={index === 1}>
|
||||
{index === 1 ? (
|
||||
<DetailedNotesTable
|
||||
t={t}
|
||||
notes={firmware.notes.value}
|
||||
addNote={addNote}
|
||||
loading={loading}
|
||||
editable={editing}
|
||||
/>
|
||||
) : null}
|
||||
</CTabPane>
|
||||
</CTabContent>
|
||||
</CModalBody>
|
||||
</CModal>
|
||||
);
|
||||
|
||||
@@ -13,7 +13,7 @@ const initialState = {
|
||||
changePassword: {
|
||||
value: false,
|
||||
error: false,
|
||||
editable: false,
|
||||
editable: true,
|
||||
},
|
||||
currentPassword: {
|
||||
value: '',
|
||||
@@ -36,7 +36,7 @@ const initialState = {
|
||||
editable: true,
|
||||
},
|
||||
userRole: {
|
||||
value: '',
|
||||
value: 'accounting',
|
||||
error: false,
|
||||
editable: true,
|
||||
},
|
||||
@@ -46,7 +46,7 @@ const initialState = {
|
||||
},
|
||||
};
|
||||
|
||||
const EditUserModal = ({ show, toggle, userId, getUsers }) => {
|
||||
const EditUserModal = ({ show, toggle, userId, getUsers, policies }) => {
|
||||
const { t } = useTranslation();
|
||||
const { currentToken, endpoints } = useAuth();
|
||||
const { addToast } = useToast();
|
||||
@@ -54,23 +54,6 @@ const EditUserModal = ({ show, toggle, userId, getUsers }) => {
|
||||
const [initialUser, setInitialUser] = useState({});
|
||||
const [editing, setEditing] = useState(false);
|
||||
const [user, updateWithId, updateWithKey, setUser] = useUser(initialState);
|
||||
const [policies, setPolicies] = useState({
|
||||
passwordPolicy: '',
|
||||
passwordPattern: '',
|
||||
accessPolicy: '',
|
||||
});
|
||||
|
||||
const getPasswordPolicy = () => {
|
||||
axiosInstance
|
||||
.post(`${endpoints.owsec}/api/v1/oauth2?requirements=true`, {})
|
||||
.then((response) => {
|
||||
const newPolicies = response.data;
|
||||
newPolicies.accessPolicy = `${endpoints.owsec}${newPolicies.accessPolicy}`;
|
||||
newPolicies.passwordPolicy = `${endpoints.owsec}${newPolicies.passwordPolicy}`;
|
||||
setPolicies(response.data);
|
||||
})
|
||||
.catch(() => {});
|
||||
};
|
||||
|
||||
const getUser = () => {
|
||||
const options = {
|
||||
@@ -96,7 +79,15 @@ const EditUserModal = ({ show, toggle, userId, getUsers }) => {
|
||||
setInitialUser({ ...initialState, ...newUser });
|
||||
setUser({ ...initialState, ...newUser });
|
||||
})
|
||||
.catch(() => {});
|
||||
.catch(() => {
|
||||
addToast({
|
||||
title: t('common.error'),
|
||||
body: t('user.error_retrieving'),
|
||||
color: 'danger',
|
||||
autohide: true,
|
||||
});
|
||||
toggle();
|
||||
});
|
||||
};
|
||||
|
||||
const toggleEditing = () => {
|
||||
@@ -134,13 +125,14 @@ const EditUserModal = ({ show, toggle, userId, getUsers }) => {
|
||||
}
|
||||
|
||||
const newNotes = [];
|
||||
|
||||
for (let i = 0; i < user.notes.value.length; i += 1) {
|
||||
if (user.notes.value[i].new) newNotes.push({ note: user.notes.value[i].note });
|
||||
}
|
||||
|
||||
parameters.notes = newNotes;
|
||||
|
||||
if (newData) {
|
||||
if (newData || newNotes.length > 0) {
|
||||
const options = {
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
@@ -200,13 +192,11 @@ const EditUserModal = ({ show, toggle, userId, getUsers }) => {
|
||||
if (userId) {
|
||||
getUser();
|
||||
}
|
||||
if (policies.passwordPattern.length === 0) {
|
||||
getPasswordPolicy();
|
||||
}
|
||||
}, [userId]);
|
||||
|
||||
useEffect(() => {
|
||||
if (show) {
|
||||
getUser();
|
||||
setEditing(false);
|
||||
}
|
||||
}, [show]);
|
||||
@@ -233,6 +223,7 @@ EditUserModal.propTypes = {
|
||||
show: PropTypes.bool.isRequired,
|
||||
toggle: PropTypes.func.isRequired,
|
||||
getUsers: PropTypes.func.isRequired,
|
||||
policies: PropTypes.instanceOf(Object).isRequired,
|
||||
};
|
||||
|
||||
export default React.memo(EditUserModal);
|
||||
|
||||
@@ -134,7 +134,7 @@ const FirmwareDashboard = () => {
|
||||
if (
|
||||
parsedData.numberOfDevices === undefined ||
|
||||
Number.isNaN(parsedData.numberOfDevices) ||
|
||||
parsedData === 0
|
||||
parsedData.numberOfDevices === 0
|
||||
) {
|
||||
parsedData.latestSoftwareRate = '-';
|
||||
} else {
|
||||
@@ -151,13 +151,17 @@ const FirmwareDashboard = () => {
|
||||
: 0;
|
||||
const devicesForAverage = parsedData.numberOfDevices - usingUnknownFirmwareFromArray;
|
||||
|
||||
if (parsedData.totalSecondsOld.length > 0) {
|
||||
parsedData.averageFirmwareAge =
|
||||
if (devicesForAverage !== 0 && parsedData.totalSecondsOld.length > 0) {
|
||||
parsedData.averageFirmwareAge = Math.round(
|
||||
parsedData.totalSecondsOld[0].value /
|
||||
(devicesForAverage > 0 ? devicesForAverage : 1) /
|
||||
(24 * 60 * 60);
|
||||
(devicesForAverage > 0 ? devicesForAverage : 1) /
|
||||
(24 * 60 * 60),
|
||||
);
|
||||
parsedData.averageFirmwareAge = `${parsedData.averageFirmwareAge} ${
|
||||
Math.round(parsedData.averageFirmwareAge) > 0 ? t('common.days') : t('common.day')
|
||||
}`;
|
||||
} else {
|
||||
parsedData.averageFirmwareAge = 0;
|
||||
parsedData.averageFirmwareAge = '-';
|
||||
}
|
||||
|
||||
// Latest firmware distribution
|
||||
|
||||
@@ -51,7 +51,7 @@ const LatestStatisticsModal = ({ show, toggle }) => {
|
||||
</div>
|
||||
</CModalHeader>
|
||||
<CModalBody>
|
||||
<pre className="ignore">{JSON.stringify(latestStats, null, 4)}</pre>
|
||||
<pre className="ignore">{JSON.stringify(latestStats, null, 2)}</pre>
|
||||
</CModalBody>
|
||||
</CModal>
|
||||
);
|
||||
|
||||
@@ -31,7 +31,7 @@ const ActionModal = ({ show, toggleModal }) => {
|
||||
const [waiting, setWaiting] = useState(false);
|
||||
const [result, setResult] = useState(null);
|
||||
const [chosenDate, setChosenDate] = useState(new Date().toString());
|
||||
const [isNow, setIsNow] = useState(false);
|
||||
const [isNow, setIsNow] = useState(true);
|
||||
|
||||
const toggleNow = () => {
|
||||
setIsNow(!isNow);
|
||||
@@ -48,6 +48,7 @@ const ActionModal = ({ show, toggleModal }) => {
|
||||
setResult(null);
|
||||
setWaiting(false);
|
||||
setChosenDate(new Date().toString());
|
||||
setIsNow(true);
|
||||
}
|
||||
}, [show]);
|
||||
|
||||
|
||||
@@ -193,7 +193,7 @@ const TelemetryModal = ({ show, toggle }) => {
|
||||
</CRow>
|
||||
<CRow>
|
||||
<CCol>
|
||||
<pre>{JSON.stringify(lastMessage, null, '\t')}</pre>
|
||||
<pre>{JSON.stringify(lastMessage, null, 2)}</pre>
|
||||
</CCol>
|
||||
</CRow>
|
||||
<CRow>
|
||||
|
||||
@@ -57,6 +57,7 @@ const TheLayout = () => {
|
||||
endpoints={endpoints}
|
||||
user={user}
|
||||
avatar={avatar}
|
||||
hideBreadcrumb
|
||||
/>
|
||||
<div className="c-body">
|
||||
<ToastProvider>
|
||||
|
||||
@@ -1,22 +1,44 @@
|
||||
import React, { useState } from 'react';
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import DeviceList from 'components/DeviceListTable';
|
||||
import DeviceDashboard from 'components/DeviceDashboard';
|
||||
import { CCard, CCardBody, CNav, CNavLink, CTabPane, CTabContent } from '@coreui/react';
|
||||
import {
|
||||
CCard,
|
||||
CCardBody,
|
||||
CNav,
|
||||
CNavLink,
|
||||
CTabPane,
|
||||
CTabContent,
|
||||
CCardHeader,
|
||||
} from '@coreui/react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
const DeviceListPage = () => {
|
||||
const { t } = useTranslation();
|
||||
const [index, setIndex] = useState(0);
|
||||
|
||||
const updateNav = (target) => {
|
||||
sessionStorage.setItem('devicePage', target);
|
||||
setIndex(target);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
const target = sessionStorage.getItem('devicePage');
|
||||
|
||||
if (target !== null) setIndex(parseInt(target, 10));
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<CCard>
|
||||
<CCardHeader className="dark-header">
|
||||
<div className="text-value-lg mr-auto">{t('common.devices')}</div>
|
||||
</CCardHeader>
|
||||
<CCardBody className="p-0">
|
||||
<CNav variant="tabs">
|
||||
<CNavLink
|
||||
className="font-weight-bold"
|
||||
href="#"
|
||||
active={index === 0}
|
||||
onClick={() => setIndex(0)}
|
||||
onClick={() => updateNav(0)}
|
||||
>
|
||||
{t('common.dashboard')}
|
||||
</CNavLink>
|
||||
@@ -24,9 +46,9 @@ const DeviceListPage = () => {
|
||||
className="font-weight-bold"
|
||||
href="#"
|
||||
active={index === 1}
|
||||
onClick={() => setIndex(1)}
|
||||
onClick={() => updateNav(1)}
|
||||
>
|
||||
{t('common.devices')}
|
||||
{t('common.table')}
|
||||
</CNavLink>
|
||||
</CNav>
|
||||
<CTabContent>
|
||||
|
||||
@@ -2,7 +2,15 @@
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import axiosInstance from 'utils/axiosInstance';
|
||||
import { CCard, CCardBody, CNav, CNavLink, CTabPane, CTabContent } from '@coreui/react';
|
||||
import {
|
||||
CCard,
|
||||
CCardBody,
|
||||
CNav,
|
||||
CNavLink,
|
||||
CTabPane,
|
||||
CTabContent,
|
||||
CCardHeader,
|
||||
} from '@coreui/react';
|
||||
import { FirmwareList, useAuth, useToast } from 'ucentral-libs';
|
||||
import FirmwareDashboard from 'components/FirmwareDashboard';
|
||||
import EditFirmwareModal from 'components/EditFirmwareModal';
|
||||
@@ -88,7 +96,7 @@ const FirmwareListPage = () => {
|
||||
|
||||
const allFirmwares = [];
|
||||
let continueFirmware = true;
|
||||
let i = 1;
|
||||
let i = 0;
|
||||
while (continueFirmware) {
|
||||
const newFirmwares = await getPartialFirmware(deviceType ?? selectedDeviceType, i);
|
||||
if (newFirmwares === null || newFirmwares.length === 0) continueFirmware = false;
|
||||
@@ -161,6 +169,9 @@ const FirmwareListPage = () => {
|
||||
|
||||
return (
|
||||
<CCard>
|
||||
<CCardHeader className="dark-header">
|
||||
<div className="text-value-lg mr-auto">{t('common.firmware')}</div>
|
||||
</CCardHeader>
|
||||
<CCardBody className="p-0">
|
||||
<CNav variant="tabs">
|
||||
<CNavLink
|
||||
@@ -177,7 +188,7 @@ const FirmwareListPage = () => {
|
||||
active={index === 1}
|
||||
onClick={() => setIndex(1)}
|
||||
>
|
||||
{t('common.firmware')}
|
||||
{t('common.table')}
|
||||
</CNavLink>
|
||||
</CNav>
|
||||
<CTabContent>
|
||||
|
||||
@@ -133,7 +133,7 @@ const Login = () => {
|
||||
|
||||
const onKeyDown = (event, action) => {
|
||||
if (event.code === 'Enter') {
|
||||
action();
|
||||
action(event);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -256,27 +256,47 @@ const Login = () => {
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
if (formType !== 'change-password') {
|
||||
if (
|
||||
error.response.status === 403 &&
|
||||
error.response?.data?.ErrorDescription === 'Password change expected.'
|
||||
) {
|
||||
setFormType('change-password');
|
||||
if (formType === 'change-password') {
|
||||
if (error.response?.data?.ErrorCode === 3) {
|
||||
setChangeResponse({
|
||||
text: t('login.previously_used'),
|
||||
error: true,
|
||||
tried: true,
|
||||
});
|
||||
} else if (error.response?.data?.ErrorCode === 5) {
|
||||
setChangeResponse({
|
||||
text: t('common.invalid_password'),
|
||||
error: true,
|
||||
tried: true,
|
||||
});
|
||||
} else {
|
||||
setChangeResponse({
|
||||
text: t('login.change_password_error'),
|
||||
error: true,
|
||||
tried: true,
|
||||
});
|
||||
}
|
||||
} else if (error.response.status === 403) {
|
||||
if (error.response?.data?.ErrorCode === 1) setFormType('change-password');
|
||||
else if (error.response?.data?.ErrorCode === 2) {
|
||||
setLoginResponse({
|
||||
text: t('common.invalid_credentials'),
|
||||
error: true,
|
||||
tried: true,
|
||||
});
|
||||
} else {
|
||||
setLoginResponse({
|
||||
text: t('login.login_error'),
|
||||
error: true,
|
||||
tried: true,
|
||||
});
|
||||
}
|
||||
} else {
|
||||
setLoginResponse({
|
||||
text: t('login.login_error'),
|
||||
error: true,
|
||||
tried: true,
|
||||
});
|
||||
} else {
|
||||
setChangeResponse({
|
||||
text:
|
||||
fields.newpassword.value === fields.password.value
|
||||
? t('login.previously_used')
|
||||
: t('login.change_password_error'),
|
||||
error: true,
|
||||
tried: true,
|
||||
});
|
||||
}
|
||||
})
|
||||
.finally(() => {
|
||||
@@ -285,6 +305,107 @@ const Login = () => {
|
||||
}
|
||||
};
|
||||
|
||||
const submitForm = (event) => {
|
||||
event.preventDefault();
|
||||
setLoginResponse(initialResponseState);
|
||||
|
||||
setLoading(true);
|
||||
let token = '';
|
||||
|
||||
const parameters = {
|
||||
userId: event.target?.username?.value,
|
||||
password: event.target?.password?.value,
|
||||
};
|
||||
|
||||
if (formType === 'change-password') {
|
||||
parameters.newPassword = fields.newpassword.value;
|
||||
}
|
||||
|
||||
axiosInstance
|
||||
.post(`${fields.ucentralsecurl.value}/api/v1/oauth2`, parameters)
|
||||
.then((response) => {
|
||||
// If there's MFA to do
|
||||
if (response.data.method && response.data.created) {
|
||||
setFormType(`validation-${response.data.method}-${response.data.uuid}`);
|
||||
return null;
|
||||
}
|
||||
if (response.data.userMustChangePassword) {
|
||||
setFormType('change-password');
|
||||
return null;
|
||||
}
|
||||
setItem('access_token', response.data.access_token);
|
||||
token = response.data.access_token;
|
||||
return axiosInstance.get(`${fields.ucentralsecurl.value}/api/v1/systemEndpoints`, {
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
Authorization: `Bearer ${response.data.access_token}`,
|
||||
},
|
||||
});
|
||||
})
|
||||
.then((response) => {
|
||||
if (response) {
|
||||
const endpoints = {
|
||||
owsec: fields.ucentralsecurl.value,
|
||||
};
|
||||
for (const endpoint of response.data.endpoints) {
|
||||
endpoints[endpoint.type] = endpoint.uri;
|
||||
}
|
||||
if (endpoints.owgw) getGatewayUIUrl(token, endpoints.owgw);
|
||||
if (endpoints.owprov) getProvUIUrl(token, endpoints.owprov);
|
||||
setItem('gateway_endpoints', JSON.stringify(endpoints));
|
||||
setEndpoints(endpoints);
|
||||
setCurrentToken(token);
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
if (formType === 'change-password') {
|
||||
if (error.response?.data?.ErrorCode === 3) {
|
||||
setChangeResponse({
|
||||
text: t('login.previously_used'),
|
||||
error: true,
|
||||
tried: true,
|
||||
});
|
||||
} else if (error.response?.data?.ErrorCode === 5) {
|
||||
setChangeResponse({
|
||||
text: t('common.invalid_password'),
|
||||
error: true,
|
||||
tried: true,
|
||||
});
|
||||
} else {
|
||||
setChangeResponse({
|
||||
text: t('login.change_password_error'),
|
||||
error: true,
|
||||
tried: true,
|
||||
});
|
||||
}
|
||||
} else if (error.response.status === 403) {
|
||||
if (error.response?.data?.ErrorCode === 1) setFormType('change-password');
|
||||
else if (error.response?.data?.ErrorCode === 2) {
|
||||
setLoginResponse({
|
||||
text: t('common.invalid_credentials'),
|
||||
error: true,
|
||||
tried: true,
|
||||
});
|
||||
} else {
|
||||
setLoginResponse({
|
||||
text: t('login.login_error'),
|
||||
error: true,
|
||||
tried: true,
|
||||
});
|
||||
}
|
||||
} else {
|
||||
setLoginResponse({
|
||||
text: t('login.login_error'),
|
||||
error: true,
|
||||
tried: true,
|
||||
});
|
||||
}
|
||||
})
|
||||
.finally(() => {
|
||||
setLoading(false);
|
||||
});
|
||||
};
|
||||
|
||||
const sendForgotPasswordEmail = () => {
|
||||
setForgotResponse(initialResponseState);
|
||||
|
||||
@@ -426,6 +547,7 @@ const Login = () => {
|
||||
toggleForgotPassword={toggleForgotPassword}
|
||||
formType={formType}
|
||||
onKeyDown={onKeyDown}
|
||||
submitForm={submitForm}
|
||||
sendForgotPasswordEmail={sendForgotPasswordEmail}
|
||||
changePasswordResponse={changePasswordResponse}
|
||||
cancelPasswordChange={cancelPasswordChange}
|
||||
|
||||
@@ -20,6 +20,23 @@ const UserListPage = () => {
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [deleteLoading, setDeleteLoading] = useState(false);
|
||||
const [usersPerPage, setUsersPerPage] = useState(getItem('devicesPerPage') || '10');
|
||||
const [policies, setPolicies] = useState({
|
||||
passwordPolicy: '',
|
||||
passwordPattern: '',
|
||||
accessPolicy: '',
|
||||
});
|
||||
|
||||
const getPasswordPolicy = () => {
|
||||
axiosInstance
|
||||
.post(`${endpoints.owsec}/api/v1/oauth2?requirements=true`, {})
|
||||
.then((response) => {
|
||||
const newPolicies = response.data;
|
||||
newPolicies.accessPolicy = `${endpoints.owsec}${newPolicies.accessPolicy}`;
|
||||
newPolicies.passwordPolicy = `${endpoints.owsec}${newPolicies.passwordPolicy}`;
|
||||
setPolicies(response.data);
|
||||
})
|
||||
.catch(() => {});
|
||||
};
|
||||
|
||||
const toggleCreateModal = () => {
|
||||
setShowCreateModal(!showCreateModal);
|
||||
@@ -180,6 +197,7 @@ const UserListPage = () => {
|
||||
|
||||
useEffect(() => {
|
||||
getUsers();
|
||||
getPasswordPolicy();
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
@@ -193,7 +211,7 @@ const UserListPage = () => {
|
||||
<div>
|
||||
<UserListTable
|
||||
t={t}
|
||||
users={usersToDisplay}
|
||||
users={usersToDisplay.sort((a, b) => a.email > b.email)}
|
||||
loading={loading}
|
||||
usersPerPage={usersPerPage}
|
||||
setUsersPerPage={updateUsersPerPage}
|
||||
@@ -206,12 +224,18 @@ const UserListPage = () => {
|
||||
toggleEdit={toggleEditModal}
|
||||
refreshUsers={getUsers}
|
||||
/>
|
||||
<CreateUserModal show={showCreateModal} toggle={toggleCreateModal} getUsers={getUsers} />
|
||||
<CreateUserModal
|
||||
show={showCreateModal}
|
||||
toggle={toggleCreateModal}
|
||||
getUsers={getUsers}
|
||||
policies={policies}
|
||||
/>
|
||||
<EditUserModal
|
||||
show={showEditModal}
|
||||
toggle={toggleEditModal}
|
||||
userId={userToEdit}
|
||||
getUsers={getUsers}
|
||||
policies={policies}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -20,10 +20,12 @@ axiosInstance.interceptors.response.use(
|
||||
case 401:
|
||||
break;
|
||||
case 403:
|
||||
localStorage.removeItem('access_token');
|
||||
localStorage.removeItem('gateway_endpoints');
|
||||
sessionStorage.clear();
|
||||
window.location.href = '/';
|
||||
if (error.response.data?.ErrorCode === 9) {
|
||||
localStorage.removeItem('access_token');
|
||||
localStorage.removeItem('gateway_endpoints');
|
||||
sessionStorage.clear();
|
||||
window.location.href = '/';
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user