From 63b4dd7c9c837e68e2d38fa799c425fd8a2f28e1 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Tue, 9 Jul 2019 16:10:10 +0200 Subject: [PATCH] Delete CNI_Update.py --- src/analyzer/CNI_Update.py | 506 ------------------------------------- 1 file changed, 506 deletions(-) delete mode 100644 src/analyzer/CNI_Update.py diff --git a/src/analyzer/CNI_Update.py b/src/analyzer/CNI_Update.py deleted file mode 100644 index 834dd39..0000000 --- a/src/analyzer/CNI_Update.py +++ /dev/null @@ -1,506 +0,0 @@ -""" -******************************************************************************** -* CNIRevelator * -* * -* Desc: Application launcher & updater * -* * -* Copyright © 2018-2019 Adrien Bourmault (neox95) * -* * -* This file is part of CNIRevelator. * -* * -* CNIRevelator is free software: you can redistribute it and/or modify * -* it under the terms of the GNU General Public License as published by * -* the Free Software Foundation, either version 3 of the License, or * -* any later version. * -* * -* CNIRevelator is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY*without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* You should have received a copy of the GNU General Public License * -* along with CNIRevelator. If not, see . * -******************************************************************************** -""" - -from CNI_GLOBALVAR import * -from CNI_classes import * -import hashlib -from pypac import PACSession -from requests.auth import HTTPProxyAuth -import subprocess - -def SoftUpdate(logger): - global ret - global upwin - import zipfile - for f in os.listdir(CST_FOLDER): - if f[-4:] == '.tif': - try: - os.remove(CST_FOLDER + '\\' + f) - except PermissionError as e: - logger.info('SoftUpdate() : Failing to purge : ' + str(e)) - - logger.info('SoftUpdate() : Looking for older version in dir...') - list = os.listdir('.') - for file in list: - if file.startswith('CNIRevelator_'): - temp = ['0', '0', '0'] - ver = file[13:].split('.') - for i in range(len(ver)): - if ver[i] != 'exe': - try: - temp[i] = ver[i] - except: - pass - - ver = temp.copy() - try: - sum_ver = int(ver[0]) * 100 + int(ver[1]) * 10 + int(ver[2]) - if sum_ver < CST_SUM_VER: - if file[-3:] == 'exe': - os.remove(file) - logger.info('SoftUpdate() : Removed old version : ' + str(file)) - CST_CHANGELOG.isOn = True - except Exception as e: - logger.error('SoftUpdate() : Failing to remove old version ' + str(file) + ' : ' + str(e)) - - def updating(): - - def updator(): - global ret - logger.info('[updator() thread] : Welcome !') - ret = 11 - canvas.itemconfigure(message, text='Recherche de mises-à-jour...') - p.configure(mode='indeterminate', value=0, maximum=20) - p.start() - upwin.update() - logger.info('[updator() thread] : Looking for updates...') - try: - - def download(url, filename): - global key - global login - try: - logger.info('[download() thread] : Trying getting credentials in the config file') - with open(CST_FOLDER + 'conf.ig', 'rb') as (config): - AESObj = AESCipher(CST_CRYPTOKEY) - try: - tempone = AESObj.decrypt(config.read()) - if tempone != '||': - if tempone.find('||') != -1: - IPN, IPN_PASS = tempone.split('||')[0:2] - else: - raise ValueError('Cryptokey is bad !') - else: - IPN = '' - IPN_PASS = '' - except Exception as e: - raise IOError(str(e)) - else: - logger.info('[download() thread] : Got credentials !') - session = PACSession(proxy_auth=(HTTPProxyAuth(IPN, IPN_PASS))) - logger.info('[download() thread] : Authenticated to proxy successfully') - except IOError as e: - logger.error('[download() thread] : False or absent credentials in the config file : ' + str(e)) - NoConnect = True - while NoConnect: - - class LoginDialog(Toplevel): - - def __init__(self, parent): - super().__init__(parent) - self.title('Connexion') - Label(self, text='IPN : ').pack() - self.entry_login = Entry(self) - self.entry_login.insert(0, '') - self.entry_login.pack() - Label(self, text='Mot de passe : ').pack() - self.entry_pass = Entry(self, show='*') - self.entry_pass.insert(0, '') - self.entry_pass.pack() - Button(self, text='Connexion', command=(self.connecti)).pack() - self.resizable(width=False, height=False) - w = 150 - h = 110 - self.update() - ws = self.winfo_screenwidth() - hs = self.winfo_screenheight() - if getattr(sys, 'frozen', False): - self.iconbitmap(sys._MEIPASS + '\\id-card.ico\\id-card.ico') - else: - self.iconbitmap('id-card.ico') - upwin.update() - x = ws / 2 - w / 2 - y = hs / 2 - h / 2 - self.geometry('%dx%d+%d+%d' % (w, h, x, y)) - - def connecti(self): - global key - global login - login = self.entry_login.get().strip() - key = self.entry_pass.get().strip() - self.destroy() - - session = PACSession() - if session.get_pac() == None: - IPN = '' - IPN_PASS = '' - NoConnect = False - break - canvas.itemconfigure(message, text='En attente de connexion au serveur proxy...') - login = '' - key = '' - result = LoginDialog(upwin) - result.transient(upwin) - result.grab_set() - upwin.wait_window(result) - IPN = login - IPN_PASS = key - session = PACSession(proxy_auth=(HTTPProxyAuth(IPN, IPN_PASS))) - Ans = session.get('http://www.google.com') - if str(Ans) == '': - canvas.itemconfigure(message, text='Identifiants erronés, accès refusé') - logger.info('[download() thread] : 407 Error') - time.sleep(1) - else: - if str(Ans) == '': - logger.info('[download() thread] : Connection ok !') - NoConnect = False - else: - raise IOError() - - AESObj = AESCipher(CST_CRYPTOKEY) - with open(CST_FOLDER + 'conf.ig', 'wb+') as (f): - logger.info('[download() thread] : Saving credentials in encrypted config file') - f.write(AESObj.encrypt(IPN + '||' + IPN_PASS)) - - if IPN == 'i005316': - canvas.itemconfigure(message, text='Bienvenue Thierry !') - else: - if IPN == 'i020251': - canvas.itemconfigure(message, text='Bienvenue Samia !') - else: - if IPN == 'i018410': - canvas.itemconfigure(message, text='Bienvenue Adrien !') - else: - if IPN == 'i003067': - canvas.itemconfigure(message, text='Bienvenue Remy !') - else: - if IPN == 'i018422': - canvas.itemconfigure(message, text='Bienvenue Eloise !') - time.sleep(1) - try: - Prox_us = session.get_pac().find_proxy_for_url(CST_LINK, 'neoxgroup.eu') - PROXY_USABLE = Prox_us[6:-1].split(';')[0] - proxy_server_url = IPN + ':' + IPN_PASS + '@' + PROXY_USABLE - ph = urllib2.ProxyHandler({'http': proxy_server_url}) - auth = urllib2.ProxyBasicAuthHandler() - server = urllib2.build_opener(ph, auth, urllib2.HTTPHandler) - urllib2.install_opener(server) - logger.info('[download() thread] : Proxy connection initiated successfully') - except: - logger.info('[download() thread] : Proxy connection not initiated') - - try: - urllib2.urlretrieve(url, filename) - return True - except Exception as e: - logger.error('[download() thread] : HTTP ERROR ') - return e - - logger.info('[updator() thread] : Prepare downloading the version recap file...') - tempfile = CST_FOLDER + 'temp' + str(random.randint(11111, 99999)) + '.cniu' - isOk = download(CST_LINK + 'cnir.ver', tempfile) - if not isOk: - raise isOk - urllib2.urlcleanup() - logger.info('[updator() thread] : Opening version recap file...') - file_ver = open(tempfile, 'r') - logger.info('[updator() thread] : Reading version recap file...') - version = file_ver.read() - logger.info('[updator() thread] : Closing version recap file...') - repert = version.split('|') - file_ver.close() - logger.info('[updator() thread] : Deleting version recap file...') - os.remove(tempfile) - logger.info('[updator() thread] : Parsing informations about version...') - final_f = 'CNI_file' - final_ver = ['0', '0', '0'] - final_hash = '' - for sentence in repert: - try: - file, hashref = sentence.split(':') - except ValueError: - pass - else: - if str.startswith(file, CST_NAME): - ver = file.replace(CST_NAME + '_', '').split('.') - temp = [ - '0', '0', '0'] - for i in range(len(ver)): - temp[i] = ver[i] - - ver = temp.copy() - sum_fver = int(final_ver[0]) * 100 + int(final_ver[1]) * 10 + int(final_ver[2]) - sum_ver = int(ver[0]) * 100 + int(ver[1]) * 10 + int(ver[2]) - if sum_ver > sum_fver: - final_ver = ver.copy() - final_f = file - final_hash = hashref - - sum_ver = int(final_ver[0]) * 100 + int(final_ver[1]) * 10 + int(final_ver[2]) - if final_f != 'CNI_file': - if sum_ver > CST_SUM_VER: - logger.info('[updator() thread] : New version of CNIRevelator found !') - canvas.itemconfigure(message, text='Mise à jour disponible ! Préparation du téléchargement...') - logger.info('[updator() thread] : Preparing download') - with open(CST_FOLDER + 'conf.ig', 'rb') as (config): - logger.info('[updator() thread] : Reading credentials for proxy in config file...') - AESObj = AESCipher(CST_CRYPTOKEY) - IPN, IPN_PASS = AESObj.decrypt(config.read()).split('||')[0:2] - session = PACSession(proxy_auth=(HTTPProxyAuth(IPN, IPN_PASS))) - try: - Prox_us = session.get_pac().find_proxy_for_url(CST_LINK, 'neoxgroup.eu') - PROXY_USABLE = Prox_us[6:-1].split(';')[0] - proxy_server_url = IPN + ':' + IPN_PASS + '@' + PROXY_USABLE - ph = urllib2.ProxyHandler({'http': proxy_server_url}) - auth = urllib2.ProxyBasicAuthHandler() - server = urllib2.build_opener(ph, auth, urllib2.HTTPHandler) - logger.info('[updator() thread] : Connection to the proxy initiated successfully !') - except: - canvas.itemconfigure(message, text='Téléchargement en connexion directe...') - server = urllib2.build_opener() - logger.info('[updator() thread] : Direct connection initiated successfully') - - logger.info('[updator() thread] : Launching download of ' + final_f) - Statut = Download(CST_LINK + final_f, final_f, final_f, server, p, canvas, message, logger) - BLOCKSIZE = 65536 - hasher = hashlib.sha1() - try: - with open(final_f, 'rb') as (afile): - buf = afile.read(BLOCKSIZE) - while len(buf) > 0: - hasher.update(buf) - buf = afile.read(BLOCKSIZE) - - hashcod = hasher.hexdigest() - if hashcod != final_hash: - Statut.success = False - logger.error('[updator() thread] : Hashcode Error :' + final_f) - try: - os.remove(final_f) - except IOError: - pass - - else: - logger.info('[updator() thread] : Hashcode pass :' + final_f) - except FileNotFoundError as e: - logger.error('[updator() thread] : File not found ' + final_f) - - if Statut.success: - try: - os.rename(final_f, final_f + '.exe') - except IOError: - logger.error('[updator() thread] : Unable to rename the file ! Wait 3 sec and retry') - time.sleep(3) - try: - os.rename(final_f, final_f + '.exe') - except IOError: - logger.critical('[updator() thread] : Unable to rename the file !') - - else: - canvas.itemconfigure(message, text='Téléchargement terminé ! Préparation du lancement...') - logger.info('[updator() thread] : Download of ' + final_f + 'finished successfully') - p.configure(mode='indeterminate', value=0, maximum=20) - p.start() - time.sleep(1) - logger.info('[updator() thread] : Launching ' + final_f) - try: - proc = subprocess.Popen((final_f + '.exe'), shell=False, stdin=None, stdout=None, stderr=None, close_fds=True) - except: - logger.error('[updator() thread] : Unable to start the new version ! Wait 3 sec and retry') - time.sleep(3) - try: - proc = subprocess.Popen((final_f + '.exe'), shell=False, stdin=None, stdout=None, stderr=None, close_fds=True) - except Exception as e: - logger.critical('[updator() thread] : Unable to start the new version ! Stopping : ' + str(e)) - showerror("Erreur d'appel de procédure distante", 'Le lancement du nouveau programme a échoué, vous devez le lancer manuellement une fois cette fenêtre fermée', parent=upwin) - - ret = 12 - else: - canvas.itemconfigure(message, text='Echec de la mise à jour : Erreur HTTP. Préparation du lancement...') - logger.error('[updator() thread] : Update has failed with HTTP error') - time.sleep(1) - canvas.itemconfigure(message, text='Logiciel déjà à jour. Préparation du lancement...') - logger.info('[updator() thread] : CNIRevelator is up to date !') - time.sleep(1) - ret = 11 - if os.path.exists(CST_FOLDER + 'Tesseract-OCR4\\tesseract.exe'): - os.environ['PATH'] = CST_FOLDER + 'Tesseract-OCR4\\' - os.environ['TESSDATA_PREFIX'] = CST_FOLDER + 'Tesseract-OCR4\\tessdata' - else: - final_f = 'tesseract_4' - logger.info('[updator() thread] : Downloading tesseract 4 !') - canvas.itemconfigure(message, text='Mise à jour du module OCR ! Préparation du téléchargement...') - logger.info('[updator() thread] : Preparing download') - with open(CST_FOLDER + 'conf.ig', 'rb') as (config): - logger.info('[updator() thread] : Reading credentials for proxy in config file...') - AESObj = AESCipher(CST_CRYPTOKEY) - IPN, IPN_PASS = AESObj.decrypt(config.read()).split('||')[0:2] - session = PACSession(proxy_auth=(HTTPProxyAuth(IPN, IPN_PASS))) - try: - Prox_us = session.get_pac().find_proxy_for_url(CST_LINK, 'neoxgroup.eu') - PROXY_USABLE = Prox_us[6:-1].split(';')[0] - proxy_server_url = IPN + ':' + IPN_PASS + '@' + PROXY_USABLE - ph = urllib2.ProxyHandler({'http': proxy_server_url}) - auth = urllib2.ProxyBasicAuthHandler() - server = urllib2.build_opener(ph, auth, urllib2.HTTPHandler) - logger.info('[updator() thread] : Connection to the proxy initiated successfully !') - except: - canvas.itemconfigure(message, text='Téléchargement en connexion directe...') - server = urllib2.build_opener() - logger.info('[updator() thread] : Direct connection initiated successfully') - - logger.info('[updator() thread] : Launching download of ' + final_f) - Statut = Download(CST_LINK + final_f, CST_FOLDER + final_f, final_f, server, p, canvas, message, logger) - hashcod = '' - logger.info('[updator() thread] : Verifying hashcode of ' + final_f) - BLOCKSIZE = 65536 - hasher = hashlib.sha1() - try: - with open(CST_FOLDER + final_f, 'rb') as (afile): - buf = afile.read(BLOCKSIZE) - while len(buf) > 0: - hasher.update(buf) - buf = afile.read(BLOCKSIZE) - - hashcod = hasher.hexdigest() - if hashcod != CST_TesserHash: - Statut.success = False - logger.error('[updator() thread] : Hashcode Error : ' + final_f) - try: - os.remove(CST_FOLDER + final_f) - except IOError: - pass - - else: - logger.info('[updator() thread] : Hashcode pass : ' + final_f) - except FileNotFoundError as e: - logger.error('[updator() thread] : File not found ' + final_f) - - if Statut.success: - canvas.itemconfigure(message, text='Téléchargement terminé ! Installation...') - logger.info('[updator() thread] : Download of ' + final_f + 'finished successfully') - p.configure(mode='indeterminate', value=0, maximum=20) - p.start() - try: - zip_ref = zipfile.ZipFile(CST_FOLDER + final_f, 'r') - zip_ref.extractall(CST_FOLDER) - zip_ref.close() - os.environ['PATH'] = CST_FOLDER + 'Tesseract-OCR4\\' - os.environ['TESSDATA_PREFIX'] = CST_FOLDER + 'Tesseract-OCR4\\tessdata' - canvas.itemconfigure(message, text='Installation terminée !') - except: - logger.error('[updator() thread] : Unable to install the module. Wait and retry') - time.sleep(3) - try: - zip_ref = zipfile.ZipFile(CST_FOLDER + final_f, 'r') - zip_ref.extractall(CST_FOLDER) - zip_ref.close() - os.environ['PATH'] = CST_FOLDER + 'Tesseract-OCR4\\' - os.environ['TESSDATA_PREFIX'] = CST_FOLDER + 'Tesseract-OCR4\\tessdata' - canvas.itemconfigure(message, text='Installation terminée !') - except Exception as e: - logger.critical('[updator() thread] : Unable to install the module ! Stopping : ' + str(e)) - showerror("Erreur d'appel de procédure distante", "L'installation du module OCR a échoué, contactez le développeur.") - - ret = 11 - else: - logger.critical('[updator() thread] : Unable to download the module ! ') - showerror('Erreur de téléchargement', "L'installation du module OCR a échoué, merci d'indiquer le chemin d'accès au fichier tesseract_4 dans la fenêtre suivante") - path = filedialog.askopenfilename(title="Indiquez le chemin d'accès à tesseract_4...", filetypes=(('Tesseract_4', '*.cni4'), - ('Tesseract_4', '*.cni4'))) - if path != '': - try: - canvas.itemconfigure(message, text='Installation...') - zip_ref = zipfile.ZipFile(path, 'r') - zip_ref.extractall(CST_FOLDER) - zip_ref.close() - logger.error('[updator() thread] : Manual installation successed') - canvas.itemconfigure(message, text='Installation terminée !') - os.environ['PATH'] = CST_FOLDER + 'Tesseract-OCR4\\' - os.environ['TESSDATA_PREFIX'] = CST_FOLDER + 'Tesseract-OCR4\\tessdata' - except Exception as e: - logger.error('[updator() thread] : Manual installation has failed' + str(e)) - showerror('Erreur de lecture', "Le module OCR n'a pas pu être installé, la saisie automatique de scans ne pourra donc fonctionner") - - else: - showerror('Opération annulée', "Le module OCR n'a été installé, la saisie automatique de scans ne pourra donc fonctionner") - except URLExcept.HTTPError as e: - canvas.itemconfigure(message, text=('Echec de la mise à jour : Erreur HTTP ' + str(e.code) + ' . Préparation du lancement...')) - logger.error('[updator() thread] : Update has failed with HTTP error' + str(e.code)) - if int(e.code) == 407: - showerror('Erreur 407', 'Attention : le système de mise à jour automatique a fait face à une erreur 407, signifiant que la connexion au serveur proxy a été refusée. Vos identifiants vous seront redemandés au prochain démarrage. La mise à jour a échoué.') - logger.info('[updator() thread] : Credential error. Deleting the config file...') - os.remove(CST_FOLDER + 'conf.ig') - p.configure(mode='indeterminate', value=0, maximum=20) - p.start() - time.sleep(3) - except Exception as e: - canvas.itemconfigure(message, text='Echec de la mise à jour. Préparation du lancement...') - logger.error('[updator() thread] : Error from the updating system : ' + str(e)) - p.configure(mode='indeterminate', value=0, maximum=20) - p.start() - time.sleep(2) - - p.stop() - upwin.destroy() - root.destroy() - return ret - - logger.info('updating() : Launching updator() thread...') - threading.Thread(target=updator, daemon=True).start() - logger.info('updating() [Thread] : Ending updator() thread') - - ret = 11 - root = Tk() - root.attributes('-alpha', 0.0) - root.iconify() - upwin = Toplevel(root) - upwin.overrideredirect(1) - upwin.configure(bg=CST_COLOR) - upwin.resizable(width=False, height=False) - w = 600 - h = 300 - upwin.update() - canvas = Canvas(upwin, width=600, height=270, bg=CST_COLOR, highlightthickness=0) - pbar = Canvas(upwin, width=600, height=30, bg=CST_COLOR) - p = ttk.Progressbar(pbar, orient=HORIZONTAL, length=590, mode='determinate') - upwin.update() - ws = upwin.winfo_screenwidth() - hs = upwin.winfo_screenheight() - canvas.create_text((w / 2), (h / 3), text=(CST_NAME + ' ' + CST_VERTITLE), font='Calibri 30 bold', fill='white') - message = canvas.create_text((w / 2), (h / 1.15), text=' ', font='Calibri 9', fill='white') - upwin.update() - x = ws / 2 - w / 2 - y = hs / 2 - h / 2 - upwin.geometry('%dx%d+%d+%d' % (w, h, x, y)) - canvas.grid() - pbar.grid() - p.grid() - upwin.after(2000, updating) - if getattr(sys, 'frozen', False): - root.iconbitmap(sys._MEIPASS + '\\id-card.ico\\id-card.ico') - else: - root.iconbitmap('id-card.ico') - logger.info('SoftUpdate() : Entering upwin mainloop()') - upwin.protocol('WM_DELETE_WINDOW', lambda : root.destroy()) - upwin.mainloop() - logger.info('SoftUpdate() : Exiting upwin mainloop()') - if ret == 11: - logger.info('SoftUpdate() : OK to start to main() normally !') - return True - else: - logger.info('SoftUpdate() : Program will stop !') - return False \ No newline at end of file