Mise à jour de sécurité

This commit is contained in:
2025-04-03 12:45:32 +02:00
parent f692414698
commit dbe918cfcf
32 changed files with 302 additions and 437 deletions
+39 -7
View File
@@ -13,12 +13,16 @@ import qgis
#include <QSettings>
import socket
import os
from .tools.resources import (
plugin_path,
pyperclip,
resources_path,
maj_verif,
)
pyperclip()
from .postgis_editor import Postgis_Editor
from .postgis_creator import Postgis_Creator
from .postgis_rename import Postgis_Rename
@@ -26,6 +30,8 @@ from .about_form import AboutDialog
from PyQt5.QtCore import *
IPAddr=socket.gethostbyname(socket.gethostname())
class PgPostgis:
def __init__(self):
""" Constructor. """
@@ -72,12 +78,30 @@ class PgPostgis:
self.postgis_creator = QAction(icon, 'dossier_creator',None)
self.toolBar.addAction(self.postgis_creator)
self.postgis_creator.triggered.connect(self.open_creator)
self.postgis_creator.setEnabled(False)
if IPAddr[0:11] == "100.100.100":
self.postgis_creator.setEnabled(True)
elif IPAddr[0:9] == "192.168.0":
self.postgis_creator.setEnabled(True)
elif IPAddr[0:9] == "192.168.1":
self.postgis_creator.setEnabled(True)
if not self.action_editor:
self.action_editor = Postgis_Editor()
self.postgis_editor = QAction(icon2, 'dossier_editor',None)
self.toolBar.addAction(self.postgis_editor)
self.postgis_editor.triggered.connect(self.open_editor)
self.postgis_editor.setEnabled(False)
if IPAddr[0:11] == "100.100.100":
self.postgis_editor.setEnabled(True)
elif IPAddr[0:9] == "192.168.0":
self.postgis_editor.setEnabled(True)
elif IPAddr[0:9] == "192.168.1":
self.postgis_editor.setEnabled(True)
if not self.action_rename:
self.action_rename = Postgis_Rename()
@@ -85,14 +109,22 @@ class PgPostgis:
self.toolBar.addAction(self.postgis_rename)
self.postgis_rename.triggered.connect(self.open_rename)
if os.environ['USERNAME'] == 'tlaveille' or os.environ['USERNAME'] == 'lpoulin' or os.environ['USERNAME'] == 'rclement':
self.action_rename.setEnabled(True)
self.postgis_rename.setEnabled(True)
self.postgis_rename.setVisible(1)
else:
self.action_rename.setEnabled(False)
if os.environ['USERNAME'] == 'tlaveille' or os.environ['USERNAME'] == 'lpoulin' or os.environ['USERNAME'] == 'rclement':
self.action_rename.setEnabled(True)
self.postgis_rename.setEnabled(True)
self.postgis_rename.setVisible(1)
else:
self.action_rename.setEnabled(False)
self.postgis_rename.setEnabled(False)
self.postgis_rename.setVisible(0)
self.postgis_rename.setEnabled(False)
self.postgis_rename.setVisible(0)
if IPAddr[0:11] == "100.100.100":
self.postgis_rename.setEnabled(True)
elif IPAddr[0:9] == "192.168.0":
self.postgis_rename.setEnabled(True)
elif IPAddr[0:9] == "192.168.1":
self.postgis_rename.setEnabled(True)
def open_about_dialog(self):
"""
+2 -2
View File
@@ -12,7 +12,7 @@
name=CenRa_POSTGIS
qgisMinimumVersion=3.0
description=Permet de crée un dossier dans la base PostGis
version=2.6
version=2.7
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
email=si_besoin@cen-rhonealpes.fr
@@ -21,7 +21,7 @@ email=si_besoin@cen-rhonealpes.fr
# Optional items:
# Uncomment the following line and add your changelog entries:
changelog=<h2>CenRa_POSTGIS:</h2></br><p><h3>12/02/2025 - Version 2.6: </h3> - InDev:renomé les schema et table.</p></br><p><h3>04/02/2025 - Version 2.5: </h3> - Correctif bug création de couche.</p></br><p><h3>23/01/2025 - Version 2.4: </h3> - Correctif sur les pkey.</p></br><p><h3>22/01/2025 - Version 2.3: </h3> - Correctif sur la creation de projet.</p></br><p><h3>21/01/2025 - Version 2.2: </h3> - Correctif sur la longeur des nom.</p></br><p><h3>07/01/2025 - Version 2.1: </h3> - ByPass du certif ssl ci erreur.</p></br><p><h3>22/10/2024 - Version 2.0:</h3>- Refont du code.</p>
changelog=<h2>CenRa_POSTGIS:</h2></br><p><h3>03/04/2025 - Version 2.7: </h3> - Mise a jour de securite.</p></br><p><h3>12/02/2025 - Version 2.6: </h3> - InDev:renomé les schema et table.</p></br><p><h3>04/02/2025 - Version 2.5: </h3> - Correctif bug création de couche.</p></br><p><h3>23/01/2025 - Version 2.4: </h3> - Correctif sur les pkey.</p></br><p><h3>22/01/2025 - Version 2.3: </h3> - Correctif sur la creation de projet.</p></br><p><h3>21/01/2025 - Version 2.2: </h3> - Correctif sur la longeur des nom.</p></br><p><h3>07/01/2025 - Version 2.1: </h3> - ByPass du certif ssl ci erreur.</p></br><p><h3>22/10/2024 - Version 2.0:</h3>- Refont du code.</p>
# tags are comma separated with spaces allowed
tags=cenra, postgis, database
+9 -10
View File
@@ -15,7 +15,7 @@ from PyQt5 import QtGui
from qgis.core import *
from qgis.core import QgsDataSourceUri
from .tools.PythonSQL import *
from .tools.PythonSQL import login_base
from .tools.SQLRequet import *
from .tools.resources import (
@@ -76,15 +76,14 @@ class Postgis_Creator(QDialog, EDITOR_CLASS):
if self.nom.text().find(car) != -1 :
QMessageBox.warning(None, "Oups :", u"Le nom de dossier ne doit pas comporter de caractères spéciaux, ni d'espaces !\n\n\t" + self.nom.text().lower() )
return
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
res_ident = first_cur.fetchone()
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
user = res_ident[1]
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
first_conn.close()
account = login_base("account")
user = account[0]
mdp = account[1]
host = account[2]
port = account[3]
dbname = account[4]
cur = account[7]
con = account[8]
SQL_schema = "CREATE SCHEMA " + schema + ";"
SQL_GRANT_SCHEMA="GRANT CREATE, USAGE ON SCHEMA "+schema+" TO grp_qgis; GRANT CREATE, USAGE ON SCHEMA "+schema+" TO grp_sig;"
+17 -20
View File
@@ -15,7 +15,7 @@ from PyQt5 import QtGui
from qgis.core import *
from qgis.core import QgsDataSourceUri
from .tools.PythonSQL import *
from .tools.PythonSQL import login_base
from .tools.SQLRequet import *
from .tools.resources import (
@@ -52,16 +52,14 @@ class Postgis_Editor(QDialog, EDITOR_CLASS):
### Outil Ajout de nouvelles couche a un dossier
def raise_(self):
self.activateWindow()
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
res_ident = first_cur.fetchone()
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
user = res_ident[1]
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
first_conn.close()
account = login_base("account")
user = account[0]
mdp = account[1]
host = account[2]
port = account[3]
dbname = account[4]
cur = account[7]
con = account[8]
# Creation de la liste des schemas de la base de donnees
SQL = """WITH list_schema AS (
select schemaname,'sig' as group from pg_catalog.pg_tables
@@ -92,15 +90,14 @@ class Postgis_Editor(QDialog, EDITOR_CLASS):
# See if OK was pressed
if result == 1:
#******************************debut script*********************************
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
res_ident = first_cur.fetchone()
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
user = res_ident[1]
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
first_conn.close()
account = login_base("account")
user = account[0]
mdp = account[1]
host = account[2]
port = account[3]
dbname = account[4]
cur = account[7]
con = account[8]
if self.schema.currentIndex() == -1 :
QMessageBox.warning(None, "Oups :", "Veuillez choisir un nom de dossier.")
+9 -10
View File
@@ -15,7 +15,7 @@ from PyQt5 import QtGui
from qgis.core import *
from qgis.core import QgsDataSourceUri
from .tools.PythonSQL import *
from .tools.PythonSQL import login_base
from .tools.SQLRequet import *
from .tools.resources import (
@@ -39,15 +39,14 @@ from qgis.utils import iface
EDITOR_CLASS = load_ui('CenRa_PostgisRename_base.ui')
ch = [u"à", u"À", u"â", u"Â", u"ä", u"Ä", u"å", u"Å", u"ç", u"Ç", u"é", u"É", u"è", u"È", u"ê", u"Ê", u"ë", u"Ë", u"î", u"Î", u"ï", u"Ï", u"ô", u"Ô", u"ö", u"Ö", u"ù", u"Ù", u"û", u"Û", u"ü", u"Ü", u"ÿ", u"Ÿ", u"'", u"-", u" "]
try:
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
res_ident = first_cur.fetchone()
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
user = res_ident[1]
first_conn.close()
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
account = login_base("account")
user = account[0]
mdp = account[1]
host = account[2]
port = account[3]
dbname = account[4]
cur = account[7]
con = account[8]
except:
print('')
class Postgis_Rename(QDialog, EDITOR_CLASS):
-33
View File
@@ -1,33 +0,0 @@
import sys
import socket
import os
IPAddr=socket.gethostbyname(socket.gethostname())
if IPAddr[0:11] == "100.100.100": #4269
host = "100.100.100.11"
port = "5432"
dbname = "sig4269"
sigdb="sig4269"
refdb="ref_geo4269"
password = "McVities"
if IPAddr[0:9] == "192.168.0": #01
host = "192.168.0.201"
port = "5432"
dbname = "sig01"
sigdb="sig01"
refdb="ref_geo01"
password = "McVities"
if IPAddr[0:9] == "192.168.1": #0726
host = "192.168.1.201"
port = "5432"
dbname = "sig0726"
sigdb="sig0726"
refdb="ref_geo0726"
password = "McVities"
if sys.platform == 'linux':
os_user = os.environ['USER']
else:
os_user = os.environ['USERNAME']
if os_user == 'STAGE':
os_user='stage'
if os_user == 'Administrateur':
os_user='stage'
+16 -21
View File
@@ -6,10 +6,10 @@ import tempfile
import base64
import psycopg2
import psycopg2.extras
import socket
from os.path import abspath, join, pardir, dirname
from qgis.core import QgsDataSourceUri
from .PythonSQL import *
from .SQLRequet import *
from qgis.PyQt import uic
__copyright__ = "Copyright 2019, 3Liz"
@@ -108,26 +108,21 @@ def load_ui(*args):
ui_class, _ = uic.loadUiType(resources_path("ui", *args))
return ui_class
'''
def login_base(take=None):
from .PythonSQL import host,port,dbname,password,os_user
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
res_ident = first_cur.fetchone()
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
user = res_ident[1]
con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
def pyperclip():
IPAddr=socket.gethostbyname(socket.gethostname())
dst = abspath(abspath(join(plugin_path(), "CenRa_POSTGIS\\tools\\")))
if IPAddr[0:11] == "100.100.100": #4269
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\PythonSQL.py'
if IPAddr[0:9] == "192.168.0": #01
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\PythonSQL.py'
if IPAddr[0:9] == "192.168.1": #0726
src = '\\\\100.100.100.100\\nuage\\SI_Systeme d information\\Z_QGIS\\PLUGIN\\PythonSQL.py'
try:
shutil.copy(src, dst)
except:
print('404')
cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
first_conn.close()
if take:
return cur,con
else:
return cur
'''
def send_issues(url,titre,body,labels):
import requests
import json
@@ -234,7 +229,7 @@ def create_contour(self,schema,cur,con,host ,port ,dbname ,user ,mdp):
uri.setDataSource(schema, tablename, geom)
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
def create_travaux(self,schema,cur,con,host ,port ,dbname ,user ,mdp):
def create_travaux(self,schema,cur,con,host,port,dbname,user,mdp):
### Creation de la table travaux prevus
if self.couche_travaux_prevus.isChecked():
#**********Poly