-
Notifications
You must be signed in to change notification settings - Fork 0
/
avaimet.py
161 lines (118 loc) · 4.43 KB
/
avaimet.py
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
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()