saved preview picture
This commit is contained in:
134
screens/settings_screen.py
Normal file
134
screens/settings_screen.py
Normal file
@@ -0,0 +1,134 @@
|
||||
import kivy
|
||||
from kivy.app import App
|
||||
from kivy.uix.screenmanager import ScreenManager, Screen
|
||||
import os
|
||||
import json
|
||||
from kivy.clock import Clock
|
||||
from kivy.properties import StringProperty, ListProperty
|
||||
from utils import (
|
||||
generate_key, load_key, encrypt_data, decrypt_data,
|
||||
check_server_settings, save_server_settings,
|
||||
test_connection, get_devices_from_server, save_route_to_file, fetch_positions_for_selected_day
|
||||
)
|
||||
from datetime import date
|
||||
from kivy.uix.popup import Popup
|
||||
from kivy.uix.gridlayout import GridLayout
|
||||
from kivy.uix.button import Button
|
||||
from kivy.uix.label import Label
|
||||
from kivy.uix.boxlayout import BoxLayout
|
||||
from threading import Thread
|
||||
from kivy.clock import mainthread
|
||||
from kivy.uix.image import Image
|
||||
from kivy.uix.behaviors import ButtonBehavior
|
||||
from kivy.uix.progressbar import ProgressBar
|
||||
import webbrowser
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.chrome.options import Options
|
||||
from PIL import Image
|
||||
import time
|
||||
from config import RESOURCES_FOLDER, CREDENTIALS_FILE
|
||||
|
||||
class SettingsScreen(Screen):
|
||||
server_response = "Waiting to test connection..."
|
||||
|
||||
def on_pre_enter(self):
|
||||
settings = check_server_settings()
|
||||
if settings:
|
||||
self.ids.server_url_input.text = settings.get("server_url", "")
|
||||
self.ids.username_input.text = settings.get("username", "")
|
||||
self.ids.password_input.text = settings.get("password", "")
|
||||
self.ids.token_input.text = settings.get("token", "")
|
||||
else:
|
||||
self.ids.server_url_input.text = ""
|
||||
self.ids.username_input.text = ""
|
||||
self.ids.password_input.text = ""
|
||||
self.ids.token_input.text = ""
|
||||
|
||||
def test_connection(self):
|
||||
server_url = self.ids.server_url_input.text.strip()
|
||||
username = self.ids.username_input.text.strip()
|
||||
password = self.ids.password_input.text.strip()
|
||||
token = self.ids.token_input.text.strip()
|
||||
result = test_connection(server_url, username, password, token)
|
||||
self.server_response = result["message"]
|
||||
self.ids.result_label.text = self.server_response
|
||||
|
||||
def save_settings(self):
|
||||
server_url = self.ids.server_url_input.text.strip()
|
||||
username = self.ids.username_input.text.strip()
|
||||
password = self.ids.password_input.text.strip()
|
||||
token = self.ids.token_input.text.strip()
|
||||
if not server_url or not username or not password or not token:
|
||||
self.ids.result_label.text = "Please fill in all fields."
|
||||
return
|
||||
settings_data = {
|
||||
"server_url": server_url,
|
||||
"username": username,
|
||||
"password": password,
|
||||
"token": token,
|
||||
}
|
||||
try:
|
||||
save_server_settings(settings_data)
|
||||
self.ids.result_label.text = "Settings saved successfully!"
|
||||
self.manager.current = "home"
|
||||
except Exception as e:
|
||||
self.ids.result_label.text = f"Failed to save settings: {str(e)}"
|
||||
# get trip from server screen
|
||||
|
||||
|
||||
|
||||
# trhis screen is used to create a new user
|
||||
# register screen
|
||||
class RegisterScreen(Screen):
|
||||
def create_user(self):
|
||||
"""Handle user creation."""
|
||||
username = self.ids.set_username_input.text.strip()
|
||||
password = self.ids.set_password_input.text.strip()
|
||||
confirm_password = self.ids.confirm_password_input.text.strip()
|
||||
email = self.ids.set_email_input.text.strip()
|
||||
|
||||
if not username or not password or not confirm_password or not email:
|
||||
self.ids.result_label.text = "Please fill in all fields."
|
||||
return
|
||||
|
||||
if password != confirm_password:
|
||||
self.ids.result_label.text = "Passwords do not match."
|
||||
return
|
||||
|
||||
# Check if the username or email already exists
|
||||
if self.user_exists(username, email):
|
||||
self.ids.result_label.text = "User or email already exists."
|
||||
return
|
||||
|
||||
# Save user data (encrypted)
|
||||
user_data = {
|
||||
"username": username,
|
||||
"password": password,
|
||||
"email": email,
|
||||
}
|
||||
encrypted_data = encrypt_data(json.dumps(user_data))
|
||||
|
||||
try:
|
||||
with open(CREDENTIALS_FILE, "ab") as file: # Append encrypted data
|
||||
file.write(encrypted_data + b"\n") # Add a newline for separation
|
||||
except Exception as e:
|
||||
self.ids.result_label.text = f"Failed to save user: {str(e)}"
|
||||
return
|
||||
|
||||
self.ids.result_label.text = "User created successfully!"
|
||||
# Navigate back to the login screen
|
||||
self.manager.current = "login"
|
||||
def user_exists(self, username, email):
|
||||
"""Check if a username or email already exists in the credentials.enc file."""
|
||||
try:
|
||||
with open(CREDENTIALS_FILE, "rb") as file:
|
||||
for line in file:
|
||||
decrypted_data = decrypt_data(line.strip())
|
||||
user = json.loads(decrypted_data)
|
||||
if user["username"] == username or user["email"] == email:
|
||||
return True
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
except Exception as e:
|
||||
self.ids.result_label.text = f"Error checking user: {str(e)}"
|
||||
return False
|
||||
Reference in New Issue
Block a user