173 lines
6.0 KiB
Python
173 lines
6.0 KiB
Python
|
|
# Standard
|
|
import json
|
|
|
|
# PyQt
|
|
from qgis.core import QgsAuthMethodConfig, QgsDataSourceUri
|
|
from qgis.PyQt.QtCore import QByteArray, QJsonDocument, QObject, QUrl, pyqtSignal
|
|
from qgis.PyQt.QtNetwork import QNetworkReply, QNetworkRequest
|
|
from qgis.PyQt.QtWidgets import QAction, QMessageBox, QDialog
|
|
|
|
from PyQt5.QtCore import Qt
|
|
from PyQt5.QtWidgets import QApplication
|
|
# from PyQt6.QtCore import Qt
|
|
# from PyQt6.QtWidgets import QApplication
|
|
|
|
# Project
|
|
from gn_tools.__about__ import __login_url__
|
|
|
|
|
|
class GetLogin(QDialog):
|
|
finished_login = pyqtSignal()
|
|
"""
|
|
Create a filter, specific to GeoNature ZH API and fetch all the features corresponding.
|
|
"""
|
|
|
|
def __init__(
|
|
self,
|
|
parent=None,
|
|
network_manager=None,
|
|
params=None
|
|
):
|
|
super().__init__()
|
|
print("enfin !")
|
|
self.domain_url = parent.domain_url
|
|
self.network_manager = network_manager
|
|
self.auth = parent.dlg.mAuthConfigSelect
|
|
self.is_connect = parent.dlg.is_connect
|
|
self.params = params
|
|
print(self.auth.configId())
|
|
# self.zhs = None
|
|
# self.json_filter = {}
|
|
# self.total_zh = 0
|
|
|
|
# PyQt5 - Version
|
|
QApplication.setOverrideCursor(Qt.WaitCursor)
|
|
# PyQt6 - Version
|
|
# QApplication.setOverrideCursor(Qt.CursorShape.WaitCursor)
|
|
self._pending_downloads = 0
|
|
self.check_password()
|
|
|
|
@property
|
|
def pending_downloads(self):
|
|
return self._pending_downloads
|
|
|
|
def handle_finished(self, reply):
|
|
self._pending_downloads -= 1
|
|
QApplication.restoreOverrideCursor()
|
|
# If reply is an error or reply is a redirection, login is not accepted
|
|
print(reply.attribute(
|
|
QNetworkRequest.HttpStatusCodeAttribute
|
|
))
|
|
print('Login : ',reply.error())
|
|
self.network_manager.cookieStatus = reply.attribute(
|
|
QNetworkRequest.HttpStatusCodeAttribute
|
|
)
|
|
if (
|
|
reply.error() != QNetworkReply.NoError
|
|
or self.network_manager.cookieStatus != 200
|
|
):
|
|
# Error code 299 means the logins are invalid
|
|
# Redirection not equal to 200 means a redirection happened
|
|
if reply.error() == 0:
|
|
self.is_connect.setText("Aie !")
|
|
msg = QMessageBox()
|
|
msg.warning(
|
|
None,
|
|
self.tr("Warning"),
|
|
self.tr(
|
|
"Houston, we've got a problem ... \n\n L'utilisateur ou le mot de passe est invalide !"
|
|
), # noqa: E501
|
|
)
|
|
elif reply.error() == 3:
|
|
msg = QMessageBox()
|
|
msg.warning(
|
|
None,
|
|
self.tr("Warning"),
|
|
self.tr(
|
|
"GéoNature's URL not found, add it to the plugin settings"
|
|
), # noqa: E501
|
|
)
|
|
self.close()
|
|
self.parent.iface.showOptionsDialog(
|
|
currentPage="mOptionsPage{}".format(__title__)
|
|
)
|
|
self.parent.create_project_from_gn()
|
|
else:
|
|
print(f"code: {reply.error()} message: {reply.errorString()}")
|
|
else:
|
|
self.cookies = self.network_manager.cookieJar()
|
|
self.is_connect.setText("Good Job !")
|
|
|
|
# If the authenfication configuration already exists,
|
|
# modify it with the new values
|
|
# self.manager_config.setConfigMap(
|
|
# {
|
|
# "password": self.usr,
|
|
# "username": self.pwd,
|
|
# }
|
|
# )
|
|
# self.manager.storeAuthenticationConfig(
|
|
# self.manager_config, True
|
|
# )
|
|
# delete sensitive informations... even if it's in the database now...
|
|
self.network_manager.accepted = True
|
|
# Add the cookie created with the login to the request
|
|
self.network_manager.setCookieJar(self.cookies)
|
|
# self.network_manager.setCookiesFromUrl(self.cookies,self.domain_url)
|
|
self.close()
|
|
|
|
if self.pending_downloads == 0:
|
|
self.finished_login.emit()
|
|
|
|
return self.network_manager
|
|
|
|
|
|
def get_param_connect(self):
|
|
if self.params:
|
|
self.usr = self.params["usr"]
|
|
self.pwd = self.params["pwd"]
|
|
return True
|
|
elif self.auth.configId():
|
|
authCfg = self.auth.configId()
|
|
quri = QgsDataSourceUri()
|
|
quri.setParam("authcfg", authCfg)
|
|
quri.setParam("url", self.domain_url)
|
|
self.usr = quri.uri().split("user='")[1].split("' ",1)[0]
|
|
self.pwd = quri.uri().split("password='")[1].split("' ",1)[0]
|
|
return True
|
|
else :
|
|
return False
|
|
|
|
|
|
def check_password(self):
|
|
# Test if the user wrote something
|
|
if self.auth.configId() or self.params:
|
|
is_connect = self.get_param_connect()
|
|
url = QUrl(self.domain_url + __login_url__)
|
|
print(self.usr)
|
|
data_json = {
|
|
"login": (
|
|
self.usr
|
|
),
|
|
"password": (
|
|
self.pwd
|
|
),
|
|
}
|
|
print(url)
|
|
request = QNetworkRequest(url)
|
|
request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json")
|
|
document = QJsonDocument(data_json)
|
|
print(document.toJson())
|
|
reply = self.network_manager.post(request, document.toJson())
|
|
reply.finished.connect(lambda: self.handle_finished(reply))
|
|
self._pending_downloads += 1
|
|
else:
|
|
msg = QMessageBox()
|
|
msg.warning(
|
|
None,
|
|
self.tr("Warning"),
|
|
self.tr(
|
|
"GéoNature's Auth not found, add it to the plugin settings"
|
|
), # noqa: E501
|
|
) |