mirror of
				https://github.com/Telecominfraproject/wlan-cloud-ucentralgw-ui.git
				synced 2025-10-30 18:27:53 +00:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			v2.4.0-RC2
			...
			release/v2
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 6d4d8d64f8 | 
| @@ -26,12 +26,6 @@ spec: | ||||
|         {{- with .Values.services.owgwui.labels }} | ||||
|         {{- toYaml . | nindent 8 }} | ||||
|         {{- end }} | ||||
|       {{- if .Values.podAnnotations }} | ||||
|       annotations: | ||||
|         {{- with .Values.podAnnotations }} | ||||
|         {{- toYaml . | nindent 8 }} | ||||
|         {{- end }} | ||||
|       {{- end }} | ||||
|     spec: | ||||
|  | ||||
|       containers: | ||||
|   | ||||
| @@ -7,7 +7,7 @@ fullnameOverride: "" | ||||
| images: | ||||
|   owgwui: | ||||
|     repository: tip-tip-wlan-cloud-ucentral.jfrog.io/owgw-ui | ||||
|     tag: v2.4.0-RC2 | ||||
|     tag: v2.3.0-RC1 | ||||
|     pullPolicy: Always | ||||
|  | ||||
| services: | ||||
| @@ -69,8 +69,6 @@ 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.4.3", | ||||
|   "version": "2.3.9", | ||||
|   "lockfileVersion": 2, | ||||
|   "requires": true, | ||||
|   "packages": { | ||||
|     "": { | ||||
|       "name": "ucentral-client", | ||||
|       "version": "2.4.3", | ||||
|       "version": "2.3.9", | ||||
|       "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": "^1.0.37", | ||||
|         "ucentral-libs": "^0.9.98", | ||||
|         "uuid": "^8.3.2" | ||||
|       }, | ||||
|       "devDependencies": { | ||||
| @@ -14842,9 +14842,9 @@ | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/ucentral-libs": { | ||||
|       "version": "1.0.37", | ||||
|       "resolved": "https://registry.npmjs.org/ucentral-libs/-/ucentral-libs-1.0.37.tgz", | ||||
|       "integrity": "sha512-ALQobos6DIvXEydPotUixP7AZaDlUm2qUFkvR8F0EsdeSAW1UeYEg7Gp5r6RtxUqxp6DKpPCxOQ9bcqcl5556g==", | ||||
|       "version": "0.9.98", | ||||
|       "resolved": "https://registry.npmjs.org/ucentral-libs/-/ucentral-libs-0.9.98.tgz", | ||||
|       "integrity": "sha512-Fwn0sqFS2u5bIN5gtbslgAZnki2J4iz6ucGVJmKdvghm+E45+KYFC2yGWGNlBfBkKIsSDlSIIhQHFEo0JTTCZg==", | ||||
|       "dependencies": { | ||||
|         "@coreui/coreui": "^3.4.0", | ||||
|         "@coreui/icons": "^2.0.1", | ||||
| @@ -27716,9 +27716,9 @@ | ||||
|       } | ||||
|     }, | ||||
|     "ucentral-libs": { | ||||
|       "version": "1.0.37", | ||||
|       "resolved": "https://registry.npmjs.org/ucentral-libs/-/ucentral-libs-1.0.37.tgz", | ||||
|       "integrity": "sha512-ALQobos6DIvXEydPotUixP7AZaDlUm2qUFkvR8F0EsdeSAW1UeYEg7Gp5r6RtxUqxp6DKpPCxOQ9bcqcl5556g==", | ||||
|       "version": "0.9.98", | ||||
|       "resolved": "https://registry.npmjs.org/ucentral-libs/-/ucentral-libs-0.9.98.tgz", | ||||
|       "integrity": "sha512-Fwn0sqFS2u5bIN5gtbslgAZnki2J4iz6ucGVJmKdvghm+E45+KYFC2yGWGNlBfBkKIsSDlSIIhQHFEo0JTTCZg==", | ||||
|       "requires": { | ||||
|         "@coreui/coreui": "^3.4.0", | ||||
|         "@coreui/icons": "^2.0.1", | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "ucentral-client", | ||||
|   "version": "2.4.3", | ||||
|   "version": "2.3.9", | ||||
|   "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": "^1.0.37", | ||||
|     "ucentral-libs": "^0.9.98", | ||||
|     "uuid": "^8.3.2" | ||||
|   }, | ||||
|   "main": "index.js", | ||||
|   | ||||
| @@ -52,10 +52,8 @@ | ||||
| 		"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", | ||||
| @@ -73,7 +71,7 @@ | ||||
| 		"details": "Einzelheiten", | ||||
| 		"device": "Gerät #{{serialNumber}}", | ||||
| 		"device_dashboard": "Geräte-Dashboard", | ||||
| 		"device_delete": "#{{serialNumber}}löschen", | ||||
| 		"device_delete": "Gerät Nr.{{serialNumber}}löschen", | ||||
| 		"device_deleted": "Gerät erfolgreich gelöscht", | ||||
| 		"device_health": "Gerätezustand", | ||||
| 		"device_list": "Liste der Geräte", | ||||
| @@ -104,21 +102,17 @@ | ||||
| 		"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", | ||||
| @@ -127,10 +121,8 @@ | ||||
| 		"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", | ||||
| @@ -163,9 +155,7 @@ | ||||
| 		"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!", | ||||
| @@ -215,7 +205,6 @@ | ||||
| 		"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", | ||||
| @@ -243,7 +232,6 @@ | ||||
| 		"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" | ||||
| @@ -262,7 +250,6 @@ | ||||
| 		"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}}", | ||||
| @@ -300,12 +287,8 @@ | ||||
| 		"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}}", | ||||
| 		"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" | ||||
| 		"error_fetching_devices": "Fehler beim Abrufen von Geräten: {{error}}" | ||||
| 	}, | ||||
| 	"device_logs": { | ||||
| 		"log": "Protokoll", | ||||
| @@ -326,12 +309,10 @@ | ||||
| 		"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", | ||||
| @@ -343,7 +324,6 @@ | ||||
| 		"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" | ||||
| @@ -356,7 +336,6 @@ | ||||
| 		"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", | ||||
| @@ -369,11 +348,9 @@ | ||||
| 		"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", | ||||
| @@ -480,8 +457,7 @@ | ||||
| 		"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", | ||||
| 		"view_in_gateway": "Im Gateway anzeigen" | ||||
| 		"venue": "Tagungsort" | ||||
| 	}, | ||||
| 	"location": { | ||||
| 		"add": "Ort hinzufügen", | ||||
| @@ -489,16 +465,13 @@ | ||||
| 		"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", | ||||
| @@ -560,59 +533,6 @@ | ||||
| 	"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", | ||||
| @@ -686,7 +606,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: {{error}}", | ||||
| 		"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_success": "Benutzer erfolgreich erstellt", | ||||
| 		"creating": "Benutzer erstellen ...", | ||||
| 		"delete_avatar": "Avatar löschen", | ||||
| @@ -700,7 +620,6 @@ | ||||
| 		"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,10 +52,8 @@ | ||||
| 		"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", | ||||
| @@ -73,7 +71,7 @@ | ||||
| 		"details": "Details", | ||||
| 		"device": "Device #{{serialNumber}}", | ||||
| 		"device_dashboard": "Device Dashboard", | ||||
| 		"device_delete": "Delete #{{serialNumber}}", | ||||
| 		"device_delete": "Delete Device #{{serialNumber}}", | ||||
| 		"device_deleted": "Device Successfully Deleted", | ||||
| 		"device_health": "Device Health", | ||||
| 		"device_list": "List of Devices", | ||||
| @@ -104,21 +102,17 @@ | ||||
| 		"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", | ||||
| @@ -127,10 +121,8 @@ | ||||
| 		"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", | ||||
| @@ -163,9 +155,7 @@ | ||||
| 		"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!", | ||||
| @@ -215,7 +205,6 @@ | ||||
| 		"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", | ||||
| @@ -243,7 +232,6 @@ | ||||
| 		"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" | ||||
| @@ -262,7 +250,6 @@ | ||||
| 		"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}}", | ||||
| @@ -300,12 +287,8 @@ | ||||
| 		"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}}", | ||||
| 		"health_explanation": "Health of connected devices", | ||||
| 		"memory_explanation": "Memory used by connected devices", | ||||
| 		"uptimes_explanation": "Time connected devices have been up and connected" | ||||
| 		"error_fetching_devices": "Error while fetching devices: {{error}}" | ||||
| 	}, | ||||
| 	"device_logs": { | ||||
| 		"log": "Log", | ||||
| @@ -326,12 +309,10 @@ | ||||
| 		"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", | ||||
| @@ -343,7 +324,6 @@ | ||||
| 		"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" | ||||
| @@ -356,7 +336,6 @@ | ||||
| 		"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", | ||||
| @@ -369,11 +348,9 @@ | ||||
| 		"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", | ||||
| @@ -480,8 +457,7 @@ | ||||
| 		"unassigned_deleted_devices": "{{number}} Devices Deleted and Unassigned", | ||||
| 		"unassigned_tags": "Unassigned tags", | ||||
| 		"validating_import_file": "Validating import file and data...", | ||||
| 		"venue": "Venue", | ||||
| 		"view_in_gateway": "Details in Gateway" | ||||
| 		"venue": "Venue" | ||||
| 	}, | ||||
| 	"location": { | ||||
| 		"add": "Add Location", | ||||
| @@ -489,16 +465,13 @@ | ||||
| 		"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", | ||||
| @@ -560,59 +533,6 @@ | ||||
| 	"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", | ||||
| @@ -686,7 +606,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: {{error}}", | ||||
| 		"create_failure": "Error while creating user. Please make sure this email address is not already linked to an account.", | ||||
| 		"create_success": "User Created Successfully", | ||||
| 		"creating": "Creating User...", | ||||
| 		"delete_avatar": "Delete Avatar", | ||||
| @@ -700,7 +620,6 @@ | ||||
| 		"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,10 +52,8 @@ | ||||
| 		"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", | ||||
| @@ -73,7 +71,7 @@ | ||||
| 		"details": "Detalles", | ||||
| 		"device": "Dispositivo n.º{{serialNumber}}", | ||||
| 		"device_dashboard": "Panel de control del dispositivo", | ||||
| 		"device_delete": "Eliminar #{{serialNumber}}", | ||||
| 		"device_delete": "Eliminar dispositivo n.º{{serialNumber}}", | ||||
| 		"device_deleted": "Dispositivo eliminado correctamente", | ||||
| 		"device_health": "Salud del dispositivo", | ||||
| 		"device_list": "Listado de dispositivos", | ||||
| @@ -104,21 +102,17 @@ | ||||
| 		"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", | ||||
| @@ -127,10 +121,8 @@ | ||||
| 		"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", | ||||
| @@ -163,9 +155,7 @@ | ||||
| 		"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!", | ||||
| @@ -215,7 +205,6 @@ | ||||
| 		"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", | ||||
| @@ -243,7 +232,6 @@ | ||||
| 		"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" | ||||
| @@ -262,7 +250,6 @@ | ||||
| 		"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}}", | ||||
| @@ -300,12 +287,8 @@ | ||||
| 		"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}}", | ||||
| 		"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" | ||||
| 		"error_fetching_devices": "Error al recuperar dispositivos: {{error}}" | ||||
| 	}, | ||||
| 	"device_logs": { | ||||
| 		"log": "Iniciar sesión", | ||||
| @@ -326,12 +309,10 @@ | ||||
| 		"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", | ||||
| @@ -343,7 +324,6 @@ | ||||
| 		"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" | ||||
| @@ -356,7 +336,6 @@ | ||||
| 		"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}} ", | ||||
| @@ -369,11 +348,9 @@ | ||||
| 		"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", | ||||
| @@ -480,8 +457,7 @@ | ||||
| 		"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", | ||||
| 		"view_in_gateway": "Ver en Gateway" | ||||
| 		"venue": "Lugar de encuentro" | ||||
| 	}, | ||||
| 	"location": { | ||||
| 		"add": "Añade una ubicación", | ||||
| @@ -489,16 +465,13 @@ | ||||
| 		"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", | ||||
| @@ -560,59 +533,6 @@ | ||||
| 	"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", | ||||
| @@ -686,7 +606,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 el usuario: {{error}}", | ||||
| 		"create_failure": "Error al crear usuario. Asegúrese de que esta dirección de correo electrónico no esté vinculada a una cuenta.", | ||||
| 		"create_success": "Usuario creado con éxito", | ||||
| 		"creating": "Creando usuario ...", | ||||
| 		"delete_avatar": "Eliminar avatar", | ||||
| @@ -700,7 +620,6 @@ | ||||
| 		"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,10 +52,8 @@ | ||||
| 		"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", | ||||
| @@ -73,7 +71,7 @@ | ||||
| 		"details": "Détails", | ||||
| 		"device": "N° d'appareil{{serialNumber}}", | ||||
| 		"device_dashboard": "Tableau de bord de l'appareil", | ||||
| 		"device_delete": "Supprimer #{{serialNumber}}", | ||||
| 		"device_delete": "Supprimer l'appareil n°{{serialNumber}}", | ||||
| 		"device_deleted": "Appareil supprimé avec succès", | ||||
| 		"device_health": "Santé de l'appareil", | ||||
| 		"device_list": "Liste des appareils", | ||||
| @@ -104,21 +102,17 @@ | ||||
| 		"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", | ||||
| @@ -127,10 +121,8 @@ | ||||
| 		"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é", | ||||
| @@ -163,9 +155,7 @@ | ||||
| 		"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 !", | ||||
| @@ -215,7 +205,6 @@ | ||||
| 		"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", | ||||
| @@ -243,7 +232,6 @@ | ||||
| 		"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" | ||||
| @@ -262,7 +250,6 @@ | ||||
| 		"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}}", | ||||
| @@ -300,12 +287,8 @@ | ||||
| 		"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}}", | ||||
| 		"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" | ||||
| 		"error_fetching_devices": "Erreur lors de la récupération des appareils : {{error}}" | ||||
| 	}, | ||||
| 	"device_logs": { | ||||
| 		"log": "Bûche", | ||||
| @@ -326,12 +309,10 @@ | ||||
| 		"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", | ||||
| @@ -343,7 +324,6 @@ | ||||
| 		"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" | ||||
| @@ -356,7 +336,6 @@ | ||||
| 		"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", | ||||
| @@ -369,11 +348,9 @@ | ||||
| 		"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", | ||||
| @@ -480,8 +457,7 @@ | ||||
| 		"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", | ||||
| 		"view_in_gateway": "Afficher dans la passerelle" | ||||
| 		"venue": "Lieu" | ||||
| 	}, | ||||
| 	"location": { | ||||
| 		"add": "Ajouter un emplacement", | ||||
| @@ -489,16 +465,13 @@ | ||||
| 		"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", | ||||
| @@ -560,59 +533,6 @@ | ||||
| 	"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", | ||||
| @@ -686,7 +606,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 : {{error}}", | ||||
| 		"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_success": "L'utilisateur a été créé avec succès", | ||||
| 		"creating": "Création de l'utilisateur...", | ||||
| 		"delete_avatar": "Supprimer l'avatar", | ||||
| @@ -700,7 +620,6 @@ | ||||
| 		"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,10 +52,8 @@ | ||||
| 		"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", | ||||
| @@ -73,7 +71,7 @@ | ||||
| 		"details": "Detalhes", | ||||
| 		"device": "Dispositivo nº{{serialNumber}}", | ||||
| 		"device_dashboard": "Painel do dispositivo", | ||||
| 		"device_delete": "Excluir #{{serialNumber}}", | ||||
| 		"device_delete": "Excluir dispositivo nº{{serialNumber}}", | ||||
| 		"device_deleted": "Dispositivo excluído com sucesso", | ||||
| 		"device_health": "Saúde do Dispositivo", | ||||
| 		"device_list": "Lista de Dispositivos", | ||||
| @@ -104,21 +102,17 @@ | ||||
| 		"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", | ||||
| @@ -127,10 +121,8 @@ | ||||
| 		"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", | ||||
| @@ -163,9 +155,7 @@ | ||||
| 		"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!", | ||||
| @@ -215,7 +205,6 @@ | ||||
| 		"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", | ||||
| @@ -243,7 +232,6 @@ | ||||
| 		"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" | ||||
| @@ -262,7 +250,6 @@ | ||||
| 		"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}}", | ||||
| @@ -300,12 +287,8 @@ | ||||
| 		"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}}", | ||||
| 		"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" | ||||
| 		"error_fetching_devices": "Erro ao buscar dispositivos: {{error}}" | ||||
| 	}, | ||||
| 	"device_logs": { | ||||
| 		"log": "Registro", | ||||
| @@ -326,12 +309,10 @@ | ||||
| 		"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", | ||||
| @@ -343,7 +324,6 @@ | ||||
| 		"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" | ||||
| @@ -356,7 +336,6 @@ | ||||
| 		"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}} ", | ||||
| @@ -369,11 +348,9 @@ | ||||
| 		"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", | ||||
| @@ -480,8 +457,7 @@ | ||||
| 		"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", | ||||
| 		"view_in_gateway": "Ver no Gateway" | ||||
| 		"venue": "Local" | ||||
| 	}, | ||||
| 	"location": { | ||||
| 		"add": "Adicionar Local", | ||||
| @@ -489,16 +465,13 @@ | ||||
| 		"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", | ||||
| @@ -560,59 +533,6 @@ | ||||
| 	"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", | ||||
| @@ -686,7 +606,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: {{error}}", | ||||
| 		"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_success": "Usuário criado com sucesso", | ||||
| 		"creating": "Criando usuário ...", | ||||
| 		"delete_avatar": "Apagar Avatar", | ||||
| @@ -700,7 +620,6 @@ | ||||
| 		"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, 2)}</pre> | ||||
|       <pre className="ignore">{JSON.stringify(details, null, 4)}</pre> | ||||
|     </CModalBody> | ||||
|   </CModal> | ||||
| ); | ||||
|   | ||||
| @@ -27,7 +27,7 @@ const initialState = { | ||||
|     error: false, | ||||
|   }, | ||||
|   userRole: { | ||||
|     value: 'accounting', | ||||
|     value: 'admin', | ||||
|     error: false, | ||||
|   }, | ||||
|   notes: { | ||||
| @@ -42,11 +42,16 @@ const initialState = { | ||||
|   }, | ||||
| }; | ||||
|  | ||||
| const CreateUserModal = ({ show, toggle, getUsers, policies }) => { | ||||
| const CreateUserModal = ({ show, toggle, getUsers }) => { | ||||
|   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 = () => { | ||||
| @@ -102,10 +107,10 @@ const CreateUserModal = ({ show, toggle, getUsers, policies }) => { | ||||
|           }); | ||||
|           toggle(); | ||||
|         }) | ||||
|         .catch((e) => { | ||||
|         .catch(() => { | ||||
|           addToast({ | ||||
|             title: t('common.error'), | ||||
|             body: t('user.create_failure', { error: e.response?.data?.ErrorDescription }), | ||||
|             body: t('user.create_failure'), | ||||
|             color: 'danger', | ||||
|             autohide: true, | ||||
|           }); | ||||
| @@ -117,6 +122,23 @@ const CreateUserModal = ({ show, toggle, getUsers, policies }) => { | ||||
|       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]); | ||||
| @@ -155,7 +177,6 @@ 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, 2)}</pre> | ||||
|           <pre className="ignore">{JSON.stringify(configuration, null, 4)}</pre> | ||||
|         </CModalBody> | ||||
|         <CModalFooter> | ||||
|           <CButton color="secondary" onClick={toggle}> | ||||
|   | ||||
| @@ -48,7 +48,7 @@ const DeviceFirmwareModal = ({ | ||||
|  | ||||
|     const allFirmwares = []; | ||||
|     let continueFirmware = true; | ||||
|     let i = 0; | ||||
|     let i = 1; | ||||
|     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 } from 'react-router-dom'; | ||||
| import { useHistory, useLocation } from 'react-router-dom'; | ||||
| import axiosInstance from 'utils/axiosInstance'; | ||||
| import { getItem, setItem } from 'utils/localStorageHelper'; | ||||
| import DeviceSearchBar from 'components/DeviceSearchBar'; | ||||
| @@ -16,7 +16,8 @@ const DeviceList = () => { | ||||
|   const { t } = useTranslation(); | ||||
|   const { addToast } = useToast(); | ||||
|   const history = useHistory(); | ||||
|   const [page, setPage] = useState(parseInt(sessionStorage.getItem('deviceTable') ?? 0, 10)); | ||||
|   const { search } = useLocation(); | ||||
|   const page = new URLSearchParams(search).get('page'); | ||||
|   const { currentToken, endpoints } = useAuth(); | ||||
|   const [upgradeStatus, setUpgradeStatus] = useState({ | ||||
|     loading: false, | ||||
| @@ -68,7 +69,7 @@ const DeviceList = () => { | ||||
|     axiosInstance | ||||
|       .get( | ||||
|         `${endpoints.owgw}/api/v1/devices?deviceWithStatus=true&limit=${devicePerPage}&offset=${ | ||||
|           devicePerPage * selectedPage | ||||
|           devicePerPage * selectedPage + 1 | ||||
|         }`, | ||||
|         options, | ||||
|       ) | ||||
| @@ -224,15 +225,13 @@ const DeviceList = () => { | ||||
|   }; | ||||
|  | ||||
|   const updatePageCount = ({ selected: selectedPage }) => { | ||||
|     sessionStorage.setItem('deviceTable', selectedPage); | ||||
|     setPage(selectedPage); | ||||
|     history.push(`/devices?page=${selectedPage}`); | ||||
|     getDeviceInformation(selectedPage); | ||||
|   }; | ||||
|  | ||||
|   const upgradeToLatest = (device) => { | ||||
|     setUpgradeStatus({ | ||||
|       loading: true, | ||||
|       serialNumber: device.serialNumber, | ||||
|     }); | ||||
|  | ||||
|     const options = { | ||||
| @@ -355,6 +354,9 @@ 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, 2)}</pre>; | ||||
|       return <pre className="ignore">{JSON.stringify(logDetails, null, 4)}</pre>; | ||||
|     return <pre className="ignore" />; | ||||
|   }; | ||||
|  | ||||
|   | ||||
| @@ -1,28 +1,11 @@ | ||||
| import React, { useEffect, useState } from 'react'; | ||||
| import PropTypes from 'prop-types'; | ||||
| import { useTranslation } from 'react-i18next'; | ||||
| import { | ||||
|   CButton, | ||||
|   CModal, | ||||
|   CModalBody, | ||||
|   CModalHeader, | ||||
|   CModalTitle, | ||||
|   CPopover, | ||||
|   CNav, | ||||
|   CNavLink, | ||||
|   CTabPane, | ||||
|   CTabContent, | ||||
| } from '@coreui/react'; | ||||
| import { CButton, CModal, CModalBody, CModalHeader, CModalTitle, CPopover } 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, | ||||
|   DetailedNotesTable, | ||||
| } from 'ucentral-libs'; | ||||
| import { useFormFields, useAuth, useToast, FirmwareDetailsForm } from 'ucentral-libs'; | ||||
|  | ||||
| const initialState = { | ||||
|   created: { | ||||
| @@ -50,6 +33,11 @@ const initialState = { | ||||
|     error: false, | ||||
|     editable: true, | ||||
|   }, | ||||
|   owner: { | ||||
|     value: '', | ||||
|     error: false, | ||||
|     editable: true, | ||||
|   }, | ||||
|   revision: { | ||||
|     value: '', | ||||
|     error: false, | ||||
| @@ -77,7 +65,6 @@ 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 = () => { | ||||
| @@ -181,7 +168,6 @@ const EditFirmwareModal = ({ show, toggle, firmwareId, refreshTable }) => { | ||||
|     if (show) { | ||||
|       getFirmware(); | ||||
|       setEditing(false); | ||||
|       setIndex(0); | ||||
|     } | ||||
|   }, [show]); | ||||
|  | ||||
| @@ -215,48 +201,14 @@ const EditFirmwareModal = ({ show, toggle, firmwareId, refreshTable }) => { | ||||
|           </CPopover> | ||||
|         </div> | ||||
|       </CModalHeader> | ||||
|       <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 ? ( | ||||
|       <CModalBody> | ||||
|         <FirmwareDetailsForm | ||||
|           t={t} | ||||
|           fields={firmware} | ||||
|           addNote={addNote} | ||||
|           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: true, | ||||
|     editable: false, | ||||
|   }, | ||||
|   currentPassword: { | ||||
|     value: '', | ||||
| @@ -36,7 +36,7 @@ const initialState = { | ||||
|     editable: true, | ||||
|   }, | ||||
|   userRole: { | ||||
|     value: 'accounting', | ||||
|     value: '', | ||||
|     error: false, | ||||
|     editable: true, | ||||
|   }, | ||||
| @@ -46,7 +46,7 @@ const initialState = { | ||||
|   }, | ||||
| }; | ||||
|  | ||||
| const EditUserModal = ({ show, toggle, userId, getUsers, policies }) => { | ||||
| const EditUserModal = ({ show, toggle, userId, getUsers }) => { | ||||
|   const { t } = useTranslation(); | ||||
|   const { currentToken, endpoints } = useAuth(); | ||||
|   const { addToast } = useToast(); | ||||
| @@ -54,6 +54,23 @@ const EditUserModal = ({ show, toggle, userId, getUsers, policies }) => { | ||||
|   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 = { | ||||
| @@ -79,15 +96,7 @@ const EditUserModal = ({ show, toggle, userId, getUsers, policies }) => { | ||||
|         setInitialUser({ ...initialState, ...newUser }); | ||||
|         setUser({ ...initialState, ...newUser }); | ||||
|       }) | ||||
|       .catch(() => { | ||||
|         addToast({ | ||||
|           title: t('common.error'), | ||||
|           body: t('user.error_retrieving'), | ||||
|           color: 'danger', | ||||
|           autohide: true, | ||||
|         }); | ||||
|         toggle(); | ||||
|       }); | ||||
|       .catch(() => {}); | ||||
|   }; | ||||
|  | ||||
|   const toggleEditing = () => { | ||||
| @@ -125,14 +134,13 @@ const EditUserModal = ({ show, toggle, userId, getUsers, policies }) => { | ||||
|     } | ||||
|  | ||||
|     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 || newNotes.length > 0) { | ||||
|     if (newData) { | ||||
|       const options = { | ||||
|         headers: { | ||||
|           Accept: 'application/json', | ||||
| @@ -192,11 +200,13 @@ const EditUserModal = ({ show, toggle, userId, getUsers, policies }) => { | ||||
|     if (userId) { | ||||
|       getUser(); | ||||
|     } | ||||
|     if (policies.passwordPattern.length === 0) { | ||||
|       getPasswordPolicy(); | ||||
|     } | ||||
|   }, [userId]); | ||||
|  | ||||
|   useEffect(() => { | ||||
|     if (show) { | ||||
|       getUser(); | ||||
|       setEditing(false); | ||||
|     } | ||||
|   }, [show]); | ||||
| @@ -223,7 +233,6 @@ 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.numberOfDevices === 0 | ||||
|       parsedData === 0 | ||||
|     ) { | ||||
|       parsedData.latestSoftwareRate = '-'; | ||||
|     } else { | ||||
| @@ -151,17 +151,13 @@ const FirmwareDashboard = () => { | ||||
|         : 0; | ||||
|     const devicesForAverage = parsedData.numberOfDevices - usingUnknownFirmwareFromArray; | ||||
|  | ||||
|     if (devicesForAverage !== 0 && parsedData.totalSecondsOld.length > 0) { | ||||
|       parsedData.averageFirmwareAge = Math.round( | ||||
|     if (parsedData.totalSecondsOld.length > 0) { | ||||
|       parsedData.averageFirmwareAge = | ||||
|         parsedData.totalSecondsOld[0].value / | ||||
|         (devicesForAverage > 0 ? devicesForAverage : 1) / | ||||
|           (24 * 60 * 60), | ||||
|       ); | ||||
|       parsedData.averageFirmwareAge = `${parsedData.averageFirmwareAge} ${ | ||||
|         Math.round(parsedData.averageFirmwareAge) > 0 ? t('common.days') : t('common.day') | ||||
|       }`; | ||||
|         (24 * 60 * 60); | ||||
|     } else { | ||||
|       parsedData.averageFirmwareAge = '-'; | ||||
|       parsedData.averageFirmwareAge = 0; | ||||
|     } | ||||
|  | ||||
|     // Latest firmware distribution | ||||
|   | ||||
| @@ -51,7 +51,7 @@ const LatestStatisticsModal = ({ show, toggle }) => { | ||||
|         </div> | ||||
|       </CModalHeader> | ||||
|       <CModalBody> | ||||
|         <pre className="ignore">{JSON.stringify(latestStats, null, 2)}</pre> | ||||
|         <pre className="ignore">{JSON.stringify(latestStats, null, 4)}</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(true); | ||||
|   const [isNow, setIsNow] = useState(false); | ||||
|  | ||||
|   const toggleNow = () => { | ||||
|     setIsNow(!isNow); | ||||
| @@ -48,7 +48,6 @@ 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, 2)}</pre> | ||||
|                 <pre>{JSON.stringify(lastMessage, null, '\t')}</pre> | ||||
|               </CCol> | ||||
|             </CRow> | ||||
|             <CRow> | ||||
|   | ||||
| @@ -57,7 +57,6 @@ const TheLayout = () => { | ||||
|           endpoints={endpoints} | ||||
|           user={user} | ||||
|           avatar={avatar} | ||||
|           hideBreadcrumb | ||||
|         /> | ||||
|         <div className="c-body"> | ||||
|           <ToastProvider> | ||||
|   | ||||
| @@ -1,44 +1,22 @@ | ||||
| import React, { useEffect, useState } from 'react'; | ||||
| import React, { useState } from 'react'; | ||||
| import DeviceList from 'components/DeviceListTable'; | ||||
| import DeviceDashboard from 'components/DeviceDashboard'; | ||||
| import { | ||||
|   CCard, | ||||
|   CCardBody, | ||||
|   CNav, | ||||
|   CNavLink, | ||||
|   CTabPane, | ||||
|   CTabContent, | ||||
|   CCardHeader, | ||||
| } from '@coreui/react'; | ||||
| import { CCard, CCardBody, CNav, CNavLink, CTabPane, CTabContent } 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={() => updateNav(0)} | ||||
|             onClick={() => setIndex(0)} | ||||
|           > | ||||
|             {t('common.dashboard')} | ||||
|           </CNavLink> | ||||
| @@ -46,9 +24,9 @@ const DeviceListPage = () => { | ||||
|             className="font-weight-bold" | ||||
|             href="#" | ||||
|             active={index === 1} | ||||
|             onClick={() => updateNav(1)} | ||||
|             onClick={() => setIndex(1)} | ||||
|           > | ||||
|             {t('common.table')} | ||||
|             {t('common.devices')} | ||||
|           </CNavLink> | ||||
|         </CNav> | ||||
|         <CTabContent> | ||||
|   | ||||
| @@ -2,15 +2,7 @@ | ||||
| import React, { useState, useEffect } from 'react'; | ||||
| import { useTranslation } from 'react-i18next'; | ||||
| import axiosInstance from 'utils/axiosInstance'; | ||||
| import { | ||||
|   CCard, | ||||
|   CCardBody, | ||||
|   CNav, | ||||
|   CNavLink, | ||||
|   CTabPane, | ||||
|   CTabContent, | ||||
|   CCardHeader, | ||||
| } from '@coreui/react'; | ||||
| import { CCard, CCardBody, CNav, CNavLink, CTabPane, CTabContent } from '@coreui/react'; | ||||
| import { FirmwareList, useAuth, useToast } from 'ucentral-libs'; | ||||
| import FirmwareDashboard from 'components/FirmwareDashboard'; | ||||
| import EditFirmwareModal from 'components/EditFirmwareModal'; | ||||
| @@ -96,7 +88,7 @@ const FirmwareListPage = () => { | ||||
|  | ||||
|     const allFirmwares = []; | ||||
|     let continueFirmware = true; | ||||
|     let i = 0; | ||||
|     let i = 1; | ||||
|     while (continueFirmware) { | ||||
|       const newFirmwares = await getPartialFirmware(deviceType ?? selectedDeviceType, i); | ||||
|       if (newFirmwares === null || newFirmwares.length === 0) continueFirmware = false; | ||||
| @@ -169,9 +161,6 @@ 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 | ||||
| @@ -188,7 +177,7 @@ const FirmwareListPage = () => { | ||||
|             active={index === 1} | ||||
|             onClick={() => setIndex(1)} | ||||
|           > | ||||
|             {t('common.table')} | ||||
|             {t('common.firmware')} | ||||
|           </CNavLink> | ||||
|         </CNav> | ||||
|         <CTabContent> | ||||
|   | ||||
| @@ -133,7 +133,7 @@ const Login = () => { | ||||
|  | ||||
|   const onKeyDown = (event, action) => { | ||||
|     if (event.code === 'Enter') { | ||||
|       action(event); | ||||
|       action(); | ||||
|     } | ||||
|   }; | ||||
|  | ||||
| @@ -256,146 +256,24 @@ const Login = () => { | ||||
|           } | ||||
|         }) | ||||
|         .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 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) { | ||||
|           if (formType !== 'change-password') { | ||||
|             if ( | ||||
|               error.response.status === 403 && | ||||
|               error.response?.data?.ErrorDescription === 'Password change expected.' | ||||
|             ) { | ||||
|               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'), | ||||
|             setChangeResponse({ | ||||
|               text: | ||||
|                 fields.newpassword.value === fields.password.value | ||||
|                   ? t('login.previously_used') | ||||
|                   : t('login.change_password_error'), | ||||
|               error: true, | ||||
|               tried: true, | ||||
|             }); | ||||
| @@ -404,6 +282,7 @@ const Login = () => { | ||||
|         .finally(() => { | ||||
|           setLoading(false); | ||||
|         }); | ||||
|     } | ||||
|   }; | ||||
|  | ||||
|   const sendForgotPasswordEmail = () => { | ||||
| @@ -547,7 +426,6 @@ const Login = () => { | ||||
|       toggleForgotPassword={toggleForgotPassword} | ||||
|       formType={formType} | ||||
|       onKeyDown={onKeyDown} | ||||
|       submitForm={submitForm} | ||||
|       sendForgotPasswordEmail={sendForgotPasswordEmail} | ||||
|       changePasswordResponse={changePasswordResponse} | ||||
|       cancelPasswordChange={cancelPasswordChange} | ||||
|   | ||||
| @@ -20,23 +20,6 @@ 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); | ||||
| @@ -197,7 +180,6 @@ const UserListPage = () => { | ||||
|  | ||||
|   useEffect(() => { | ||||
|     getUsers(); | ||||
|     getPasswordPolicy(); | ||||
|   }, []); | ||||
|  | ||||
|   useEffect(() => { | ||||
| @@ -211,7 +193,7 @@ const UserListPage = () => { | ||||
|     <div> | ||||
|       <UserListTable | ||||
|         t={t} | ||||
|         users={usersToDisplay.sort((a, b) => a.email > b.email)} | ||||
|         users={usersToDisplay} | ||||
|         loading={loading} | ||||
|         usersPerPage={usersPerPage} | ||||
|         setUsersPerPage={updateUsersPerPage} | ||||
| @@ -224,18 +206,12 @@ const UserListPage = () => { | ||||
|         toggleEdit={toggleEditModal} | ||||
|         refreshUsers={getUsers} | ||||
|       /> | ||||
|       <CreateUserModal | ||||
|         show={showCreateModal} | ||||
|         toggle={toggleCreateModal} | ||||
|         getUsers={getUsers} | ||||
|         policies={policies} | ||||
|       /> | ||||
|       <CreateUserModal show={showCreateModal} toggle={toggleCreateModal} getUsers={getUsers} /> | ||||
|       <EditUserModal | ||||
|         show={showEditModal} | ||||
|         toggle={toggleEditModal} | ||||
|         userId={userToEdit} | ||||
|         getUsers={getUsers} | ||||
|         policies={policies} | ||||
|       /> | ||||
|     </div> | ||||
|   ); | ||||
|   | ||||
| @@ -20,12 +20,10 @@ axiosInstance.interceptors.response.use( | ||||
|       case 401: | ||||
|         break; | ||||
|       case 403: | ||||
|         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