Spaces:
Sleeping
Sleeping
| import os | |
| import tools | |
| import paramiko | |
| import nycklar.nodes as nodes | |
| #AVAIMET CONTIENE LAS FUNCIONES QUE INTERACTUAN CON EL SERVIDOR REMOTO. | |
| def conecta(): | |
| #Digital Signature. | |
| ssh = paramiko.SSHClient() | |
| ssh.load_host_keys("nycklar/itrst") | |
| #Future: Para usar ésto el método connnect necesitaría aceptar la pk como var string. | |
| #go = os.getenv("go") | |
| #llave = paramiko.RSAKey(data=base64.b64decode(nycklar.go.texto)) | |
| #clientPrivateKey = paramiko.RSAKey.from_private_key(nycklar.go.texto) | |
| #Ahora obtendremos nuestra secret key para poder entrar a ese servidor. | |
| project_dir = os.getcwd() | |
| #Ruta de go. | |
| key_filename = os.path.join(project_dir, "nycklar", "go") | |
| ssh.connect(nodes.realm, username=nodes.master, key_filename=key_filename) | |
| #ssh.connect(nodes.realm, username=nodes.master, pkey=llave) | |
| sftp = ssh.open_sftp() | |
| return ssh, sftp | |
| def obtenDireccionArchivo(archivo): | |
| #Archivo puede ser data.py o flagsnovelty.py | |
| # Ruta del archivo remoto (también general para todo lo que vive en holocards). | |
| ruta_remota = nodes.users_data | |
| path_archivo = ruta_remota + archivo | |
| return path_archivo | |
| def obtenContenidoArchivo(sftp, dir_data): | |
| try: | |
| with sftp.open(dir_data, 'rb') as archivo: | |
| contenido = archivo.read() | |
| texto = contenido.decode('utf-8') | |
| except Exception as e: | |
| texto = f"Error al leer el archivo: {e}" | |
| print(texto) | |
| return texto | |
| return texto | |
| def obtenCaja(userfile, env): | |
| #Codifica y descomprime el string para obtener un user. | |
| username = tools.decompileUser(userfile) | |
| # Ruta del archivo remoto | |
| ruta_remota = nodes.users_credits + env + "/" | |
| caja = ruta_remota + username + ".txt" | |
| return caja | |
| def obtenTokens(sftp, caja): | |
| with sftp.open(caja, 'rb') as archivo: | |
| # Leer el contenido del archivo como bytes | |
| contenido_bytes = archivo.read() | |
| # Decodificar los bytes a Unicode usando la codificación UTF-8 | |
| tokens = contenido_bytes.decode('utf-8') | |
| tokens = int(tokens) | |
| return tokens | |
| def autoriza(tokens, work): | |
| #print(tokens) | |
| #Standard cost. | |
| costo_tarea = 2 | |
| #Aplica reglas de cobro de tokens. | |
| #Posteriormente las equivalencias de tareas y costos vendrán de una tabla aparte. | |
| #Por ahora se definen via éste IF: | |
| if work == 'picswap': | |
| costo_tarea = 1 | |
| print(f"Work: {work}, tokens cost: {costo_tarea}") | |
| else: | |
| print("The work specified doesn't exists.") | |
| return False | |
| #Ahora evaluaremos si se tiene el suficiente crédito como para ejecutar la tarea. | |
| if tokens >= costo_tarea: | |
| #print("Tarea autorizada...") | |
| result = True | |
| else: | |
| print("Tarea no autorizada, no tienes suficientes tokens...") | |
| result = False | |
| return result | |
| def restaToken(sftp, caja, tokens, work): | |
| #Standard cost. | |
| cuantos = 2 | |
| #Aplica reglas de cobro de tokens. | |
| if work == 'picswap': | |
| cuantos = 1 | |
| print(f"Work: {work}, tokens cost: {cuantos}") | |
| else: | |
| print("The work specified doesn't exists.") | |
| # Agregar el texto "- Revisado." al string | |
| contenido_final = int(tokens) - cuantos | |
| contenido_final = str(contenido_final) | |
| # Imprimir el contenido | |
| print(contenido_final) | |
| #Actualiza el nuevo valor en el servidor en modo escritura. | |
| with sftp.open(caja, 'w') as archivo: | |
| # Escribir el contenido final en el archivo | |
| archivo.write(contenido_final) | |
| contenido_final = int(contenido_final) | |
| return contenido_final | |
| def modificaQuota(sftp, dir_quota, quota, costo_proceso): | |
| print("Éste es quota: ", quota) | |
| print("Éste es costo_proceso: ", costo_proceso) | |
| #Standard cost. | |
| #cuantos = 30 | |
| #Aplica reglas de quotas dinámicas. | |
| # if work == 'picswap': | |
| # cuantos = 1 | |
| # print(f"Work: {work}, tokens cost: {cuantos}") | |
| # else: | |
| # print("The work specified doesn't exists.") | |
| # Agregar el texto "- Revisado." al string | |
| contenido_final = int(quota) - int(costo_proceso) | |
| contenido_final = str(contenido_final) | |
| # Imprimir el contenido | |
| print(contenido_final) | |
| #Actualiza el nuevo valor en el servidor en modo escritura. | |
| with sftp.open(dir_quota, 'w') as archivo: | |
| # Escribir el contenido final en el archivo | |
| archivo.write(contenido_final) | |
| contenido_final = int(contenido_final) | |
| return contenido_final | |
| def cierraConexion(ssh, sftp ): | |
| sftp.close() | |
| ssh.close() |