示例#1
0
    def __decryptData(self, data):

        try:

            data = hibrid.decrypt(data, self.__rsa.export_PrivateKey())

            self.__init_uniqkey = str(data[-1])

            if not (self.use_nodes == False):

                secundaryData = hibrid.decrypt(data[1], self.__secundaryRSA.export_PrivateKey())
                _use_nodes_bak = self.use_nodes
                self.use_nodes = False
                obj = wrap.getall(wrap.USE_NODE_INFO)['nodes']
                self.updateNode(_use_nodes_bak, hibrid.encrypt(secundaryData[-1], obj[_use_nodes_bak][0]), -1, 3)
                self.use_nodes = _use_nodes_bak

                return(secundaryData)

        except KeyError:

            raise ValueError('No hay información alamacenada de forma local')

        except ValueError:

            raise requestError('Error descodificando los datos! ...')

        else:

            return(data)
示例#2
0
def extract():

    result = []

    for _ in show_user_admins.show():

        _data = wrap.getall(wrap.USE_ADMIN, username=_, separate=True)

        for _ in _data:

            result.append(_) if (_data[_]['root'] == True) else None

    return (result)
示例#3
0
    wrap.db_personal = personal

if (show_ids == False):

    try:

        if not (username == None) and (separate == True) and not (isfile(
                '{}/{}.db'.format(wrap.getDB(user), username))):

            print(dumps((True, '¡El almacén seleccionado no existe!')))
            sys.exit(1)

        if (raw == False):

            db = wrap.getall(user, username=username, separate=separate)

        else:

            db = __dict_json_decode(
                dict(wrap.raw(user, username=username, separate=separate)))

    except wrap.databaseIsNotDefined as Except:

        print(str(Except))
        sys.exit(1)

    except wrap.agentNotExists:

        print(dumps((True, 'El identificador no existe ...')))
        sys.exit(1)
示例#4
0
def execute(data, bot_id, log):

    if not (check_values.check(data, 2) == True):

        log.logger(nomenclature_error, debug.WAR)

        return (False, None)

    (key, value) = data

    profile = '%s/%s/%s' % (db_dirname, profiles, bot_id)

    create_folder.create(profile)

    execute = True
    result = None
    bot_id = str(bot_id)

    if (key == 'ping'):

        log.logger('ping ... haciendo pong ...', debug.INF)
        result = (1, 'pong')

    elif (key == 'SEND-FILE'):

        if (check_values.check(value, 2) == False):

            log.logger(nomenclature_error, debug.WAR)
            execute = False

        else:

            _content = value[0]
            filename = basename(str(value[1]))
            file_path = '{}/{}'.format(profile, filename)
            _bak_file_path = rename_order.rename(file_path)

            log.logger('Verificando la existencia del archivo ...', debug.INF)

            if not (_bak_file_path == False):

                log.logger(
                    'El archivo: "{}" existe, renombrando a: "{}"'.format(
                        file_path, _bak_file_path), debug.WAR)

                file_path = _bak_file_path

            else:

                log.logger(
                    'No existe: "{}", procediendo a escribir ...'.format(
                        file_path), debug.PER)

            log.logger('Escribiendo: "{}" ...'.format(file_path), debug.PER)

            try:

                if (cipher_file == True):

                    wrap_file.wrap(file_path, wrap._new_passwd, _content)

                else:

                    with open(file_path, 'wb') as file_object:

                        file_object.write(bytes_convert.convert(_content))

            except Exception as Except:

                log.logger(
                    'Ocurrio un error escribiendo a: "{}"'.format(file_path),
                    debug.WAR)
                execute = False

            else:

                log.logger('Escrito: "{}" ...'.format(file_path), debug.PER)

    elif (key == 'RECV-FILE'):

        file_path = '{}/{}/{}'.format(share_folder, bot_id,
                                      basename(str(value)))

        if (isfile(file_path)):

            log.logger('Enviando el archivo: "{}" ...'.format(file_path),
                       debug.PER)

            try:

                if (cipher_file == True):

                    result = wrap_file.wrap(file_path, wrap._new_passwd)

                    if (result == False):

                        log.logger(
                            '{}, no se pudo desencriptar..., Intentando sin desencriptar...'
                            .format(file_path), debug.WAR)

                if (result == False) or (cipher_file == False):

                    with open(file_path, 'rb') as file_object:

                        result = file_object.read()

            except Exception as Except:

                log.logger(
                    'Ocurrio un error leyendo a: "{}"'.format(file_path))
                execute = False

            else:

                log.logger('Enviando ...', debug.WAR)

        else:

            log.logger(
                'El archivo: "{}", no existe ...'.format(basename(file_path)),
                debug.COM)

            result = '0'
            execute = False

    elif (key == 'SHELL-EXEC'):

        result = []
        _commands = wrap.read(bot_id, 'commands', separate=True)
        _index = 0

        if not (_commands == False):

            try:

                if (len(_commands) == 0):

                    raise IndexError

                for _ in _commands:

                    if (_[0] == False):

                        result.append(_[1])

                        if (wrap.write(bot_id,
                                       'commands',
                                       True,
                                       target=wrap.TARGET_SUBINDEX_UPDATE,
                                       array_subindex=(_index, 0),
                                       separate=True) == True):

                            log.logger(
                                'No se volverá a ejecutar "{}" ...'.format(
                                    _[1]), debug.WAR)

                        else:

                            log.logger(
                                'Hubo un error actualizando los datos del comando: "{}"'
                                .format(_[1]))

                    _index += 1

            except IndexError:

                log.logger(
                    'Aún no hay comandos ingresados por parte del encargado de administrar el bot',
                    debug.WAR)

                result = (False, None)

            else:

                if (len(result) > 0):

                    log.logger('Ejecutara "{}"'.format(', '.join(result)),
                               debug.PER)

                    result = (True, result)

                else:

                    log.logger(
                        'No se puede ejecutar comandos, ya que no están disponibles!',
                        debug.WAR)

                    result = (False, None)

        else:

            log.logger(
                'Ocurrio un error leyendo los comandos de: "{}"'.format(
                    bot_id), debug.WAR)
            execute = False

    elif (key == 'addserver'):

        bot_servers = wrap.read(bot_id, 'servers', separate=True)

        if not (bot_servers == False):

            result = bot_servers
            _servers = []

            for _ in result:

                _servers.append(_[0])

            if not (len(_servers) == 0):

                log.logger(
                    'Enviando servidores secundarios: "{}"'.format(
                        ', '.join(_servers)), debug.WAR)

            else:

                log.logger('No hay servidores secundarios disponibles ...',
                           debug.WAR)
                execute = False

        else:

            log.logger(
                'Ocurrio un error leyendo los servidores secundario de: "{}"'.
                format(bot_id), debug.COM)
            execute = False

    elif (key == 'getPeers'):

        log.logger('Leyendo base de datos de los puntos ...', debug.INF)

        _data = wrap.getall(agent=wrap.USE_PEER)

        if (len(_data) > 0):

            log.logger('Enviando puntos de la red ...', debug.INF)

            result = uniqdata.uniqdata(
                list(list(_data.values())[0].values())[0])

        else:

            log.logger('Aún no hay puntos en la red ...', debug.COM)

            execute = False

    elif (key == 'addPeer'):

        if not (isinstance(value, dict)):

            log.logger(
                'El tipo de dato de los puntos a agregar no es un diccionario ...',
                debug.WAR)
            execute = False

        else:

            if (None in [
                    log.logger('{}, No está definido'.format(x), debug.WAR)
                    for x in
                ['url', 'username', 'passphrase', 'db_passwd', 'hash']
                    if (key_check_in_dict.check(value, x) == False)
            ]):

                execute = False

            else:

                _result = []
                _data = wrap.read(bot_id, 'peers', agent=wrap.USE_PEER)
                _hash = value['hash']
                _exists = value in _data if not (_data == False) else False

                log.logger(
                    'Agregando punto en la red -> {} ({})'.format(
                        value['url'], value['hash']), debug.PER)

                if (_data == False):

                    if (wrap.add(bot_id, {'peers': [value]},
                                 agent=wrap.USE_PEER) == True):

                        log.logger('Primer punto de la red agregado ...',
                                   debug.INF)

                    else:

                        log.logger(
                            'Hubo un error agregando un punto de la red por primera vez ...',
                            debug.COM)

                        execute = False

                else:

                    if (_exists == True):

                        log.logger('El punto de la red ya existe!', debug.WAR)
                        log.logger('Actualizando datos ...', debug.INF)

                    else:

                        log.logger('Nuevo punto en la red detectado ...',
                                   debug.INF)

                    _result.append(value)

                    for _ in _data:

                        if (_['hash'] == _hash):

                            log.logger(
                                'Coincidencia: "%s"; Editando ...' % (_hash),
                                debug.PER)

                            _['url'] = value['url']
                            _['db_passwd'] = value['db_passwd']
                            _['passphrase'] = value['passphrase']
                            _['username'] = value['username']

                        _result.append(_)

                    _result = uniqdata.uniqdata(_result)

                    if (wrap.add(bot_id, {'peers': _result},
                                 agent=wrap.USE_PEER) == True):

                        log.logger('Puntos escritos con éxito!', debug.INF)

                    else:

                        log.logger(
                            'Error escribiendo datos de los puntos de la red ...',
                            debug.COM)

    elif (key == 'getQueue'):

        result = wrap.read(bot_id, 'Queue', separate=True)

        if not (result == []):

            if (wrap.write(bot_id,
                           'Queue',
                           None,
                           separate=True,
                           target=wrap.TARGET_UNSET) == True):

                log.logger('¡Se reiniciaron los comandos en cola!', debug.WAR)

            else:

                log.logger(
                    'Hubo un error actualizando los comandos en cola...',
                    debug.COM)

        else:

            log.logger('Aún no hay comandos en cola', debug.WAR)

    elif (key == 'loadModule'):

        moduleName = basename(str(value)).strip()

        if not (moduleName == '') and not (re.search(r'(?=\.+)', moduleName)):

            log.logger('Va a cargar un complemento...', debug.WAR)

            # Por ahora la ruta se especifica de esta forma porque sólo es válida para arquitecturas de 32bits con SO Windows

            modulePath = '{}/{}/rook/src/init.py'.format(
                global_conf.databases['complements'], moduleName)

            log.logger('Cargando a "{}" ...'.format(modulePath), debug.PER)

            if (isfile(modulePath)):

                with open(modulePath, 'rb') as file_object:

                    result = file_object.read()

                log.logger('¡Complemento cargado!', debug.INF)

            else:

                log.logger(
                    '{}, No existe como complemento ...'.format(moduleName),
                    debug.WAR)
                execute = False

        else:

            log.logger('El nombre del complemento no es válido')
            execute = False

    elif (key == 'resultModule'):

        if (check_values.check(value, 4) == False):

            log.logger(nomenclature_error, debug.WAR)
            execute = False

        else:

            log.logger('Envío un resultado de un complemento ...', debug.INF)

            config = {
                'result': value[1],
                'log': log,
                'bot_id': bot_id,
                'remote_addr': log.address,
                'function': value[2],
                'exception': value[3],
                'args': parse_args
            }

            moduleName = basename(str(value[0])).strip()
            modulePath = '{}.{}.evie.init'.format(
                global_conf.databases['complements'],
                moduleName).replace('/', '.')

            if not (moduleName == '') and not (re.search(
                    r'(?=\.+)', moduleName)):

                log.logger(
                    'Interactuando con el complemento "{}" ...'.format(
                        moduleName), debug.PER)

                try:

                    data = {}
                    mod = importlib.reload(importlib.import_module(modulePath))

                    def moduleMain(*args, **kwargs):

                        try:

                            mod.main(*args, **kwargs)

                        except Exception as Except:

                            log.logger(
                                'Ocurrio un error al ejecutar el complemento "{}". Excepción: "{}"'
                                .format(moduleName, Except), debug.WAR)

                    if (hasattr(mod, 'main') == True):

                        if not (isfunction(getattr(mod, 'main')) == True):

                            log.logger('¡main, no es una función!', debug.WAR)

                            return (False, None)

                    else:

                        log.logger('La función "main" no está definida',
                                   debug.WAR)

                        return (False, None)

                    for _ in getfullargspec(mod.main).args:

                        if not (_ in config):

                            log.logger(
                                '{} no es un parámetro válido'.format(_),
                                debug.WAR)

                            return (False, None)

                        else:

                            data[_] = config[_]

                    mod_thread = threading.Thread(
                        target=moduleMain,
                        name=generate_uniqkey.generate(),
                        kwargs=data)
                    mod_thread.start()

                except ModuleNotFoundError:

                    log.logger(
                        '¡El complemento "{}" no existe!'.format(moduleName),
                        debug.WAR)
                    execute = False

                except Exception as Except:

                    log.logger(
                        'Error importando "{}": {}'.format(moduleName, Except),
                        debug.WAR)
                    execute = False

                else:

                    log.logger(
                        'Nuevo hilo iniciado ({}) para {} ...'.format(
                            mod_thread.name, moduleName), debug.PER)

            else:

                log.logger('El nombre del complemento no es válido', debug.WAR)
                execute = False

    else:

        access = wrap.write(bot_id, 'data', data, separate=True)

        if (access == True):

            log.logger('¡Datos agregados con éxito!', debug.INF)

        else:

            log.logger(
                '¡Hubo un error desconocido al agregar datos al almacén!',
                debug.COM)
            execute = False

    return (execute, result)
示例#5
0
    else:

        print('El almacén del rook no se puede borrar porque no existe ...')
        sys.exit(1)

if (show == True):

    if (len(bot_id_list) == 0):

        print('No se han registrado credenciales para los bot\'s')
        sys.exit(1)

    bot_id_list = bot_id_list if (limit
                                  == None) else bot_id_list[limit[0]:limit[1]]
    credentials_list = [
        wrap.getall(agent=wrap.USE_BOT, username=x, separate=True)
        for x in bot_id_list
    ]

    for credentials in credentials_list:

        if not (rsa_password == None):

            _evalue_credentials = rsa_password_check.check(
                rsa_password, bot_id_list)

        else:

            _evalue_credentials = None

        if not (option == None):
示例#6
0
def connect(url,
            token,
            command,
            data,
            log,
            return_exception=True,
            headers=None):

    if not (isinstance(url, str)):

        log.logger('El tipo de dato de la URL no es correcto', debug.WAR)
        return (False)

    if not (isinstance(url, str)):

        log.logger('El tipo de dato del token de acceso no es correcto',
                   debug.WAR)
        return (False)

    share = {}
    share['token'] = token

    log.logger('Usando el acceso público de "%s"' % (url), debug.INF)

    try:

        try:

            pubKey = wrap.getall(wrap.USE_TMP)[sha1(
                url.encode()).hexdigest()]['pub_key']

        except KeyError:

            log.logger(
                'No se encontro la clave pública en el almacén ... Descargandola de: "%s"'
                % (url), debug.PER)

            share['command'] = ('getPubKey', None)

            pubKey = simplycrypt.decrypt(
                token,
                requests.post(
                    url=url,
                    data=simplycrypt.encrypt(token, share),
                    headers=headers,
                    verify=False,
                    timeout=global_conf.connector['timeout']).content)

            if (pubKey == False):

                log.logger(
                    'Hubo un error extrayendo la clave pública de: "%s"' %
                    (url), debug.COM)

                return (False)

            log.logger('Almacenando la clave pública en el almacén ...',
                       debug.INF)

            if (wrap.add(sha1(url.encode()).hexdigest(), {'pub_key': pubKey},
                         agent=wrap.USE_TMP) == True):

                log.logger('La clave pública se guardó en el almacén',
                           debug.INF)

            else:

                log.logger(
                    'Error guardando la clave pública en el almacén  ...',
                    debug.WAR)

                return (False)

        log.logger('Enviando "%s" a "%s" ...' % (command, url), debug.PER)

        share['command'] = (command, data)

        content = simplycrypt.decrypt(
            token,
            requests.post(url=url,
                          data=simplycrypt.encrypt(token, share),
                          headers=headers,
                          verify=False,
                          timeout=global_conf.connector['timeout']).content)

        log.logger('Contenido enviado con éxito a: "%s"' % (url), debug.PER)

        return (content)

    except Exception as Except:

        log.logger(
            'Ocurrio un error conectando a un acceso público. Excepción: "%s"'
            % (Except), debug.WAR)

        if (return_exception == True):

            return (str(Except))

        else:

            return (False)
示例#7
0
parser.add(['-r', '--reset'], 'reset', 'Borrar todos los datos (Peligroso)', type=bool, action=True, group=danger_group)

args = parser.parse_args()

key = args.key
sub_key = args.sub_key
value = args.value
print_config = args.print_config
target = args.target
reset = args.reset
static = args.static

if not (key == None) or (print_config == True):

    dat = wrap.getall(wrap.USE_CONFIG)

    if (dat.get('config') == None):

        dat['config'] = {}

    dat = dat['config']

    if (print_config == True):

        if (static == True):

            _print('Leyendo archivo de configuración estática ...')

            _transformer = {}
            static_config = global_conf.__dict__
示例#8
0
    def writeNodes(self, nodes, node_info):

        if not (isinstance(nodes, list) == True) or not (isinstance(node_info, list) == True):

            raise TypeError('El tipo de dato no es el correspondiente')

        for _ in nodes:

            if not (isinstance(_, list) == True):

                raise TypeError('El tipo de dato de "%s" no es una lista' % (_))

            if (len(_) != 3):

                raise ValueError('La longitud de la lista (%s) no es correcta y tiene que seguir la siguiente sintaxis: (Node, Token, Secret Key)' % (_))

        if not (len(node_info) == 11):

            raise ValueError('La longitud del último nodo no tiene una longitud correcta y debe seguir la siguiente Síntaxis: (Node, Username, Passphrase, Uniqkey, Public Key Server, Your Private Key, Recover, Iteration\'s, Security Number, Decrement Number, Security Character\'s)')

        _cipher = lambda data: hibrid.encrypt(data, node_info[4])

        _username = _cipher(node_info[1])
        _passphrase = _cipher(node_info[2])
        _iteration = _cipher(str(node_info[7]))
        _securityNumber = _cipher(str(node_info[8]))
        _decrementNumber = _cipher(str(node_info[9]))
        _securityCharacters = _cipher(str(node_info[10]))

        _uniqkey = node_info[3] if (node_info[6] == False) else 'recover:%s' % (node_info[3])

        _private_key_node = node_info[5]

        node_info[1] = _username
        node_info[2] = _passphrase
        node_info[3] = _cipher(_uniqkey)
        node_info[7] = _iteration
        node_info[8] = _securityNumber
        node_info[9] = _decrementNumber
        node_info[10] = _securityCharacters

        node_info.pop(5)
        node_info.pop(5)

        nodes.append(node_info)

        _data = self.__simplySendData(('writeNodes', nodes))

        try:

            if (_data[1][1][0] == -1):
                
                return(_data)

        except (TypeError, IndexError, KeyError):

            pass

        if (_data == False):

            return(_data)
        
        elif (_data[1][0] == False):

            return(_data)

        else:

            if (_data[1][1] == None):

                return(_data)

        obj = wrap.getall(wrap.USE_NODE_INFO)

        if (obj.get('nodes') == None):

            obj = {}

        else:

            obj = obj['nodes']

        obj[_data[1][1]] = (node_info[4], _private_key_node)

        if (wrap.add('nodes', obj, agent=wrap.USE_NODE_INFO) == True):

            return(_data)

        else:
            
            return(False)
from utils.Wrappers import wrap
from utils.Ciphers import _decrypt_rsa_private_key

prog = basename(splitext(sys.argv[0])[0])

parser = argprogrammer.Parser()

parser.add(['-h', '--help'], 'help', 'Muestra la ayuda que estás viendo')
parser.add(['-P', '--rsa-passphrase'], 'rsa_passphrase',
           'La frase de contraseña para desencriptar la clave privada RSA')

args = parser.parse_args()

rsa_passphrase = args.rsa_passphrase

_db = wrap.getall(wrap.USE_SERVER)

if (_db.get('keys') == None):

    print('Error leyendo las claves del servidor ...')
    sys.exit(1)

_keys = _db['keys']

(pub_key, priv_key) = (_keys['public_key'], _keys['private_key'])

if not (rsa_passphrase == None):

    try:

        priv_key = _decrypt_rsa_private_key._decrypt(priv_key, rsa_passphrase)
示例#10
0
def loop_config(close=False):

    # Globals vars

    # Globals

    global conf_hash, new_conf, use_keys, init

    # Server

    global realm, LHOST, LPORT, RPATH, public_key, private_key, resolve_dns, resolve_port

    # Login

    global false_username, false_passphrase, recover, max_retry, retry_seconds, denied_method

    # honeypot

    global blacklist, honeypot_list, tools, user_agent_list, regular_expression_for_address, regular_expression_for_userAgent, re_options

    # style

    global time, logger, logs

    # templates

    global TEMPLATE_FOLDER, TEMPLATE_ERROR404, TEMPLATE_ERROR511, TEMPLATE_ERROR400, TEMPLATE_ERROR403, TEMPLATE_CREDENTIALS, webmaster_email, TEMPLATE_ERROR500

    # TOKEN SYSTEM:
    ###############

    global token, new_token

    # SECRET KEY SYSTEM:
    ####################

    global secret_key, new_secret_key

    while (True):

        try:

            # Configuration

            conf_file = wrap.getall(wrap.USE_CONFIG)

            if (conf_file == {}):

                exit_force(
                    'Aún no se escriben datos en el archivos de configuración ...'
                )

            else:

                # check config

                key_detect(dict(conf_file), [group_name])
                conf = dict(conf_file[group_name])
                new_conf_hash = sha1(str(conf).encode()).hexdigest()

                if (new_conf_hash != conf_hash):

                    conf_hash = new_conf_hash

                    # Check global config

                    key_detect(conf, [
                        'proxy', 'login', 'server', 'templates', 'honeypot',
                        'style'
                    ])

                    # Style configuration

                    style = conf['style']

                    # Check Style

                    key_detect(style, ['time', 'log'])

                    time = str(style['time'])
                    style_log = 'logs/%s' % (
                        strftime('%H.%m.%S.%d-%m-%Y.log')) if (
                            convert.convert_bool(
                                style['log']) == True) else False
                    logger = logging.logger(output=style_log, time_format=time)

                    # Server configuration

                    server = conf['server']

                    # Check Server

                    key_detect(server, [
                        'sys_version', 'server_version', 'realm', 'lhost',
                        'lport', 'rpath', 'rdns', 'rport', 'public_service',
                        'user_agent', 'nodes_rule', 'cipher_file'
                    ])

                    realm = str(server['realm'])
                    LHOST = str(server['lhost'])
                    LPORT = convert.convert_int(server['lport'])
                    BaseHTTPRequestHandler.sys_version = str(
                        server['sys_version'])
                    BaseHTTPRequestHandler.server_version = str(
                        server['server_version'])
                    RPATH = str(server['rpath'])
                    bit_size = convert.convert_int(server['bit_size'])
                    resolve_dns = convert.convert_int(server['rdns'])
                    resolve_port = convert.convert_int(server['rport'])
                    cipher_file = convert.convert_bool(server['cipher_file'])

                    # Comunicación

                    execute_command_to_admin.RULE = str(server['nodes_rule'])
                    execute_command_to_admin.cipher_file = cipher_file
                    execute_command.cipher_file = cipher_file
                    execute_command.parse_args = complements_info

                    if (re.match(r'(?!(RANDOM|STRICT))',
                                 execute_command_to_admin.RULE)):

                        execute_command_to_admin.RULE = random.choice(
                            ['STRICT', 'RANDOM'])
                        logger.log(
                            'Regla inválida; Usando "{}" como regla...'.format(
                                execute_command_to_admin.RULE), WAR)

                    execute_public_command.public_service = [
                        x.strip()
                        for x in str(server['public_service']).split(',')
                    ] if not (convert.convert_bool(server['public_service'])
                              == True) else False
                    execute_public_command.user_agent = str(
                        server['user_agent'])

                    # Proxy configuration

                    proxy = conf['proxy']

                    # Check proxy

                    key_detect(proxy, ['proxy_list'])
                    proxy_list = proxy['proxy_list']

                    if (convert.convert_bool(proxy_list)):

                        try:

                            proxy_list = convert.convert_dict(proxy_list)

                        except Exception as Except:

                            logger.log(
                                'Error parseando los datos. Excepción: {}'.
                                format(Except), COM)
                            logger.log('No se usara un proxy :/ ...', WAR)

                        else:

                            if (proxy_list.get('proxy') == None):

                                logger.log(
                                    'No configuró correctamente los valores de los proxy\'s...',
                                    WAR)

                            else:

                                current_proxy = random.choice(
                                    proxy_list['proxy'])

                                for _ in [
                                        'proxy_type', 'proxy_addr',
                                        'proxy_port', 'rds', 'username',
                                        'password'
                                ]:

                                    if (key_check_in_dict.check(
                                            current_proxy, _) == False):

                                        current_proxy = False
                                        logger.log('{} no está definido...',
                                                   WAR)
                                        break

                                if not (current_proxy == False):

                                    proxy_requirement_type = (
                                        isinstance(current_proxy['proxy_type'],
                                                   str)
                                        and current_proxy['proxy_type']
                                        in ['SOCKS4', 'SOCKS5', 'HTTP'])
                                    proxy_requirement_addr = isinstance(
                                        current_proxy['proxy_addr'], str)
                                    proxy_requirement_port = isinstance(
                                        current_proxy['proxy_port'], int)
                                    proxy_requirement_rds = isinstance(
                                        current_proxy['rds'], bool)
                                    proxy_requirement_username = (
                                        isinstance(current_proxy['username'],
                                                   str)
                                        or current_proxy['username'] == None)
                                    proxy_requirement_password = isinstance(
                                        current_proxy['password'], str
                                    ) or current_proxy['password'] == None

                                    if (proxy_requirement_addr) and (
                                            proxy_requirement_port
                                    ) and (proxy_requirement_rds) and (
                                            proxy_requirement_username) and (
                                                proxy_requirement_password):

                                        try:

                                            convex.transfor(
                                                proxy_type=socks.PROXY_TYPES.
                                                get(current_proxy['proxy_type']
                                                    ),
                                                proxy_addr='{}:{}'.format(
                                                    current_proxy[
                                                        'proxy_addr'],
                                                    current_proxy['proxy_port']
                                                ),
                                                rdns=current_proxy['rds'],
                                                username=current_proxy[
                                                    'username'],
                                                password=current_proxy[
                                                    'password'])

                                        except Exception as Except:

                                            logger.log(
                                                'No se pudo configurar el proxy. Excepcion: {}'
                                                .format(Except))

                                        else:

                                            logger.log(
                                                'Proxy: {}://{}:{}'.format(
                                                    current_proxy[
                                                        'proxy_type'],
                                                    current_proxy[
                                                        'proxy_addr'],
                                                    current_proxy['proxy_port']
                                                ), PER)

                                    else:

                                        logger.log(
                                            'Algunos tipos de datos no son correctos, por lo tanto no se puede configurar el proxy'
                                        )

                                else:

                                    logger.log(
                                        'No se puede usar un proxy, porque no está siguiendo la especificación acordada',
                                        WAR)

                    else:

                        convex.restruct()

                    # Log in configuration

                    login = conf['login']

                    # Check Log in

                    key_detect(login, [
                        'false_username', 'false_passphrase', 'recover',
                        'max_retry', 'retry_seconds', 'denied_method'
                    ])

                    max_retry = convert.convert_int(login['max_retry'])
                    retry_seconds = convert.convert_int(login['retry_seconds'])
                    denied_method = str(login['denied_method'])
                    false_username = str(login['false_username'])
                    false_passphrase = str(login['false_passphrase'])
                    recover = convert.convert_bool(login['recover'])

                    # Simple Honeypot configuration

                    simpleHoneypot = conf['honeypot']

                    # Check Simple Honeypot

                    key_detect(simpleHoneypot, [
                        'blacklist', 'honeypot_list', 'tools',
                        'user_agent_black_list',
                        'regular_expression_for_address',
                        'regular_expression_for_userAgent', 're_options'
                    ])

                    re_options = convert.convert_int(
                        simpleHoneypot['re_options'])
                    regular_expression_for_address = str(
                        simpleHoneypot['regular_expression_for_address'])
                    regular_expression_for_userAgent = str(
                        simpleHoneypot['regular_expression_for_userAgent'])
                    blacklist = str(simpleHoneypot['blacklist'])
                    honeypot_list = str(simpleHoneypot['honeypot_list'])
                    tools = str(simpleHoneypot['tools'])
                    user_agent_list = str(
                        simpleHoneypot['user_agent_black_list'])

                    # Server keys

                    _server_keys = wrap.read('keys', agent=wrap.USE_SERVER)

                    if (_server_keys == False):

                        logger.log(
                            'El par de claves aún no son son generados ... generando ...',
                            WAR)
                        logger.log('Tamaño a generar: "%d"' % (bit_size), PER)

                        _keys = generate_keys(bit_size)
                        (public_key, private_key) = (_keys['public_key'],
                                                     _keys['private_key'])

                        if (wrap.add('keys', _keys,
                                     agent=wrap.USE_SERVER) == True):

                            logger.log('El par de claves fueron generadas ...')
                            logger.log('Desencriptando ...')

                            try:

                                private_key = _decrypt_rsa_private_key._decrypt(
                                    private_key, rsa_passphrase)

                            except ValueError:

                                logger.log(
                                    'Error desencriptado la clave privada ...',
                                    COM)
                                exit_force()

                            else:

                                logger.log('¡Clave desencriptada!')

                        else:

                            logger.log(
                                'Error escribiendo las claves en el almacén ...',
                                COM)
                            exit_force()

                    else:

                        if (use_keys == True):

                            use_keys = False

                            (public_key,
                             private_key) = (_server_keys['public_key'],
                                             _server_keys['private_key'])

                            logger.log('Desencriptando clave privada ...')

                            try:

                                private_key = _decrypt_rsa_private_key._decrypt(
                                    private_key, rsa_passphrase)

                            except ValueError:

                                logger.log(
                                    'Error desencriptado la clave privada ...',
                                    COM)
                                exit_force()

                            else:

                                logger.log('Clave desencriptada con éxito.')

                    # Local information

                    templates = conf['templates']

                    # Check Local information

                    key_detect(templates, [
                        'folder', 'error400', 'error404', 'error403',
                        'error511', 'credentials', 'webmaster_email',
                        'error500'
                    ])

                    TEMPLATE_FOLDER = str(templates['folder'])
                    TEMPLATE_ERROR400 = '%s/%s' % (TEMPLATE_FOLDER,
                                                   templates['error400'])
                    TEMPLATE_ERROR404 = '%s/%s' % (TEMPLATE_FOLDER,
                                                   templates['error404'])
                    TEMPLATE_ERROR403 = '%s/%s' % (TEMPLATE_FOLDER,
                                                   templates['error403'])
                    TEMPLATE_ERROR511 = '%s/%s' % (TEMPLATE_FOLDER,
                                                   templates['error511'])
                    TEMPLATE_ERROR500 = '%s/%s' % (TEMPLATE_FOLDER,
                                                   templates['error500'])
                    TEMPLATE_CREDENTIALS = '%s/%s' % (TEMPLATE_FOLDER,
                                                      templates['credentials'])
                    webmaster_email = templates['webmaster_email']

                    # Server information

                    if (RPATH == 'RANDOM'):

                        RPATH = token_urlsafe(
                            convert.convert_int(
                                global_conf.token['path_max_length']))

                    if not (new_conf == True):

                        logger.log('Se actualizo la configuración!')

                    else:

                        new_conf = False

                _secret_key = wrap.read('secret_key',
                                        'secret_key',
                                        agent=wrap.USE_SECRET_KEY)

                if (_secret_key == False):

                    logger.log('Generando clave secreta ...')

                    secret_key = separate_space.separate(
                        generate_uniqkey.generate())
                    new_secret_key = True

                    if (wrap.add('secret_key', {'secret_key': secret_key},
                                 agent=wrap.USE_SECRET_KEY)):

                        logger.log(f'Clave secreta generada -> {secret_key}',
                                   PER)

                    else:

                        logger.log('Error generando la clave secreta ...', COM)
                        exit_force()

                else:

                    if (_secret_key != secret_key):

                        if (new_secret_key == False):

                            logger.log(f'Clave secreta -> {_secret_key}', PER)

                            new_secret_key = True

                        else:

                            logger.log(
                                f'Clave secreta actualizado -> {_secret_key}',
                                PER)

                        secret_key = _secret_key

                _token = wrap.read('token', 'token', agent=wrap.USE_TOKEN)

                if (_token == False):

                    logger.log('Generando un nuevo token de acceso ...')

                    token = generate_uniqkey.generate()
                    new_token = True

                    if (wrap.add('token', {'token': token},
                                 agent=wrap.USE_TOKEN)):

                        logger.log(f'Token de acceso generado -> {token}', PER)

                    else:

                        logger.log('Error generando el token de acceso ...',
                                   COM)
                        exit_force()

                else:

                    if (_token != token):

                        if (new_token == False):

                            logger.log(f'Token de acceso -> {_token}', PER)

                            new_token = True

                        else:

                            logger.log(f'Token actualizado -> {_token}', PER)

                        token = _token

            if (close == True):

                break

            else:

                init = True

            sleep(1)

        except Exception as Except:

            exit_force('Error en la configuración: "{}"'.format(Except))
示例#11
0
def check(username, passphrase, uniqkey, recover, log, address, max_retry,
          retry_seconds, denied_method, iterations, chars, decrement_number,
          security_number):

    log.logger('Verificando credenciales del administrador...', debug.INF)

    chars = str(chars)

    try:

        iterations = pos_convert.convert(int(iterations))
        decrement_number = pos_convert.convert(int(decrement_number))
        security_number = pos_convert.convert(int(security_number))

    except ValueError:

        log.logger(
            'No se introdujo un tipo de dato correcto en un parámetro ...',
            debug.COM)

        return (False)

    else:

        if (len(chars) > hashing_length['chars']):

            log.logger(
                'El número de los caracteres (%d) sobrepasa el limite (%d)' %
                (len(chars), hashing_length['chars']), debug.WAR)

            return (False)

        elif (iterations > hashing_length['iterations']):

            log.logger(
                'El número de iteraciones (%d) del cliente sobrepasa el limite (%d)'
                % (iterations, hashing_length['iterations']), debug.WAR)

            return (False)

        elif (decrement_number > hashing_length['decrement_number']):

            log.logger(
                'El número de disminución (%d) del cliente sobrepasa el limite (%d)'
                % (decrement_number, hashing_length['decrement_number']),
                debug.WAR)

            return (False)

        elif (security_number > hashing_length['security_number']):

            log.logger(
                'El número de seguridad (%d) del cliente sobrepasa el limite (%d)'
                % (security_number, hashing_length['security_number']),
                debug.WAR)

            return (False)

        else:

            log.logger(
                '¡Los datos corresponden con las limitaciones asignadas!',
                debug.INF)

    denied_method = denied_method.lower()

    agent = wrap.USE_ADMIN
    address_string = address[0]
    spam_agent = wrap.USE_SPAM_FOR_ADMINS

    username = str(username)
    passphrase = str(passphrase)
    uniqkey = str(uniqkey)

    db_passphrase = wrap.read(username,
                              'passphrase',
                              agent=agent,
                              separate=True)

    new_uniqkey = False

    if (uniqkey.lower().count(':') == 1):

        log.logger('Parece que quiere acceder con la anterior clave única ...',
                   debug.WAR)

        real_uniqkey = uniqkey.split(':')

        try:

            if not (real_uniqkey[0].lower() == 'recover'):

                log.logger('¡Uso un formato invalído!', debug.COM)

                return (False)

            uniqkey = real_uniqkey[1]

        except IndexError:

            log.logger(
                'No tiene datos suficientes para comprobar que desea usar la última clave única',
                debug.COM)

            return (False)

    else:

        real_uniqkey = False

    if not (real_uniqkey == False):

        log.logger(
            'Quiere usar la última clave para acceder y tiene un formato correcto',
            debug.INF)

        if (recover == True):

            log.logger('Va a tratar de acceder con la última clave única',
                       debug.WAR)

            db_uniqkey = wrap.read(username,
                                   'lastUniqkey',
                                   agent=agent,
                                   separate=True)

        else:

            log.logger('¡No está permitido usar la última clave única!',
                       debug.INF)

            new_uniqkey = True

    else:

        new_uniqkey = True

    if (new_uniqkey == True):

        log.logger('Usando la clave única actual', debug.INF)

        db_uniqkey = wrap.read(username, 'uniqkey', agent=agent, separate=True)

    if (db_passphrase == False) or (db_uniqkey == False):

        log.logger(
            'No se pudo obtener la clave única o la frase de contraseña',
            debug.WAR)

        return (False)

    log.logger(
        'Verificando la existencia del administrador en el almacén de los intentos fallidos ...',
        debug.INF)

    if (username in wrap.getall(agent=spam_agent)):

        log.logger('¡Correcto, el administrador existe!', debug.INF)

    else:

        log.logger(
            'El administrador no existe, almacenando un espacio en el almacén ...',
            debug.WAR)

        if (wrap.add(username, {
                'retry': 0,
                'IP': [],
                'max_time': None
        },
                     agent=spam_agent) == True):

            log.logger('Se agregó el administrador al almacén', debug.INF)

        else:

            log.logger(
                'Hubo un error agregando los datos al almacén. No se puede seguir operando',
                debug.COM)

            return (False)

    if (denied_method == 'forretry'):

        _method = wrap.read(username, 'retry', agent=spam_agent)

    elif (denied_method == 'forip'):

        try:

            _method = _extract(wrap.read(username, 'IP', agent=spam_agent),
                               address_string)[-1][2]

        except (TypeError, IndexError):

            _method = 0

    else:

        log.logger(_server_error_message, debug.INF)

        return (False)

    if (_method >= max_retry):

        if (denied_method == 'forip'):

            try:

                _result = _extract(wrap.read(username, 'IP', agent=spam_agent),
                                   address_string)[-1][1]

            except (TypeError, IndexError):

                _trans = 0

            else:

                _trans = float(_result)

        elif (denied_method == 'forretry'):

            _trans = float(wrap.read(username, 'max_time', agent=spam_agent))

        if not (time() >= _trans):

            log.logger('¡Aún no ha transcurrido el tiempo maximo registrado!',
                       debug.WAR)

        else:

            log.logger(
                'Tiempo transcurrido con exito. Reiniciando valores ...',
                debug.INF)

            if (wrap.delete(username, agent=spam_agent) == True):

                log.logger('Correcto, se reiniciaron los valores con exito',
                           debug.INF)

            else:

                log.logger('Hubo un error reiniciando los valores ...',
                           debug.COM)

                return (False)

    if (denied_method == 'forretry'):

        if (wrap.read(username, 'retry', agent=spam_agent) >= max_retry):

            log.logger(
                'Los intentos fallidos de inicio de sesión han llegado al maximo configurado ...',
                debug.WAR)

            return (False)

    elif (denied_method == 'forip'):

        try:

            _result = _extract(wrap.read(username, 'IP', agent=spam_agent),
                               address_string)[-1][2]

        except (TypeError, IndexError):

            _result = 0

        if (_result >= max_retry):

            log.logger(
                'Los intentos de inicios de sesión por parte de la dirección IP "%s" han llegado al maximo configurado ...'
                % (address_string), debug.WAR)

            return (False)

    else:

        log.logger(_server_error_message, debug.WAR)

        return (False)

    if (db_uniqkey == uniqkey) and (db_hash.compare(
            passphrase, db_passphrase, iterations, chars, security_number,
            decrement_number) == True):

        log.logger('¡La frase de contraseña o la clave única es correcta!',
                   debug.PER)

        wrap.write(username,
                   'lastLogin',
                   strftime("%H:%M:%S&%d/%m/%Y"),
                   agent=agent,
                   separate=True)
        wrap.write(username,
                   'lastUniqkey',
                   db_uniqkey,
                   agent=agent,
                   separate=True)

        return (True)

    else:

        log.logger(
            'La frase de contraseña o la clave única no es correcta ...',
            debug.COM)

        result = []
        result1 = []
        result2 = []

        _max_time = time() + retry_seconds

        if (denied_method == 'forretry'):

            _retry = int(wrap.read(username, 'retry', agent=spam_agent)) + 1

            try:

                _retry_for_ip = int(
                    _extract(wrap.read(username, 'IP', agent=spam_agent),
                             address_string)[-1][2])

            except (TypeError, IndexError):

                _retry_for_ip = 0

            result2.append(
                wrap.write(username, 'max_time', _max_time, agent=spam_agent))
            result2.append(
                wrap.write(username, 'retry', _retry, agent=spam_agent))

            if (False in result2):

                log.logger(
                    'Ocurrio un error interno. no se puede remplazar el valor de intentos fallidos',
                    debug.COM)

            return (False)

        else:

            _retry = int(wrap.read(username, 'retry', agent=spam_agent))

            try:

                _retry_for_ip = int(
                    _extract(wrap.read(username, 'IP', agent=spam_agent),
                             address_string)[-1][2]) + 1

            except (TypeError, IndexError):

                _retry_for_ip = 1

        try:

            wrap.read(username, 'IP', agent=spam_agent)[-1][0]

        except (TypeError, IndexError):

            result1.append(False)

        result1.append(
            wrap.write(username,
                       'IP',
                       _max_time,
                       agent=spam_agent,
                       target=wrap.TARGET_SUBINDEX_UPDATE,
                       array_subindex=(-1, 1)))
        result1.append(
            wrap.write(username,
                       'IP',
                       _retry_for_ip,
                       agent=spam_agent,
                       target=wrap.TARGET_SUBINDEX_UPDATE,
                       array_subindex=(-1, 2)))

        if (False in result1):

            result.append(
                wrap.write(username,
                           'IP', [address_string, _max_time, _retry_for_ip],
                           agent=spam_agent))

            if (False in result):

                log.logger('¡No se pudo agregar otro ingreso al almacén! ...',
                           debug.COM)

                return (False)

        _bak_retry = _retry if (denied_method == 'forretry') else _retry_for_ip

        log.logger(
            'Total de intentos fallidos registrados: "%d"' % (_bak_retry),
            debug.WAR)

        return (False)
示例#12
0
def check(passphrase, bot_id, log, address, max_retry, retry_seconds, denied_method, rdns, iterations, chars, decrement_number, security_number):

    passphrase = str(passphrase)
    bot_id = str(bot_id)
    chars = str(chars)

    log1 = debug.log(address=address, username='******' % (bot_id), log=log, rdns=rdns) if not (bot_id == '') else debug.log(address=address, username='******', log=log, rdns=rdns)
    log1.logger('Verificando las credenciales del rook...', debug.INF)

    try:

        iterations = pos_convert.convert(int(iterations))
        decrement_number = pos_convert.convert(int(decrement_number))
        security_number = pos_convert.convert(int(security_number))

    except (TypeError, ValueError):

        log1.logger('No se introdujo un tipo de dato correcto en un parámetro ...', debug.COM)

        return(False)

    else:

        if (len(chars) > hashing_length['chars']):

            log1.logger('El número de los caracteres (%d) sobrepasa el limite (%d)' % (len(chars), hashing_length['chars']), debug.WAR)

            return(False)

        elif (iterations > hashing_length['iterations']):

            log1.logger('El número de iteraciones (%d) del cliente sobrepasa el limite (%d)' % (iterations, hashing_length['iterations']), debug.WAR)

            return(False)

        elif (decrement_number > hashing_length['decrement_number']):

            log1.logger('El número de disminución (%d) del cliente sobrepasa el limite (%d)' % (decrement_number, hashing_length['decrement_number']), debug.WAR)

            return(False)

        elif (security_number > hashing_length['security_number']):

            log1.logger('El número de seguridad (%d) del cliente sobrepasa el limite (%d)' % (security_number, hashing_length['security_number']), debug.WAR)

            return(False)

        else:

            log1.logger('¡Los datos corresponden con las limitaciones asignadas!', debug.INF)

    denied_method = denied_method.lower()
    address_string = address[0]
    spam_agent = wrap.USE_SPAM

    db_username = wrap.read(bot_id, 'username', separate=True)
    db_passphrase = wrap.read(bot_id, 'passphrase', separate=True)

    if (db_username == False) or (db_passphrase == False):
        
        log1.logger('No se pudo obtener el Nombre de usuario o frase de contraseña', debug.WAR)

        return(False)
    
    log1.logger('Verificando la existencia del bot en el almacén de los intentos fallidos ...', debug.INF)
    
    if (bot_id in wrap.getall(agent=wrap.USE_SPAM)):

        log1.logger('¡Correcto, el bot existe!', debug.INF)

    else:

        log1.logger('El bot no existe, almacenando un espacio en el almacén ...', debug.WAR)

        if (wrap.add(bot_id, {'retry':0, 'IP':[], 'max_time':None}, agent=wrap.USE_SPAM) == True):

            log1.logger('Se agrego el bot al almacén', debug.INF)

        else:

            log1.logger('Hubo un error agregando los datos al almacén. No se puede seguir operando', debug.COM)

            return(False)

    if (denied_method == 'forretry'):

        _method = wrap.read(bot_id, 'retry', agent=spam_agent)

    elif (denied_method == 'forip'):

        try:

            _method = _extract(wrap.read(bot_id, 'IP', agent=spam_agent), address_string)[-1][2]

        except (TypeError, IndexError):

            _method = 0

    else:

        log1.logger(_server_error_message, debug.INF)

        return(False)

    if (_method >= max_retry):

        if (denied_method == 'forip'):

            try:

                _result = _extract(wrap.read(bot_id, 'IP', agent=spam_agent), address_string)[-1][1]
            
            except (TypeError, IndexError):

                _trans = 0

            else:
            
                _trans = float(_result)

        elif (denied_method == 'forretry'):

            _trans = float(wrap.read(bot_id, 'max_time', agent=spam_agent)) 

        if not (time() >= _trans):

            log1.logger('¡Aún no ha transcurrido el tiempo maximo registrado!', debug.WAR)

        else:

            log1.logger('Tiempo transcurrido con exito. Reiniciando valores ...', debug.INF)

            if (wrap.delete(bot_id, agent=spam_agent) == True):

                log1.logger('Correcto, se reiniciaron los valores con exito', debug.INF)

            else:

                log1.logger('Hubo un error reiniciando los valores ...', debug.COM)

                return(False)

    if (denied_method == 'forretry'):

        if (wrap.read(bot_id, 'retry', agent=spam_agent) >= max_retry):

            log1.logger('Los intentos fallidos de inicio de sesión han llegado al maximo configurado ...', debug.WAR)

            return(False)

    elif (denied_method == 'forip'):

        try:

            _result = _extract(wrap.read(bot_id, 'IP', agent=spam_agent), address_string)[-1][2]

        except (TypeError, IndexError):

            _result = 0

        if (_result >= max_retry):
            
            log1.logger('Los intentos de inicios de sesión por parte de la dirección IP "%s" han llegado al maximo configurado ...' % (address_string), debug.WAR)

            return(False) 

    else:

        log1.logger(_server_error_message, debug.WAR)

        return(False)

    log = debug.log(address=address, username='******' % (db_username, bot_id), log=log, rdns=rdns)

    if (db_hash.compare(passphrase, db_passphrase, iterations, chars, security_number, decrement_number) == True):

        log.logger('Credenciales correctas', debug.INF)

        return(True)

    else:

        log.logger('¡Credenciales incorrectas!', debug.COM)

        result = []
        result1 = []
        result2 = []

        _max_time = time()+retry_seconds

        if (denied_method == 'forretry'):

            _retry = int(wrap.read(bot_id, 'retry', agent=spam_agent))+1

            try:
                
                _retry_for_ip = int(_extract(wrap.read(bot_id, 'IP', agent=spam_agent), address_string)[-1][2])
            
            except (TypeError, IndexError):
                
                _retry_for_ip = 0

            result2.append(wrap.write(bot_id, 'max_time', _max_time, agent=spam_agent))
            result2.append(wrap.write(bot_id, 'retry', _retry, agent=spam_agent))

            if (False in result2):

                log.logger('Ocurrio un error interno. No se puede remplazar el valor de intentos fallidos', debug.COM)

            return(False)

        else:

            _retry = int(wrap.read(bot_id, 'retry', agent=spam_agent))
            
            try:
                
                _retry_for_ip = int(_extract(wrap.read(bot_id, 'IP', agent=spam_agent), address_string)[-1][2])+1
            
            except (TypeError, IndexError):
                
                _retry_for_ip = 1 

        try:

            wrap.read(bot_id, 'IP', agent=wrap.USE_SPAM)[-1][0]
        
        except (TypeError, IndexError):

            result1.append(False)
        
        result1.append(wrap.write(bot_id, 'IP', _max_time, agent=spam_agent, target=wrap.TARGET_SUBINDEX_UPDATE, array_subindex=(-1, 1)))
        result1.append(wrap.write(bot_id, 'IP', _retry_for_ip, agent=spam_agent, target=wrap.TARGET_SUBINDEX_UPDATE, array_subindex=(-1, 2)))

        if (False in result1):
            
            result.append(wrap.write(bot_id, 'IP', [address_string, _max_time, _retry_for_ip], agent=spam_agent))

            if (False in result):

                log.logger('¡No se pudo agregar otro ingreso al almacén! ...', debug.COM)

                return(False)

        _bak_retry = _retry if (denied_method == 'forretry') else _retry_for_ip

        log.logger('Total de intentos fallidos registrados: "%d"' % (_bak_retry), debug.WAR)

        return(False)
def execute(data, admin, log, reply):

    if not (check_values.check(data, 2) == True):

        log.logger(nomenclature_error, debug.WAR)

        return(False, None)

    else:

        if not (check_values.check(data[0], 2) == True):

            log.logger(nomenclature_error, debug.WAR)

            return(False, None)

    try:

        ((key, value), (use_nodes, node_headers)) = data

    except TypeError:

        ((key, value), use_nodes) = data
        node_headers = None

    if (reply == True):

        use_nodes = False

    admin = str(admin)
    limits = 1
    result = None
    execute = True
    error = False

    if (check_privileges.check(admin, key) == False):

        return(False, (-1, log.logger('No tiene permiso o hace falta el siguiente privilegio: "%s"' % (key), debug.COM)))

    if not (use_nodes == False):

        log.logger('Usará a Evie como el nodo de entrada ...', debug.WAR)

        if (check_privileges.check(admin, 'useNodes') == False):

            return(False, (False, log.logger('No tiene permiso de usar a Evie como el nodo de inicio ...', debug.WAR)))

        # - - - - - - - - - - - - - - - - - - - -  - - -

        try:

            check_headers.check(node_headers)

        except check_headers.InvalidHeader:

            return(False, (False, log.logger('El encabezado no es válido para la petición ...', debug.WAR)))

        nodes = wrap.read(use_nodes, 'list', agent=wrap.USE_NODE)

        if (nodes == False):

            return(False, (False, log.logger('No se encontró nodos disponibles a partir del (id)entificador proporcionado', debug.WAR)))

        wrap_nodes = {}
        end_node = nodes[-1]
        nodes_order = nodes[:-1]
        if (RULE == 'RANDOM'):
            shuffle(nodes_order)
        nodes = nodes_order + [end_node]
        node_rule = 0
        secrets_keys = [x[2] for x in nodes[:-1]]

        for _ in nodes:

            if (_[0] == nodes[0][0]):

                wrap_nodes[None] = [0, None, None]
                _first_node_url = _[0]
                _first_node_token = _[1]

                continue

            secret_key = secrets_keys[node_rule]

            if not (_[0] == end_node[0]):

                wrap_nodes[simplycrypt.encrypt(secret_key, _[0])] = [1, simplycrypt.encrypt(secret_key, _[1]), sha1(_[0].encode()).hexdigest()]
        
            else:
                
                wrap_nodes[simplycrypt.encrypt(secret_key, _[0])] = [1, None, sha1(_[0].encode()).hexdigest()]

            node_rule += 1

        _cipher = lambda string: hibrid.encrypt(string, end_node[4])

        _construct = {}
        _construct['username'] = end_node[1]
        _construct['passphrase'] = end_node[2]
        _construct['uniqkey'] = end_node[3]
        _construct['iterations'] = end_node[5]
        _construct['security_number'] = end_node[6]
        _construct['decrement_number'] = end_node[7]
        _construct['chars'] = end_node[8]
        _construct['data'] = _cipher(((key, value), False))
        _construct['reply'] = _cipher('1')
        
        response = connector.connect(_first_node_url, _first_node_token, 'resend', (wrap_nodes, _construct), log, headers=node_headers)
        response = str(response) if (response == None) else response

        if (response == False):

            log.logger('¡Ocurrio un error con la respuesta!', debug.WAR)

        else:

            log.logger('Recibido (lon:%d) ... mandando respuesta final ...' % (len(response)), debug.INF)
        
        return(response)
    
    if (key == 'listBots'):

        if (check_values.check(value, 2) == False):

            result = log.logger(nomenclature_error, debug.WAR)
            execute = False

        else:

            log.logger('Mandando lista de rook\'s ...', debug.INF)

            users = {}
            end_limit = check_int.check(value[0])
            pattern = str(value[1])

            if not (end_limit == None):

                log.logger('Indexando rook\'s ...', debug.INF)

                for bot_id, bot_name in enum_bots.enum(admin, False):

                    if (re.search(pattern, bot_name, re.IGNORECASE)):

                        users[bot_id] = bot_name
                    
                    if (limits == end_limit):

                        break
                    
                    limits += 1

                if (len(users) == 0):

                    log.logger('¡No se obtuvo ninguna coincidencia!', debug.WAR)

                else:

                    log.logger('Mandando "%d" rook\'s ...' % (len(users)), debug.PER)
                
                result = users

            else:

                result = log.logger(convert_int_error.format(value), debug.WAR)
                execute = False

    elif (key == 'getData'):

        if (check_values.check(value, 2) == False):

            result = log.logger(nomenclature_error, debug.WAR)
            execute = False

        else:

            log.logger('Mandando datos ...', debug.INF)
            
            bot_id = str(value[0])
            end_limit = check_int.check(value[1])

            if not (end_limit == None):

                if (admin_in_bot.check(admin, bot_id)):

                    log.logger('Mandando datos de: "{}" ...'.format(bot_id), debug.PER)

                    result = listOrder(bot_id, 'data', end_limit)

                else:

                    result = log.logger('No tiene permisos para obtener los datos de "{}"'.format(bot_id), debug.WAR)
                    execute = False

            else:

                result = log.logger(convert_int_error.format(value[1]), debug.WAR)
                execute = False

    elif (key == 'getCommands'):

        if (check_values.check(value, 2) == False):

            result = log.logger(nomenclature_error, debug.WAR)
            execute = False

        else:

            log.logger('Mandando comandos ...', debug.INF)

            bot_id = str(value[0])
            end_limit = check_int.check(value[1])

            if not (end_limit == None):

                if (admin_in_bot.check(admin, value[0])):

                    log.logger('Mandando comandos de: "{}"'.format(bot_id), debug.PER)

                    result = listOrder(bot_id, 'commands', end_limit)

                else:

                    result = log.logger('No tiene permisos para obtener los comandos de "{}"'.format(bot_id), debug.WAR)
                    execute = False

            else:

                result = log.logger(convert_int_error.format(value[1]), debug.WAR)
                execute = False

    elif (key == 'executeCommand'):

        if (check_values.check(value, 2) == False):

            result = log.logger(nomenclature_error, debug.WAR)
            execute = False

        else:

            bot_id = str(value[0])
            _cmd = str(value[1])

            log.logger('Agregará un comando a ser ejecutado por: "{}"'.format(bot_id), debug.PER)

            if (admin_in_bot.check(admin, bot_id)):

                # [False, command], donde "False", qué quiere decir que aún no se ejecuta ese comando

                if (wrap.write(bot_id, 'commands', [False, _cmd], separate=True) == True):

                    result = log.logger('Se agrego el comando: "{}"'.format(_cmd), debug.PER)
            
                else:

                    result = log.logger('Error agregando el comando "{}" a "{}"'.format(_cmd, bot_id), debug.COM)
                    execute = False

            else:

                result = log.logger('No tiene permiso de agregarle "{}" a "{}" ...'.format(_cmd, bot_id), debug.WAR)
                execute = False

    elif (key == 'shareBot'):
        
        if (check_values.check(value, 5) == False):

            result = log.logger(nomenclature_error, debug.WAR)
            execute = False

        else:

            bot_id = str(value[0])
            _secundaryServerAddr = str(value[1])
            _api_key = str(value[2])
            _headers = value[3]
            _shareFiles = bool(value[4])

            try:

                check_headers.check(_headers)

            except check_headers.InvalidHeader:

                result = log.logger('El encabezado no es válido para la petición ...', debug.WAR)
                execute = False

            else:

                if (check_url.check(_secundaryServerAddr, log) == False):

                    log.logger('Se va a compartir el rook: "{}" para el siguiente servidor: "{}"'.format(bot_id, _secundaryServerAddr), debug.WAR)

                    if (admin_in_bot.check(admin, bot_id)):
                        
                        response = sharebot.share(bot_id, _secundaryServerAddr, _api_key, _headers, _shareFiles, log)

                        if (response == True):

                            log.logger('Agregando servidor secundario a :: "{}"'.format(bot_id), debug.WAR)

                            _secundaryServers = wrap.read(bot_id, 'servers', separate=True)
                            _server = '%s://%s/' % (urlparse(_secundaryServerAddr).scheme, urlparse(_secundaryServerAddr).netloc)
                           
                            if not (_server in _secundaryServers):

                                _obj = wrap.getall(wrap.USE_TMP)

                                _hash_server = sha1(_secundaryServerAddr.encode()).hexdigest()

                                if not (_obj.get(_hash_server) == None):

                                    if (wrap.write(bot_id, 'servers', [_server, _obj[_hash_server]['pub_key']], separate=True) == True):

                                        result = log.logger('Agregado, servidor secundario: "{}" a "{}"'.format(_server, bot_id), debug.PER)

                                    else:


                                        execute = False
                                        result = log.logger('Error agregando el servidor secundario: "{}"'.format(_server), debug.COM)

                                else:


                                    execute = False
                                    result = log.logger('Hubo un error, no se pudo obtener la clave pública del servidor secundario: "{}"'.format(_server), debug.COM)

                            else:

                                execute = False
                                result = log.logger('¡El servidor secundario ya existe!', debug.WAR)

                        else:

                            result = log.logger('Ocurrio un error enviando el rook: "{}"'.format(response[1]), debug.WAR)
                            execute = False

                    else:

                        result = log.logger('No tiene permisos para compartir el siguiente rook "{}"'.format(bot_id), debug.WAR)
                        execute = False

                else:

                    result = log.logger('La dirección del servidor secundario no es correcta ...', debug.WAR)
                    execute = False

    elif (key == 'getToken'):
        
        log.logger('Compartiendo el token de acceso público ...', debug.INF)
        
        result = wrap.read('token', 'token', agent=wrap.USE_TOKEN)

    elif (key == 'listServers'):

        if (check_values.check(value, 2) == False):

            result = log.logger(nomenclature_error, debug.WAR)
            execute = False

        else:

            log.logger('Mandando lista de servidores secundarios ...', debug.INF)

            bot_id = str(value[0])
            end_limit = check_int.check(value[1])
            
            if not (end_limit == None):

                if (admin_in_bot.check(admin, bot_id)):
                    
                    log.logger('Enviado, lista de servidores secundarios', debug.INF)

                    result = []
                    _dat = listOrder(bot_id, 'servers', end_limit)

                    [result.append(x[0]) for x in _dat]

                else:

                    result = log.logger('No tiene permiso para obtener los servidores secundarios de "{}"'.format(bot_id), debug.WAR)
                    execute = False

            else:

                result = log.logger(convert_int_error.format(value[1]))
                execute = False

    elif (key == 'delServer'):

        if (check_values.check(value, 2) == False):

            result = log.logger(nomenclature_error, debug.WAR)
            execute = False

        else:

            log.logger('Borrara un servidor secundario ...', debug.WAR)
            
            bot_id = str(value[0])
            _index = check_int.check(value[1], False)
            
            if (_index == None):

                result = log.logger('{}, No es un indíce correcto'.format(value[1]), debug.WAR)
                execute = False

            else:

                if (admin_in_bot.check(admin, bot_id)):

                    try:

                        secundaryServer = wrap.read(bot_id, 'servers', separate=True)[_index]

                        if (wrap.write(bot_id, 'servers', _index, target=wrap.TARGET_DELETE_INDEX, separate=True) == True):

                            result = log.logger('Borro el servidor secundario: "{} - (indíce:{})"'.format(secundaryServer[0], _index), debug.COM)

                        else:

                            result = log.logger('No se puede borrar el servidor secundario ...', debug.WAR)
                            execute = False

                    except IndexError:

                        result = log.logger('Es probable que el indíce proporcionado no sea correcta para la operación ...', debug.COM)
                        execute = False

                else:

                    result = log.logger('No tiene permiso para borrar el servidor secundario de "{}"'.format(bot_id), debug.WAR)
                    execute = False

    elif (key == 'writeNodes'):

        log.logger('Escribirá nodos ...', debug.WAR)
        log.logger('Comprobando que siga la especificación acordada ...', debug.WAR)
        log.logger('Comprobando el tipo de dato ...', debug.INF)

        if not (isinstance(value, list)):

            error = True 
            log.logger('El tipo de dato no es correcto ...', debug.WAR)

        else:

            log.logger('El tipo de dato es correcto', debug.INF)

            if (len(value) < 2):

                error = True
                result = log.logger('¡La longitud de los nodos no es correcta!', debug.WAR)

            else:

                log.logger('La longitud de los nodos es correcta', debug.INF)

                _init_node = value[:-1]
                _end_node = value[-1]

                if not (isinstance(_init_node, list)) or not (isinstance(_end_node, list)):

                    error = True
                    log.logger('¡El tipo de dato de los nodos intermedios o del nodo final no es correcta!', debug.WAR)

                else:

                    if not (len(_init_node) >= 1):

                        error = True
                        log.logger('¡La longitud de los nodos intermedios no es correcta!', debug.WAR)

                    else:

                        log.logger('Comprobando longitud de los nodos intermedios individualmente ...', debug.INF)

                        if not ([] == [log.logger('¡La longitud de {} no es correcta!'.format(x), debug.WAR) for x in _init_node if (len(x) != 3)]):

                            error = True
                            result = log.logger('La longitud de un nodo intermedio no es correcta ...', debug.WAR)

                        else:

                            log.logger('La longitud de los nodos intermedios es correcta', debug.INF)
                            log.logger('Comprobando las direcciónes de los nodos intermedios ...', debug.WAR)

                            for i, _ in enumerate(_init_node):

                                log.logger('Comprobando dirección: {}'.format(_[0]), debug.WAR)

                                _url = value[i][0] = str(_[0])
                                value[i][1] = str(_[1]) 

                                error = check_url.check(_url, log)

                                if (error == True):

                                    break

                            if (error == False):

                                log.logger('Comprobando longitud del nodo final  ...', debug.WAR)

                                if not (len(_end_node) == 9):

                                    error = True
                                    result = log.logger('La longitud del nodo final no es correcta ...', debug.WAR)

                                else:

                                    log.logger('La longitud del nodo final es correcta', debug.INF)
                                    log.logger('Comprobando que no haya campos vacios ...', debug.WAR)

                                    if (True in [True for x in _end_node if (x == '')]):

                                        error = True
                                        result = log.logger('Hay campos sin definir ...', debug.WAR)

                                    else:

                                        log.logger('Comprobando la dirección del nodo final: {}'.format(_end_node[0]), debug.WAR)

                                        error = check_url.check(_end_node[0], log)

        if (error == False):

            log.logger('¡Comprobación exitosa!', debug.INF)

            _nodes = []
            log.logger('Generando (id)entificador del nodo ...', debug.INF)
            _node_id = generate_uniqkey.generate()
            log.logger('Generado: %s' % (_node_id), debug.PER)

            [_nodes.append(x[0]) for x in value]

            log.logger('Escribiendo nodos "%s" en el almacén' % (' -> '.join(_nodes)), debug.PER)

            if (wrap.add(_node_id, {'list':value}, agent=wrap.USE_NODE) == True):

                log.logger('Nodos escritos correctamente (ID:{})'.format(_node_id), debug.PER)

                result = _node_id

            else:

                result = log.logger('No se pudo escribir los nuevos nodos (ID:{})'.format(_node_id), debug.WAR)
                execute = False

        else:

            execute = False

    elif (key == 'addNode'):

        if (check_values.check(value, 2) == False):

            result = log.logger(nomenclature_error, debug.WAR)
            execute = False

        else:

            node_id = str(value[0])
            node = value[1]

            if not (isinstance(node, list)):

                result = log.logger('¡El tipo de dato del nodo no es correcto!', debug.WAR)
                execute = False

            else:

                if (len(node) != 3):

                    result = log.logger('La longitud del nodo no es correcta', debug.WAR)
                    execute = False

                else:

                    if (check_url.check(node[0], log) == True):

                        result = log.logger('¡La dirección URL no es válida!', debug.WAR)
                        execute = False

                    else:

                        if (wrap.write(node_id, 'list', node, agent=wrap.USE_NODE, target=wrap.TARGET_INSERT, index_insert=-1) == True):

                            result = log.logger('Nuevo nodo agregado: {} (ID:{})'.format(node[0], node_id), debug.PER)

                        else:

                            result = log.logger(log.logger('No se pudo agregar al nodo: "{}" (ID:{})'.format(node[0], node_id)), debug.COM)
                            execute = False

    elif (key == 'getNodes'):

        action = str(value)

        if (action.lower() == 'all'):

            log.logger('Obteniendo datos de todos los nodos', debug.INF)

            result = wrap.getall(agent=wrap.USE_NODE)

        else:

            log.logger('Obteniendo datos del nodo -> {}'.format(action), debug.PER)

            result = wrap.read(action, 'list', agent=wrap.USE_NODE)

        if not (result == False):

            log.logger('Enviando los datos de los nodos ...', debug.INF)

        else:

            result = log.logger('Error enviando los datos de los nodos', debug.COM)
            execute = False

    elif (key == 'delNodes'): 

        if (check_values.check(value, 2) == False):

            result = log.logger(nomenclature_error, debug.WAR)
            execute = False

        else:

            node = str(value[0])
            action = str(value[1])

            log.logger('Borrara nodos ...', debug.WAR)

            if (str(action).lower() == 'all'):

                log.logger('Borrando los nodos del ID: "{}"'.format(node), debug.COM)

                if (wrap.delete(node) == True):

                    result = log.logger('Borrado, todos los nodos de "{}"'.format(node), debug.WAR)

                else:

                    result = log.logger('Error borrando: "{}"'.format(node), debug.WAR)
                    execute = False
        
            else:

                _index = check_int.check(action, False)

                if not (_index == None):

                    log.logger('Verificando que haya minimo, un nodo intermedio y el nodo final, para evitar un borrado peligroso ...', debug.WAR)

                    _nodes = wrap.read(node, 'list', agent=wrap.USE_NODE)

                    if not (_nodes == False):

                        if (len(_nodes) > 2):
                            
                            if not (_index == -1) and not (_index == len(_nodes)-1):

                                _node_to_delete = _nodes[_index][0]

                                log.logger('Borrando el nodo -> {} (ID:{})'.format(_node_to_delete, node), debug.COM)

                                if (wrap.write(node, 'list', action, agent=wrap.USE_NODE, target=wrap.TARGET_DELETE_INDEX) == True):

                                    result = log.logger('Borrado: "{}" (ID:{})'.format(_node_to_delete, node), debug.WAR)

                                else:

                                    result = log.logger('Error borrando "{}" (ID:{})'.format(_node_to_delete, node), debug.COM)
                                    execute = False

                            else:

                                result = log.logger('¡No se puede borrar el nodo final!', debug.WAR)
                                execute = False

                        else:

                            result = log.logger('No puede borrar nodos, mientras haya solamente un nodo intermedio', debug.WAR)
                            execute = False

                    else:

                        result = log.logger('¡No existe el nodo especificado!', debug.WAR)
                        execute = False

                else:

                    result = log.logger(convert_int_error.format(action), debug.WAR)
                    execute = False

    elif (key == 'updateNode'):
        
        if (check_values.check(value, 4) == False):

            result = log.logger(nomenclature_error, debug.WAR)
            execute = False

        else:

            node_id = str(value[0])
            value_ = str(value[1])
            _index = check_int.check(value[2], False)
            _subindex = check_int.check(value[3], False)

            if (_index == None):

                error = True

                result = log.logger('{}, No es un indíce correcto'.format(_index), debug.WAR)

            if (_subindex == None):

                error = True

                result = log.logger('{}, No es un sub-indíce correcto'.format(_subindex), debug.WAR)

            if (error == False):

                log.logger('Actualizando nodo: "ID:{}"'.format(node_id), debug.PER)

                _get_nodes = wrap.read(node_id, 'list', agent=wrap.USE_NODE)[-1]

                if (_index == -1) or (_index == len(_get_nodes)-1):

                    if (_subindex != 0):

                        return(False, log.logger('No puedes actualizar ningún dato del nodo final al menos que sea la dirección URL', debug.WAR))

                if (_subindex == 0):

                    log.logger('Actualizará la dirección URL de un nodo...', debug.WAR)

                    if (check_url.check(value_, log) == True):

                        return(False, log.logger('La dirección URL no es válida', debug.WAR))

                if (wrap.write(node_id, 'list', value_, agent=wrap.USE_NODE, target=wrap.TARGET_SUBINDEX_UPDATE, array_subindex=(_index, _subindex)) == True):

                    result = log.logger('Nodo (ID:{}) actualizado con éxito'.format(node_id), debug.PER)

                else:

                    result = log.logger('Error actualizando el nodo: "ID:{}"'.format(node_id), debug.COM)
                    execute = False

            else:

                execute = False

    elif (key == 'access_list'):

        log.logger('Enviando lista de las fechas de inicio de sesión ..."', debug.INF)

        end_limit = check_int.check(value)

        if not (end_limit == None):
        
            result = listOrder(admin, 'lastLogin', end_limit, agent=wrap.USE_ADMIN)

        else:

            result = log.logger(convert_int_error.format(value))
            execute = False

    elif (key == 'ping'):

        log.logger('ping ... haciendo pong ...', debug.INF)

    elif (key == 'getPeers'):

        log.logger('Obtendrá todos los puntos de la red ...', debug.WAR)

        result = wrap.getall(wrap.USE_PEER)

        if (len(result) == 0):

            result = log.logger('Aún no hay nodos en la red...', debug.WAR)
            execute = False

        else:

            log.logger('Mandando %d puntos ...' % (len(result)), debug.PER)

    elif (key == 'upload'):

        if (check_values.check(value, 3) == False):

            result = log.logger(nomenclature_error, debug.WAR)
            execute = False

        else:

            _content = value[0]
            _filename = os.path.basename(str(value[1]))
            bot_id = os.path.basename(str(value[2]))

            if (admin_in_bot.check(admin, bot_id)):

                _save = '%s/%s' % (share_folder, bot_id)

                create_folder.create(_save)

                _save += '/%s' % (_filename)

                log.logger('Escribiendo archivo "{}" ...'.format(_save), debug.PER)

                _bak_save = rename_order.rename(_save)

                if not (_bak_save == False):

                    log.logger('El archivo ya existe ...', debug.WAR)

                    _save = _bak_save

                    log.logger('Renombrado a: "{}"'.format(_save), debug.PER)

                try:

                    if (cipher_file == True):

                        wrap_file.wrap(_save, wrap._new_passwd, _content)

                    else:

                        with open(_save, 'wb') as file_object:

                            file_object.write(bytes_convert.convert(_content))

                except Exception as Except:

                    result = log.logger('Ocurrio una excepción escribiendo a: "{}". Excepción: "{}"'.format(_filename, Except), debug.WAR)
                    execute = False

                else:

                    result = log.logger('El archivo "{}" fue subido satisfactoriamente ...'.format(_filename), debug.PER)

            else:

                result = log.logger('No tiene permiso para subir el archivo "{}" a el espacio de directorio de "{}"'.format(_filename, bot_id), debug.COM)
                execute = False

    elif (key == 'download'):

        if (check_values.check(value, 2) == False):

            result = log.logger(nomenclature_error, debug.WAR)
            execute = False

        else:

            _filename = os.path.basename(str(value[0]))
            bot_id = os.path.basename(str(value[1]))

            if (admin_in_bot.check(admin, bot_id)):
            
                _save = '{}/{}/{}'.format(profile_folder, bot_id, _filename)
                
                log.logger('Quiere recuperar el archivo: "{}" ...'.format(_save), debug.PER)

                if (os.path.isfile(_save)):

                    log.logger('Leyendo archivo ...', debug.INF)

                    try:

                        if (cipher_file == True):

                            result = wrap_file.wrap(_save, wrap._new_passwd)

                            if (result == False):

                                log.logger('{}, no se pudo desencriptar..., Intentando sin desencriptar...'.format(_save), debug.WAR)

                        if (result == False) or (cipher_file == False):

                            with open(_save, 'rb') as file_object:

                                result = file_object.read()

                    except Exception as Except:

                        result = log.logger('Ocurrio una excepción leyendo a: "{}". Excepción: "{}"'.format(_filename, Except), debug.WAR)
                        execute = False

                    else:

                        log.logger('Leido.', debug.INF)
                        log.logger('Enviando archivo: "{}" ...'.format(_save), debug.PER)

                else: 

                    result = log.logger('El archivo "{}" no existe ...'.format(os.path.basename(_save)), debug.WAR)
                    execute = False

            else:

                result = log.logger('No tiene permiso para descargar el archivo "{}" de "{}"'.format(os.path.basename(_save), value[1]), debug.COM)
                execute = False

    elif (key == 'sharedFiles'):

        if (check_values.check(value, 3) == False):

            result = log.logger(nomenclature_error, debug.WAR)
            execute = False

        else:

            _bot_id = os.path.basename(str(value[0]))
            end_limit = check_int.check(value[1])
            pattern = str(value[2])
            _files = '{}/{}'.format(share_folder, _bot_id)

            log.logger('Mandando lista de archivos compartidos de "{}"'.format(_bot_id), debug.WAR)

            if not (end_limit == None):

                if (os.path.isdir(_files)):

                    result = []

                    for _ in listLimit.list_(sorted(os.listdir(_files)), end_limit):

                        result.append(_) if (re.search(pattern, _, re.IGNORECASE)) else None

                    if (len(result) == 0):

                        log.logger('¡No se obtuvo ninguna coincidencia!', debug.WAR)

                    else:

                        log.logger('Mandado %d archivos ...' % (len(result)), debug.PER)

                else:

                    result = log.logger('No se ha creado el directorio compartido de: "{}"'.format(_bot_id), debug.WAR)
                    execute = False

            else:

                result = log.logger(convert_int_error.format(value[1]), debug.WAR)
                execute = False

    elif (key == 'listFiles'):

        if (check_values.check(value, 3) == False):

            result = log.logger(nomenclature_error, debug.WAR)
            execute = False

        else:
        
            _bot_id = os.path.basename(str(value[0]))
            _files = '{}/{}'.format(profile_folder, _bot_id)
            end_limit = check_int.check(value[1])
            pattern = str(value[2])

            log.logger('Mandando lista de archivos de "{}"'.format(_bot_id), debug.WAR)
            
            if not (end_limit == None):

                if (os.path.isdir(_files)):

                    result = []

                    for _ in listLimit.list_(sorted(os.listdir(_files)), end_limit):

                        result.append(_) if (re.search(pattern, _, re.IGNORECASE)) else None

                    if (len(result) == 0):

                        log.logger('¡No se obtuvo ninguna coincidencia!', debug.WAR)

                    else:

                        log.logger('Mandando %d archivos ...' % (len(result)), debug.PER)

                else:

                    result = log.logger('El directorio de perfil de "{}" no existe ...'.format(_bot_id), debug.COM)
                    execute = False

            else:

                result = log.logger(convert_int_error.format(value[1]), debug.WAR)
                execute = False

    elif (key == 'addQueue'):

        if (check_values.check(value, 3) == False):

            result = log.logger(nomenclature_error, debug.WAR)
            execute = False

        else:

            _bot_id = str(value[1])
            _command = str(value[0])
            _args = value[2]

            if (isinstance(_args, dict)):

                log.logger('Agregará un comando del sistema a la cola de: "{}"'.format(_bot_id), debug.PER)

                if (admin_in_bot.check(admin, _bot_id)):

                    if (wrap.write(_bot_id, 'Queue', [_command, _args], separate=True) == True):

                        result = log.logger('Se agregó "{}" a la cola ...'.format(_command), debug.PER)
                
                    else:

                        result = log.logger('Error agregando el comando del sistema "{}" a "{}"'.format(_command, _bot_id), debug.COM)
                        execute = False

                else:

                    result = log.logger('No tiene permiso de agregarle "{}" a "{}" ...'.format(_command, _bot_id), debug.WAR)
                    execute = False

            else:

                result = log.logger('¡El tipo de dato de los parámetros no es correcto!', debug.WAR)
                execute = False

    else:

        return(False)

    return(execute, result)
示例#14
0
            else:

                if (microseconds > max_microsecond):

                    print(
                        'Los micro-segundos se excedieron del limite permitido.'
                    )
                    sys.exit(1)

        time_ = '%d:%d:%d.%d' % (hours, minutes, seconds, microseconds)

    print('Leyendo mensajes ...')
    sleep(1)

    messages_lst = wrap.getall(wrap.USE_MESSAGE)

    if (len(messages_lst) == 0):

        print('Aún no hay mensajes...')
        sys.exit(0)

    messages = [x for x in messages_lst]
    messages = messages[:limit] if not (limit == 0) else messages

    if not (date == None) or not (time_ == None):

        result = []

        for _ in messages:
示例#15
0
            print('{}, Fue eliminado con éxito'.format(del_admin))
            sys.exit(0)

    else:

        print('El administrador no se puede borrar, porque no existe ...')
        sys.exit(1)

if (show == True):

    admins = show_user_admins.show()
    admins = admins if (limit == None) else admins[limit[0]:limit[1]]
    credentials_list = [
        x for x in [
            wrap.getall(wrap.USE_ADMIN, username=x, separate=True)
            for x in admins
        ] if not (x == False)
    ]

    if (credentials_list == []):

        print('¡No hay información acerca de los administradores!')

    else:

        for credentials in credentials_list:

            if not (rsa_password == None):

                _evalue_credentials = rsa_password_check.check(