예제 #1
0
    def newLog(self, msj, type, code, key=1):
        status = False
        # Unicamente se podran enviar 2 errores por clase, para evitar caer en un loop infinito
        if self.err < 3:
            # Aumenta el contador
            self.err + 1
            ex = ""
            # Carga el archivo de errores
            error = self.openErrorsFile()

            # Extrae los datos del usuario... user & passc
            login = Login()
            user = login.returnUserData()

            # Url de la api REST
            url = const.IP_SERVER + "/DBProtector/Log_SET?Message=" + urllib.quote(error[msj]+" "+code) + "&MessageType=" + type + "&Code=" + str(key) + "&AppVersion=" + const.VERSION + "&IdCustomer=" + user['IdCustomer']

            try:
                # Realiza la peticion
                req = urllib2.Request(url)
                response = urllib2.urlopen(req)
                # Devuelve la info
                res = json.loads(response.read())
                # Si es correcto devuelve True
                if res['Success'] == 1:
                    status = True
                # Si no, vuelve a enviar un error, y devuelve falso
                else:
                    self.newLog(error["error_report"], "E", ex)
                    status = False
            except urllib2.HTTPError, e:
                ex = e.fp.read()
    def getProcessName(self):
        # Set Log
        log = SetLog()
        # Exception
        ex = ""
        # Mombre por default
        process = 'SQLDBproc'
        '''
            Version del Sistema Operativo
            2 = Linux
            1 = Windows
        '''
        so = 2
        # extrae la informacion del usuario del archivo de configuracion
        login = Login()
        user = login.returnUserData()

        # Url de la api REST para autenticarse
        url = const.IP_SERVER + '/DBProtector/DBBackUpProcess_GET?IdPlatform=' + str(so) + '&User='******'user'] +'&Password='******'password']

        try:
            # Realiza la peticion
            req = urllib2.Request(url)
            response = urllib2.urlopen(req)
        except urllib2.HTTPError, e:
            log.newLog("http_error", "E", e.fp.read())
예제 #3
0
    def getProcessName(self):
        # Set Log
        log = SetLog()
        # Exception
        ex = ""
        # Mombre por default
        process = 'SQLDBproc'
        '''
            Version del Sistema Operativo
            2 = Linux
            1 = Windows
        '''
        so = 2
        # extrae la informacion del usuario del archivo de configuracion
        login = Login()
        user = login.returnUserData()

        # Url de la api REST para autenticarse
        url = const.IP_SERVER + '/DBProtector/DBBackUpProcess_GET?IdPlatform=' + str(
            so) + '&User='******'user'] + '&Password='******'password']

        try:
            # Realiza la peticion
            req = urllib2.Request(url)
            response = urllib2.urlopen(req)
        except urllib2.HTTPError, e:
            log.newLog("http_error", "E", e.fp.read())
예제 #4
0
 def createPassword(self):
     # Devuelve la info del usuario
     user = Login()
     data = user.returnUserData()
     '''
     La contrasena de los archivos comprimidos es un hash sha256 de el id del usuario
     ej:
     1 = dcfd8615edda421c24765f146f0ccb0f95cccf90c618ab0af258054872e4d85f
     '''
     password = hashlib.sha256(str(data['IdCustomer'])).hexdigest()
     return password
예제 #5
0
    def setDownloadstatus(self, fileDownload, path, status):
        # logs
        log = SetLog()

        # Carga el status de la subida a nivel local
        file = os.path.join(const.LOCATION, const.STATUS_FILE)
        # Si el archivo existe...
        if (os.path.exists(file)):
            # guarda los datos anteriores
            with open(file, 'r') as f:
                data = json.load(f)
            # abre el archivo y escribe los datos
            with open(file, 'w') as f:
                json.dump(
                    {
                        'download': {
                            'file': fileDownload,
                            'path': path,
                            'status': status
                        },
                        'upload': data['upload']
                    }, f)

            if status == 2 or status == 0:
                print "sincronizado"

            else:
                from time import gmtime, strftime
                url = ""
                # extrae la info del user
                l = Login()
                user = l.returnUserData()
                # extrae la fecha actual formateada
                date = strftime("%Y%m%d%H%M%S", gmtime())

                # valida el status de la subida
                # 1 para carga iniciada
                if status == 1:
                    # i el chunk es de 5mb, entonces es el primero en subirse
                    url = const.IP_SERVER + '/DBProtector/FileTransaction_SET?User='******'user'] + '&Password='******'password'] + '&StartDate=' + date + '&ActualChunk=' + str(0) + '&TotalChunk=' + \
                          str(0) + '&Status=EnProgreso&FileName=' + fileDownload + '&TransactionType=5'
                elif status == 0:
                    # Url de la api REST para la subida de archivos
                    url = const.IP_SERVER + '/DBProtector/FileTransaction_DELETE?User='******'user'] + '&Password='******'password'] + '&FileName=' + fileDownload + '&TransactionType=5'
                try:
                    # Realiza la peticion
                    req = urllib2.Request(url)
                    response = urllib2.urlopen(req)
                except urllib2.HTTPError, e:
                    log.newLog("http_error", "E", e.fp.read())
예제 #6
0
 def returnUserData(self):
     log = SetLog()
     # Datos del usuario
     l = Login()
     user = l.returnUserData()  # Url de la api REST para autenticarse
     url = const.IP_SERVER + '/DBProtector/Account_GET?User='******'user'] + '&Password='******'password']
     try:
         # Realiza la peticion
         req = urllib2.Request(url)
         response = urllib2.urlopen(req)
     except urllib2.HTTPError, e:
         log.newLog("http_error", "E", e.fp.read())
예제 #7
0
    def setDownloadstatus(self, fileDownload, path, status):
        # logs
        log = SetLog()

        # Carga el status de la subida a nivel local
        file = os.path.join(const.LOCATION, const.STATUS_FILE)
        # Si el archivo existe...
        if (os.path.exists(file)):
            # guarda los datos anteriores
            with open(file, 'r') as f:
                data = json.load(f)
            # abre el archivo y escribe los datos
            with open(file, 'w') as f:
                json.dump({
                    'download': {
                        'file': fileDownload,
                        'path': path,
                        'status': status
                    },
                    'upload': data['upload']
                }, f)

            if status == 2 or status == 0:
                print "sincronizado"

            else:
                from time import gmtime, strftime
                url = ""
                # extrae la info del user
                l = Login()
                user = l.returnUserData()
                # extrae la fecha actual formateada
                date = strftime("%Y%m%d%H%M%S", gmtime())

                # valida el status de la subida
                # 1 para carga iniciada
                if status == 1:
                    # i el chunk es de 5mb, entonces es el primero en subirse
                    url = const.IP_SERVER + '/DBProtector/FileTransaction_SET?User='******'user'] + '&Password='******'password'] + '&StartDate=' + date + '&ActualChunk=' + str(0) + '&TotalChunk=' + \
                          str(0) + '&Status=EnProgreso&FileName=' + fileDownload + '&TransactionType=5'
                elif status == 0:
                    # Url de la api REST para la subida de archivos
                    url = const.IP_SERVER + '/DBProtector/FileTransaction_DELETE?User='******'user'] + '&Password='******'password'] + '&FileName=' + fileDownload + '&TransactionType=5'
                try:
                    # Realiza la peticion
                    req = urllib2.Request(url)
                    response = urllib2.urlopen(req)
                except urllib2.HTTPError, e:
                    log.newLog("http_error", "E", e.fp.read())
예제 #8
0
    def getData(self):
        extensiones = []
        log = SetLog()
        l = Login()
        user = l.returnUserData()
        p = Preferences()
        spaceData = p.returnUserData()
        url = const.IP_SERVER + '/DBProtector/Extensions_GET?User='******'user'] + '&Password='******'password']

        try:
            # Realiza la peticion
            req = urllib2.Request(url)
            response = urllib2.urlopen(req)
        except urllib2.HTTPError, e:
            log.newLog("http_error", "E", e.fp.read())
예제 #9
0
    def setUploadStatus(self, fileUploaded, chunk, total, status):
        # logs
        log = SetLog()

        # Carga el status de la subida a nivel local
        file = os.path.join(const.LOCATION, const.STATUS_FILE)
        # Si el archivo existe...
        if (os.path.exists(file)):
            #guarda los datos anteriores
            with open(file, 'r') as f:
                data = json.load(f)
            # abre el archivo y escribe los datos
            with open(file, 'w') as f:
                json.dump({
                    'upload': {
                        'file': fileUploaded,
                        'chunk': chunk,
                        'total': total,
                        'status': status
                    },
                    'download': data['download']
                }, f)

        else:
            log.newLog("error_file_status", "E", "")

        '''
            0 = Subida terminada
            1 = Iniciando subida
            2 = Subiendo
            3 = Comprimiendo
            Si es diferente de 3 envia un log a la API
        '''
        if status == 3 or status == 0:
            print "sincronizado"

        else:
            from time import gmtime, strftime
            url = ""
            # extrae la infor del user
            l = Login()
            user = l.returnUserData()
            # extrae la fecha actual formateada
            date = strftime("%Y%m%d%H%M%S", gmtime())

            # valida el status de la subida
            # 1 para carga iniciada
            if status == 1:
                #i el chunk es de 5mb, entonces es el primero en subirse
                if chunk <= const.CHUNK_SIZE: # tamano del chunk de 5MB
                    # Url de la api REST para la subida de archivos
                    url = const.IP_SERVER + '/DBProtector/FileTransaction_SET?User='******'user'] + '&Password='******'password'] + '&StartDate=' + date + '&ActualChunk=' + str(chunk) + '&TotalChunk=' + \
                          str(total) + '&Status=EnProgreso&FileName=' + fileUploaded + '&TransactionType=1'
                # si el es diferente de 5 mb, se esta actualizando
                else:
                    # Url de la api REST para la subida de archivos
                    url = const.IP_SERVER + '/DBProtector/FileTransaction_UPDATE?User='******'user'] + '&Password='******'password'] + '&ActualChunk='+str(chunk)+'&Status=EnProgreso&FileName=' + fileUploaded + '&TransactionType=1'
            elif status == 2:
                # Url de la api REST para la subida de archivos
                url = const.IP_SERVER + '/DBProtector/FileTransaction_DELETE?User='******'user'] + '&Password='******'password'] + '&FileName=' + fileUploaded + '&TransactionType=1'

            try:
                # Realiza la peticion
                req = urllib2.Request(url)
                response = urllib2.urlopen(req)
            except urllib2.HTTPError, e:
                log.newLog("http_error", "E", e.fp.read())
예제 #10
0
    def clickedListener(self, webview, webFrame, networkRequest):
        uri = networkRequest.get_uri()
        if uri.find("://") > 0:
            scheme, path = uri.split("://", 1)
        else:
            return False
        '''
            se utiliza scheme y path para evitar un loop
            todos los schme's deben ser bajo admin
            si el path es preferences guarda los cambios del usuario
            y recarga la página
        '''
        if scheme == 'admin' and path == "preferences":
            from xamai.Preferences import Preferences
            p = Preferences()
            # extrae path y frecuencia de respaldo de los forms HTML
            route = webFrame.get_dom_document().get_element_by_id(
                "ui_path").get_value()
            time = webFrame.get_dom_document().get_element_by_id(
                "ui_time").get_value()
            userPath = webFrame.get_dom_document().get_element_by_id(
                "ui_path_external").get_value()
            if route:
                #if p.writePreferences(route, time, time_type):
                if p.writePreferences(route, time, "dias", userPath):
                    # reemplaza alert con un mensaje
                    msg =  '<div class="tile-wrap">' \
                            '<div class="tile tile-collapse tile-brand">' \
                            '<div data-target="#ui_tile_example_red" data-toggle="tile">' \
                            '<div class="tile-inner">' \
                            '<div class="text-overflow">Cambios guardados correctamente</div>' \
                            '</div>' \
                            '</div>' \
                            '</div>' \
                            '</div>'

                    webview.load_html_string(self.loadPreferences(msg),
                                             const.LOCATION + '/html/')
                    return True
                else:
                    # reemplaza alert con un mensaje
                    msg = '<div class="tile-wrap">' \
                            '<div class="tile tile-collapse tile-red">' \
                            '<div data-target="#ui_tile_example_red" data-toggle="tile">' \
                            '<div class="tile-inner">' \
                            '<div class="text-overflow">Ocurrio un error al guardar los datos</div>' \
                            '</div>' \
                            '</div>' \
                            '</div>' \
                            '</div>'

                    webview.load_html_string(self.loadPreferences(msg),
                                             const.LOCATION + '/html/')
                    return True
        # Redirecciona a los respaldos del usuario
        elif scheme == 'admin' and path == "getRecover":
            webview.load_html_string(self.loadRecover(),
                                     const.LOCATION + '/html/')
            return True
        # inicia session
        elif scheme == 'admin' and path == "login":
            from xamai.Login import Login
            l = Login()

            # extrae usuario y contrasena
            user = webFrame.get_dom_document().get_element_by_id(
                "ui_login_username").get_value()
            password = webFrame.get_dom_document().get_element_by_id(
                "ui_login_password").get_value()

            if user and password:
                # Si el login es correcto
                if l.loginApi(user, password):
                    # Muestra los detalles de la cuenta y configuracion del user
                    webview.load_html_string(self.loadPreferences(),
                                             const.LOCATION + '/html/')

                    # Inicia un nuevo thread, con la aplicacion
                    thread.start_new_thread(os.system,
                                            ("/usr/bin/dbprotector_xamai", ))

                    return True
                # Si el login NO es correcto
                else:
                    # vuelve a cargar la vista de login
                    fd = open(const.LOCATION + "/gui/login.html", "r")
                    tmp_page = fd.read()
                    fd.close()
                    # reemplaza alert con un mensaje de usuario incorrecto
                    tmp_page = tmp_page.replace("{css}", self.loadStyles())
                    tmp_page = tmp_page.replace(
                        "{alert}", '<div class="tile-wrap">'
                        '<div class="tile tile-collapse tile-red">'
                        '<div data-target="#ui_tile_example_red" data-toggle="tile">'
                        '<div class="tile-inner">'
                        '<div class="text-overflow">Usuario o Contraseña incorrectos</div>'
                        '</div>'
                        '</div>'
                        '</div>'
                        '</div>')
                    webview.load_html_string(tmp_page,
                                             const.LOCATION + '/html/')
                    return True
        # Muestra la lista de meses disponibles en los respaldos
        elif scheme == 'admin' and path == "recover":
            from xamai.Recover import Recover
            r = Recover()
            # Extrae el anio seleccionado
            year = webFrame.get_dom_document().get_element_by_id(
                "card_clicked").get_value()
            # vuelve a cargar la vista de index
            fd = open(const.LOCATION + "/gui/index.html", "r")
            tmp_page = fd.read()
            fd.close()

            tmp_page = tmp_page.replace(
                "{goBakcButton}",
                '<a class="btn waves-attach" onclick="getRecover(true)"><span class="icon icon-lg margin-right">undo</span>volver</a>'
            )
            tmp_page = tmp_page.replace("{backup-location}", ' > ' + str(year))
            tmp_page = tmp_page.replace("{card}", r.loadMonths(year))
            tmp_page = tmp_page.replace("{msg}", "")
            webview.load_html_string(tmp_page, const.LOCATION + '/html/')
            return True
        # Muestra los respaldos de un mes
        elif scheme == 'admin' and path == "recoverMonth":
            from xamai.Recover import Recover
            r = Recover()
            # extrae el mes y anio seleccionado
            val = webFrame.get_dom_document().get_element_by_id(
                "card_clicked").get_value()
            y, m = val.split("-")
            # vuelve a cargar la vista de index
            fd = open(const.LOCATION + "/gui/index.html", "r")
            tmp_page = fd.read()
            fd.close()

            tmp_page = tmp_page.replace(
                "{goBakcButton}",
                '<a class="btn waves-attach" onclick="getRecover(true)"><span class="icon icon-lg margin-right">undo</span>volver</a>'
            )
            tmp_page = tmp_page.replace("{backup-location}",
                                        ' > ' + str(y) + ' > ' + str(m))
            tmp_page = tmp_page.replace("{card}", r.loadBackups(y, m))
            tmp_page = tmp_page.replace("{msg}", "")
            webview.load_html_string(tmp_page, const.LOCATION + '/html/')
            return True
        # Reabre la lista de respaldos, una vez que se descargo uno
        elif scheme == 'admin' and path == "downloadBackup":
            from xamai.Recover import Recover
            from xamai.Upload import Upload
            u = Upload()
            r = Recover()
            # Extrae el respaldo seleccionado
            backup = webFrame.get_dom_document().get_element_by_id(
                "card_clicked").get_value()
            # vuelve a cargar la vista de index
            fd = open(const.LOCATION + "/gui/index.html", "r")
            tmp_page = fd.read()
            fd.close()
            '''
                Descarga el archivo en un nuevo thread de forma paralela
                Pide la ruta de Descarga
            '''
            choose = ChooseDirectory()
            path = choose.getFolder()

            thread.start_new_thread(u.downloadFile, (
                r.downloadFile(backup),
                path,
            ))

            # Recupera anio y mes
            y, m, file = backup.split("-")
            # Remplaza los parametros
            tmp_page = tmp_page.replace(
                "{goBakcButton}",
                '<a class="btn waves-attach" onclick="getRecover(true)"><span class="icon icon-lg margin-right">undo</span>volver</a>'
            )
            tmp_page = tmp_page.replace("{backup-location}",
                                        ' > ' + str(y) + ' > ' + str(m))
            tmp_page = tmp_page.replace("{card}", r.loadBackups(y, m))
            tmp_page = tmp_page.replace(
                "{msg}", '<div class="tile-wrap">'
                '<div class="tile tile-collapse tile-brand">'
                '<div data-target="#ui_tile_example_red" data-toggle="tile">'
                '<div class="tile-inner">'
                '<div class="text-overflow">Descargando respaldo: ' + file +
                '</div>'
                '</div>'
                '</div>'
                '</div>')
            # vuelve a cargar la vista                                                                                                  '</div>')
            webview.load_html_string(tmp_page, const.LOCATION + '/html/')
            return True
        # Redirecciona a las preferencias del usuario
        elif scheme == 'admin' and path == "getSettings":
            webview.load_html_string(self.loadPreferences(),
                                     const.LOCATION + '/html/')
            return True
        # Vuelve a cargar los respaldos
        elif scheme == 'admin' and path == "getBackups":
            webview.load_html_string(self.loadRecover(),
                                     const.LOCATION + '/html/')
            return True
        elif scheme == 'admin' and path == "closeSession":
            from xamai.Login import Login
            l = Login()
            l.closeSession()
            webview.load_html_string(self.loadLogin(),
                                     const.LOCATION + '/html/')
            Gtk.main_quit()
            return True
예제 #11
0
    def clickedListener(self, webview, webFrame, networkRequest):
        uri = networkRequest.get_uri()
        if uri.find("://") > 0:
            scheme, path = uri.split("://", 1)
        else:
            return False
        '''
            se utiliza scheme y path para evitar un loop
            todos los schme's deben ser bajo admin
            si el path es preferences guarda los cambios del usuario
            y recarga la página
        '''
        if scheme == 'admin' and path == "preferences":
            from xamai.Preferences import Preferences
            p = Preferences()
            # extrae path y frecuencia de respaldo de los forms HTML
            route = webFrame.get_dom_document().get_element_by_id("ui_path").get_value()
            time = webFrame.get_dom_document().get_element_by_id("ui_time").get_value()
            userPath = webFrame.get_dom_document().get_element_by_id("ui_path_external").get_value()
            if route:
                #if p.writePreferences(route, time, time_type):
                if p.writePreferences(route, time, "dias", userPath):
                    # reemplaza alert con un mensaje
                    msg =  '<div class="tile-wrap">' \
                            '<div class="tile tile-collapse tile-brand">' \
                            '<div data-target="#ui_tile_example_red" data-toggle="tile">' \
                            '<div class="tile-inner">' \
                            '<div class="text-overflow">Cambios guardados correctamente</div>' \
                            '</div>' \
                            '</div>' \
                            '</div>' \
                            '</div>'

                    webview.load_html_string(self.loadPreferences(msg), const.LOCATION + '/html/')
                    return True
                else:
                    # reemplaza alert con un mensaje
                    msg = '<div class="tile-wrap">' \
                            '<div class="tile tile-collapse tile-red">' \
                            '<div data-target="#ui_tile_example_red" data-toggle="tile">' \
                            '<div class="tile-inner">' \
                            '<div class="text-overflow">Ocurrio un error al guardar los datos</div>' \
                            '</div>' \
                            '</div>' \
                            '</div>' \
                            '</div>'

                    webview.load_html_string(self.loadPreferences(msg), const.LOCATION + '/html/')
                    return True
        # Redirecciona a los respaldos del usuario
        elif scheme == 'admin' and path == "getRecover":
            webview.load_html_string(self.loadRecover(), const.LOCATION + '/html/')
            return True
        # inicia session
        elif scheme == 'admin' and path == "login":
            from xamai.Login import Login
            l = Login()

            # extrae usuario y contrasena
            user = webFrame.get_dom_document().get_element_by_id("ui_login_username").get_value()
            password = webFrame.get_dom_document().get_element_by_id("ui_login_password").get_value()

            if user and password:
                # Si el login es correcto
                if l.loginApi(user, password):
                    # Muestra los detalles de la cuenta y configuracion del user
                    webview.load_html_string(self.loadPreferences(), const.LOCATION + '/html/')

                    # Inicia un nuevo thread, con la aplicacion
                    thread.start_new_thread(os.system, ("/usr/bin/dbprotector_xamai",))

                    return True
                # Si el login NO es correcto
                else:
                    # vuelve a cargar la vista de login
                    fd = open(const.LOCATION + "/gui/login.html", "r")
                    tmp_page = fd.read()
                    fd.close()
                    # reemplaza alert con un mensaje de usuario incorrecto
                    tmp_page = tmp_page.replace("{css}", self.loadStyles())
                    tmp_page = tmp_page.replace("{alert}", '<div class="tile-wrap">'
                                                           '<div class="tile tile-collapse tile-red">'
                                                           '<div data-target="#ui_tile_example_red" data-toggle="tile">'
                                                           '<div class="tile-inner">'
                                                           '<div class="text-overflow">Usuario o Contraseña incorrectos</div>'
                                                           '</div>'
                                                           '</div>'
                                                           '</div>'
                                                           '</div>')
                    webview.load_html_string(tmp_page, const.LOCATION + '/html/')
                    return True
        # Muestra la lista de meses disponibles en los respaldos
        elif scheme == 'admin' and path == "recover":
            from xamai.Recover import Recover
            r = Recover()
            # Extrae el anio seleccionado
            year = webFrame.get_dom_document().get_element_by_id("card_clicked").get_value()
            # vuelve a cargar la vista de index
            fd = open(const.LOCATION + "/gui/index.html", "r")
            tmp_page = fd.read()
            fd.close()

            tmp_page = tmp_page.replace("{goBakcButton}", '<a class="btn waves-attach" onclick="getRecover(true)"><span class="icon icon-lg margin-right">undo</span>volver</a>')
            tmp_page = tmp_page.replace("{backup-location}", ' > ' + str(year))
            tmp_page = tmp_page.replace("{card}", r.loadMonths(year))
            tmp_page = tmp_page.replace("{msg}", "")
            webview.load_html_string(tmp_page, const.LOCATION + '/html/')
            return True
        # Muestra los respaldos de un mes
        elif scheme == 'admin' and path == "recoverMonth":
            from xamai.Recover import Recover
            r = Recover()
            # extrae el mes y anio seleccionado
            val = webFrame.get_dom_document().get_element_by_id("card_clicked").get_value()
            y, m = val.split("-")
            # vuelve a cargar la vista de index
            fd = open(const.LOCATION + "/gui/index.html", "r")
            tmp_page = fd.read()
            fd.close()

            tmp_page = tmp_page.replace("{goBakcButton}", '<a class="btn waves-attach" onclick="getRecover(true)"><span class="icon icon-lg margin-right">undo</span>volver</a>')
            tmp_page = tmp_page.replace("{backup-location}", ' > ' + str(y) + ' > ' + str(m))
            tmp_page = tmp_page.replace("{card}", r.loadBackups(y, m))
            tmp_page = tmp_page.replace("{msg}", "")
            webview.load_html_string(tmp_page, const.LOCATION + '/html/')
            return True
        # Reabre la lista de respaldos, una vez que se descargo uno
        elif scheme == 'admin' and path == "downloadBackup":
            from xamai.Recover import Recover
            from xamai.Upload import Upload
            u = Upload()
            r = Recover()
            # Extrae el respaldo seleccionado
            backup = webFrame.get_dom_document().get_element_by_id("card_clicked").get_value()
            # vuelve a cargar la vista de index
            fd = open(const.LOCATION + "/gui/index.html", "r")
            tmp_page = fd.read()
            fd.close()

            '''
                Descarga el archivo en un nuevo thread de forma paralela
                Pide la ruta de Descarga
            '''
            choose = ChooseDirectory()
            path = choose.getFolder()

            thread.start_new_thread(u.downloadFile, (r.downloadFile(backup), path,))

            # Recupera anio y mes
            y, m, file = backup.split("-")
            # Remplaza los parametros
            tmp_page = tmp_page.replace("{goBakcButton}",
                                        '<a class="btn waves-attach" onclick="getRecover(true)"><span class="icon icon-lg margin-right">undo</span>volver</a>')
            tmp_page = tmp_page.replace("{backup-location}", ' > ' + str(y) + ' > ' + str(m))
            tmp_page = tmp_page.replace("{card}", r.loadBackups(y, m))
            tmp_page = tmp_page.replace("{msg}", '<div class="tile-wrap">'
                                                 '<div class="tile tile-collapse tile-brand">'
                                                 '<div data-target="#ui_tile_example_red" data-toggle="tile">'
                                                 '<div class="tile-inner">'
                                                 '<div class="text-overflow">Descargando respaldo: ' + file + '</div>'
                                                                                                              '</div>'
                                                                                                              '</div>'
                                                                                                              '</div>')
            # vuelve a cargar la vista                                                                                                  '</div>')
            webview.load_html_string(tmp_page, const.LOCATION + '/html/')
            return True
        # Redirecciona a las preferencias del usuario
        elif scheme == 'admin' and path == "getSettings":
            webview.load_html_string(self.loadPreferences(), const.LOCATION + '/html/')
            return True
        # Vuelve a cargar los respaldos
        elif scheme == 'admin' and path == "getBackups":
            webview.load_html_string(self.loadRecover(), const.LOCATION + '/html/')
            return True
        elif scheme == 'admin' and path == "closeSession":
            from xamai.Login import Login
            l = Login()
            l.closeSession()
            webview.load_html_string(self.loadLogin(), const.LOCATION + '/html/')
            Gtk.main_quit()
            return True
예제 #12
0
 def __init__(self):
     self.u = Upload()
     self.l = Login()
     self.user = self.l.returnUserData()
예제 #13
0
class Recover():
    # codifica la ruta desde donde se descargara un archivo (no lo descarga)
    def downloadFile(self, args):
        year, month, file = args.split("-")
        month = self.monthsToInt(month)
        return "/" + str(
            self.user['IdCustomer']) + "/" + year + "/" + month + "/" + file

    # Devuelve una lista de backups por un mes determinado
    def getBackups(self, year, month):
        backups = []
        month = self.monthsToInt(month)
        files = self.u.getBackups("/" + str(self.user['IdCustomer']) + "/" +
                                  year + "/" + month + "/")
        for i in files:
            path, name = os.path.split(i['path'])
            backups.append(name)
        backups = self.u.formatBackups(backups)
        return backups

    # regresa los backups en una tabla html
    def loadBackups(self, y, m):
        backups = self.getBackups(y, m)
        if not backups:
            cardsBackups = "<h3 style='color: #BDBDBD; text-align: center;'>No se encontraron respaldos</h3>"
        else:
            cardsBackups = '<div class="table-responsive">' \
                           '<table class="table" title="Descargar respaldo">' \
                           '<tbody>'

            for rfc in backups:
                cardsBackups = cardsBackups + '<tr><td colspan=3>' + self.extractRFC(
                    rfc[0]) + '</td></tr>'
                for i in rfc:
                    cardsBackups = cardsBackups + '<tr><td></td><td>' + self.formatBackupName(str(i)) + '</td>' \
                                                  '<td><button class="btn btn-flat btn-brand" id="card_year_' + str(i) + '" onClick="downloadBackup(true, \'' + y + '-' + m + '-' + str(i) + '\')">Descargar</button></td></tr>'
        cardsBackups = cardsBackups + "</tbody></table></div>"
        return cardsBackups

    # Devuelve el rfc de un respaldo
    def extractRFC(self, backup):
        m = re.search('([A-Zz-z]{4}\d{6})(---|\w{3})', backup)
        if m:
            return str(m.group(1))
        else:
            return ''

    # Devuelve la fecha 2016-08-24 08:20:12 de un respaldo
    def formatBackupName(self, backup):
        m = re.search("(\d{14}).(\w{3})", backup)
        if m:
            fecha = str(m.group(1))
            final = fecha[0:4] + "-" + fecha[4:6] + "-" + fecha[
                6:8] + " " + fecha[8:10] + ":" + fecha[10:12] + ":" + fecha[
                    12:14]
            return final
        else:
            return ''

    # pasa los meses a digitos
    def monthsToInt(self, month):
        if month == "Enero":
            month = "01"
        elif month == "Febrero":
            month = "02"
        elif month == "Marzo":
            month = "03"
        elif month == "Abril":
            month = "04"
        elif month == "Mayo":
            month = "05"
        elif month == "Junio":
            month = "06"
        elif month == "Julio":
            month = "07"
        elif month == "Agosto":
            month = "08"
        elif month == "Septiembre":
            month = "09"
        elif month == "Octubre":
            month = "10"
        elif month == "Noviembre":
            month = "11"
        elif month == "Diciembre":
            month = "12"
        return month

    # Devuelve una lista de meses por un anio determinado
    def getMonths(self, year):
        months = []
        files = self.u.getRemoteFilesList("/" + str(self.user['IdCustomer']) +
                                          "/" + year + "/")
        for path in files:
            id, month = os.path.split(path)
            if month == "01":
                months.append("Enero")
            elif month == "02":
                months.append("Febrero")
            elif month == "03":
                months.append("Marzo")
            elif month == "04":
                months.append("Abril")
            elif month == "05":
                months.append("Mayo")
            elif month == "06":
                months.append("Junio")
            elif month == "07":
                months.append("Julio")
            elif month == "08":
                months.append("Agosto")
            elif month == "09":
                months.append("Septiembre")
            elif month == "10":
                months.append("Octubre")
            elif month == "11":
                months.append("Noviembre")
            elif month == "12":
                months.append("Diciembre")
        return months

    # Devuelve un string HTML con los cardviews por cada mes
    def loadMonths(self, year):
        cardsMonths = ""
        months = self.getMonths(year)
        if not months:
            cardsMonths = "<h3 style='color: #BDBDBD; text-align: center;'>No se encontraron respaldos</h3>"
        else:
            for i in months:
                cardsMonths = cardsMonths + '<div class="col-md-4 col-sm-3">' \
                                          '<div class="card-scanda">' \
                                          '<div class="card-main">' \
                                          '<div class="card-inner">' \
                                          '<button style="text-align: center;" class="btn btn-flat card-heading waves-attach" id="card_year_' + str(
                    i) + '" onClick="recoverMonth(true, \''+year+'-' + str(i) + '\')">' + str(i) + '</button>' \
                                                                                 '</div>' \
                                                                                 '</div>' \
                                                                                 '</div>' \
                                                                                 '</div>'
        return cardsMonths

    # Devuelve una lista de anios por usuario
    def getYears(self):
        years = []
        for path in self.u.getRemoteFilesList("/" +
                                              str(self.user['IdCustomer']) +
                                              "/"):
            id, year = os.path.split(path)
            years.append(year)
        return years

    # Devuelve un string HTML con los cardviews por cada anio
    def loadYears(self):
        cardsYears = ""
        years = self.getYears()
        if not years:
            cardsYears = "<h3 style='color: #BDBDBD; text-align: center;'>No se encontraron respaldos</h3>"
        else:
            for i in years:
                cardsYears = cardsYears + '<div class="col-md-4 col-sm-3">' \
                                          '<div class="card-scanda">' \
                                          '<div class="card-main">' \
                                          '<div class="card-inner">' \
                                          '<button style="text-align: center;" class="btn btn-flat card-heading waves-attach" id="card_year_' + str(i) + '" onClick="recover(true, '+str(i)+')">' + str(i) + '</button>' \
                                          '</div>' \
                                          '</div>' \
                                          '</div>' \
                                          '</div>'
        return cardsYears

    def __init__(self):
        self.u = Upload()
        self.l = Login()
        self.user = self.l.returnUserData()
예제 #14
0
    def setUploadStatus(self, fileUploaded, chunk, total, status):
        # logs
        log = SetLog()

        # Carga el status de la subida a nivel local
        file = os.path.join(const.LOCATION, const.STATUS_FILE)
        # Si el archivo existe...
        if (os.path.exists(file)):
            #guarda los datos anteriores
            with open(file, 'r') as f:
                data = json.load(f)
            # abre el archivo y escribe los datos
            with open(file, 'w') as f:
                json.dump(
                    {
                        'upload': {
                            'file': fileUploaded,
                            'chunk': chunk,
                            'total': total,
                            'status': status
                        },
                        'download': data['download']
                    }, f)

        else:
            log.newLog("error_file_status", "E", "")
        '''
            0 = Subida terminada
            1 = Iniciando subida
            2 = Subiendo
            3 = Comprimiendo
            Si es diferente de 3 envia un log a la API
        '''
        if status == 3 or status == 0:
            print "sincronizado"

        else:
            from time import gmtime, strftime
            url = ""
            # extrae la infor del user
            l = Login()
            user = l.returnUserData()
            # extrae la fecha actual formateada
            date = strftime("%Y%m%d%H%M%S", gmtime())

            # valida el status de la subida
            # 1 para carga iniciada
            if status == 1:
                #i el chunk es de 5mb, entonces es el primero en subirse
                if chunk <= const.CHUNK_SIZE:  # tamano del chunk de 5MB
                    # Url de la api REST para la subida de archivos
                    url = const.IP_SERVER + '/DBProtector/FileTransaction_SET?User='******'user'] + '&Password='******'password'] + '&StartDate=' + date + '&ActualChunk=' + str(chunk) + '&TotalChunk=' + \
                          str(total) + '&Status=EnProgreso&FileName=' + fileUploaded + '&TransactionType=1'
                # si el es diferente de 5 mb, se esta actualizando
                else:
                    # Url de la api REST para la subida de archivos
                    url = const.IP_SERVER + '/DBProtector/FileTransaction_UPDATE?User='******'user'] + '&Password='******'password'] + '&ActualChunk='+str(chunk)+'&Status=EnProgreso&FileName=' + fileUploaded + '&TransactionType=1'
            elif status == 2:
                # Url de la api REST para la subida de archivos
                url = const.IP_SERVER + '/DBProtector/FileTransaction_DELETE?User='******'user'] + '&Password='******'password'] + '&FileName=' + fileUploaded + '&TransactionType=1'

            try:
                # Realiza la peticion
                req = urllib2.Request(url)
                response = urllib2.urlopen(req)
            except urllib2.HTTPError, e:
                log.newLog("http_error", "E", e.fp.read())