Spaces:
Running
Running
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() |