168 lines
5.8 KiB
Python
168 lines
5.8 KiB
Python
from PyQt5.QtWidgets import QDialog, QGridLayout, QLineEdit, QPushButton, QLabel, QVBoxLayout, QRadioButton
|
|
import requests, json
|
|
from PIL import Image
|
|
from io import BytesIO
|
|
import settings
|
|
import pathlib, os
|
|
|
|
|
|
global app_settings
|
|
app_settings = settings.app_settings
|
|
|
|
class LoginDialog(QDialog):
|
|
def __init__(self, parent):
|
|
super().__init__(parent)
|
|
self.setWindowTitle('Login')
|
|
self.grid_layout = QGridLayout()
|
|
|
|
self.server_address = QLineEdit()
|
|
self.server_address.setText(settings.app_settings.connected_server)
|
|
self.server_address_label = QLabel()
|
|
self.server_address_label.setText("Server")
|
|
|
|
self.username = QLineEdit()
|
|
self.username.setText(app_settings.username)
|
|
self.username_label = QLabel()
|
|
self.username_label.setText("Username")
|
|
|
|
self.password = QLineEdit()
|
|
self.password.setText(app_settings.password)
|
|
self.password_label = QLabel()
|
|
self.password_label.setText("Password")
|
|
|
|
self.connect_button = QPushButton()
|
|
self.connect_button.setText("Connect")
|
|
self.connect_button.clicked.connect(self.__login)
|
|
|
|
self.grid_layout.addWidget(self.server_address_label, 0, 0)
|
|
self.grid_layout.addWidget(self.server_address, 0, 1)
|
|
|
|
self.grid_layout.addWidget(self.username_label, 1, 0)
|
|
self.grid_layout.addWidget(self.username, 1,1)
|
|
|
|
self.grid_layout.addWidget(self.password_label, 2, 0)
|
|
self.grid_layout.addWidget(self.password, 2, 1)
|
|
|
|
self.grid_layout.addWidget(self.connect_button, 3, 1)
|
|
|
|
|
|
self.setLayout(self.grid_layout)
|
|
|
|
|
|
self.setFixedSize(300, 200)
|
|
self.user_data = {}
|
|
self.show()
|
|
|
|
def __login(self):
|
|
settings.app_settings.username = self.username.text()
|
|
settings.app_settings.password = self.password.text()
|
|
settings.app_settings.connected_server = self.server_address.text()
|
|
user_data = login(settings.app_settings.username, settings.app_settings.password)
|
|
if user_data != False:
|
|
self.user_data = user_data
|
|
|
|
with open('log.txt', 'w+') as file:
|
|
file.write(json.dumps(user_data))
|
|
self.accept()
|
|
|
|
def ping(url):
|
|
request = requests.get(url)
|
|
if request.status_code == 200:
|
|
return True
|
|
return False
|
|
|
|
|
|
def upload_file(filename, file_path, external_data: dict):
|
|
external_data['username'] = settings.app_settings.username
|
|
external_data['password'] = settings.app_settings.password
|
|
external_data['filename'] = filename
|
|
files = [
|
|
('file', ('file', open(file_path, 'rb'), 'application/octet')),
|
|
('datas', ('datas', json.dumps(external_data), 'application/json')),
|
|
]
|
|
r = requests.post(f"{settings.app_settings.connected_server}/upload_app", files=files)
|
|
|
|
def login(username, password):
|
|
headers = {'Content-Type': 'application/json'}
|
|
data = {
|
|
"username": username,
|
|
"password": password
|
|
}
|
|
|
|
response = requests.post(f"{settings.app_settings.connected_server}/login_app", headers=headers, json=data)
|
|
user_data = {}
|
|
if response.status_code == 200:
|
|
user_data = response.json()
|
|
settings.app_settings.username = username
|
|
settings.app_settings.password = password
|
|
|
|
response = requests.post(f"{settings.app_settings.connected_server}/login_app/avatar", json=data)
|
|
if response.status_code == 200:
|
|
im = Image.open(BytesIO(response.content))
|
|
path = settings.app_settings.external_path / "avatars" / f"{data['username']}_avatar.png"
|
|
print(path)
|
|
im.save(path)
|
|
user_data['avatar'] = str(path.absolute())
|
|
return user_data
|
|
user_data['avatar'] = f"icons/avatars/default_avatar.png"
|
|
return user_data
|
|
return False
|
|
|
|
|
|
class UpdateOptInDialog(QDialog):
|
|
def __init__(self, parent, default_pipeline):
|
|
super().__init__(parent)
|
|
self.default_pipeline = default_pipeline
|
|
self.setWindowTitle(f"Connectivity Opt In")
|
|
self.setMaximumWidth(300)
|
|
self.resize(300, 100)
|
|
|
|
self.vertical_layout = QVBoxLayout()
|
|
|
|
|
|
text = """This seems to be your first time loading this app and we have a important question to ask. That is; do you wish to opt into receiving update requests from our pipelines? If you choose not to then you will not be able to connect to any servers. This is in order to ensure that you stay upto date for those servers."""
|
|
self.message_label = QLabel()
|
|
self.message_label.setText(text)
|
|
self.message_label.setWordWrap(True)
|
|
self.message_label.setFixedSize(400, 100)
|
|
|
|
|
|
self.opt_in = QRadioButton()
|
|
self.opt_in.setText("I Want to Opt In to Updates")
|
|
self.opt_in.toggled.connect(self.radio_changed)
|
|
|
|
self.pipeline_edit = QLineEdit()
|
|
self.pipeline_edit.setEnabled(False)
|
|
|
|
self.confirm_button = QPushButton()
|
|
self.confirm_button.setText("Confirm")
|
|
self.confirm_button.setMaximumWidth(60)
|
|
self.confirm_button.setMaximumHeight(30)
|
|
self.confirm_button.clicked.connect(self.confirm_selection)
|
|
|
|
|
|
self.vertical_layout.addWidget(self.message_label)
|
|
self.vertical_layout.addWidget(self.opt_in)
|
|
self.vertical_layout.addWidget(self.pipeline_edit)
|
|
self.vertical_layout.addWidget(self.confirm_button)
|
|
|
|
self.setLayout(self.vertical_layout)
|
|
|
|
self.show()
|
|
|
|
def radio_changed(self, state):
|
|
if state:
|
|
self.pipeline_edit.setEnabled(True)
|
|
self.pipeline_edit.setText(self.default_pipeline)
|
|
if not state:
|
|
self.pipeline_edit.setEnabled(False)
|
|
self.pipeline_edit.setText("")
|
|
|
|
def get_opt_in_state(self):
|
|
return self.opt_in.isChecked()
|
|
|
|
def get_pipeline(self):
|
|
return self.pipeline_edit.text()
|
|
|
|
def confirm_selection(self):
|
|
self.accept() |