File size: 3,490 Bytes
2303553
206ad0b
2303553
76fd605
2303553
 
206ad0b
 
ea6d989
2303553
ea6d989
2303553
 
 
 
 
76fd605
 
ea6d989
 
 
2303553
ea6d989
2303553
206ad0b
76fd605
206ad0b
 
76fd605
206ad0b
2070c08
206ad0b
e5f9727
 
206ad0b
901822a
e5f9727
 
901822a
e5f9727
901822a
 
206ad0b
 
 
 
 
2070c08
b85eeeb
2303553
206ad0b
 
 
2303553
b85eeeb
ea6d989
b783901
ea6d989
 
 
 
 
 
 
 
07c0be5
2303553
9d70e15
 
07c0be5
ea6d989
a500260
 
a6c4531
a500260
 
 
 
a6c4531
a500260
 
 
 
 
 
bde1b8e
a500260
 
 
901822a
a500260
 
 
 
 
 
 
b953771
 
 
c167925
2303553
07c0be5
b953771
 
1f4d4dd
b953771
1f4d4dd
2303553
ea6d989
661e819
ea6d989
 
 
 
 
 
 
2303553
 
 
c2f4f33
ea6d989
 
 
 
2303553
1f4d4dd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import os
import tools
import paramiko
#import compiler
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")

  #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)
  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): 
    
    with sftp.open(dir_data, 'rb') as archivo:
      # Leer el contenido del archivo como bytes
      
      contenido = archivo.read()
      # print("Imprimiendo contenido: ", contenido)
      # print("El tipo de contenido obtenido es: ", type(contenido))

      #Decodificar pq viene codificado del server (codificado en bytes) no encriptado.      
      texto = contenido.decode('utf-8')
      
      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 cierraConexion(ssh, sftp ):

  sftp.close()
  ssh.close()