Spaces:
Running
Running
Moibe
commited on
Commit
路
206ad0b
1
Parent(s):
78270c3
Ready flags, tools and globales
Browse files- avaimet.py +24 -17
- data/data.py +2 -0
- funciones.py +58 -6
- globales.py +2 -0
- main.py +2 -0
- nycklar/nodes.py +6 -5
- tools.py +16 -0
avaimet.py
CHANGED
@@ -1,9 +1,11 @@
|
|
1 |
import os
|
2 |
-
import
|
3 |
import paramiko
|
4 |
import compiler
|
5 |
import nycklar.nodes as nodes
|
6 |
|
|
|
|
|
7 |
def conecta():
|
8 |
|
9 |
#Digital Signature.
|
@@ -19,34 +21,41 @@ def conecta():
|
|
19 |
|
20 |
return ssh, sftp
|
21 |
|
22 |
-
def
|
23 |
-
#
|
|
|
|
|
24 |
ruta_remota = nodes.data
|
|
|
25 |
|
26 |
-
|
27 |
|
28 |
-
return dir_data
|
29 |
|
30 |
-
def
|
31 |
-
|
32 |
with sftp.open(dir_data, 'rb') as archivo:
|
33 |
# Leer el contenido del archivo como bytes
|
34 |
contenido = archivo.read()
|
35 |
print("Imprimiendo contenido: ", contenido)
|
36 |
print("El tipo de contenido obtenido es: ", type(contenido))
|
37 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
|
39 |
def obtenCaja(userfile):
|
40 |
|
|
|
|
|
|
|
41 |
# Ruta del archivo remoto
|
42 |
ruta_remota = nodes.avaimentekij盲
|
43 |
-
#avaimentekij盲 es el repositorio de llaves sulkuusers.
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
print("Sending to compiler.")
|
48 |
-
username = compiler.do(userfile_codificado)
|
49 |
-
print("Username is: ", username)
|
50 |
caja = ruta_remota + username + ".txt"
|
51 |
|
52 |
return caja
|
@@ -89,8 +98,6 @@ def autoriza(tokens, work):
|
|
89 |
result = False
|
90 |
|
91 |
return result
|
92 |
-
|
93 |
-
|
94 |
|
95 |
def restaToken(sftp, caja, tokens, work):
|
96 |
|
|
|
1 |
import os
|
2 |
+
import tools
|
3 |
import paramiko
|
4 |
import compiler
|
5 |
import nycklar.nodes as nodes
|
6 |
|
7 |
+
#AVAIMET CONTIENE LAS FUNCIONES QUE INTERACTUAN CON EL SERVIDOR REMOTO.
|
8 |
+
|
9 |
def conecta():
|
10 |
|
11 |
#Digital Signature.
|
|
|
21 |
|
22 |
return ssh, sftp
|
23 |
|
24 |
+
def obtenDireccionArchivo(archivo):
|
25 |
+
#Archivo puede ser data.py o flags.py
|
26 |
+
|
27 |
+
# Ruta del archivo remoto (tambi茅n general para todo lo que vive en holocards).
|
28 |
ruta_remota = nodes.data
|
29 |
+
path_archivo = ruta_remota + archivo
|
30 |
|
31 |
+
return path_archivo
|
32 |
|
|
|
33 |
|
34 |
+
def obtenContenidoArchivo(sftp, dir_data):
|
35 |
+
|
36 |
with sftp.open(dir_data, 'rb') as archivo:
|
37 |
# Leer el contenido del archivo como bytes
|
38 |
contenido = archivo.read()
|
39 |
print("Imprimiendo contenido: ", contenido)
|
40 |
print("El tipo de contenido obtenido es: ", type(contenido))
|
41 |
+
|
42 |
+
#Decodificar pq viene codificado del server (codificado en bytes) no encriptado.
|
43 |
+
texto = contenido.decode('utf-8')
|
44 |
+
print(texto)
|
45 |
+
print("El tipo de contenido obtenido es: ", type(texto))
|
46 |
+
|
47 |
+
return texto
|
48 |
|
49 |
def obtenCaja(userfile):
|
50 |
|
51 |
+
#Codifica y descomprime el string para obtener un user.
|
52 |
+
username = tools.decompileUser(userfile)
|
53 |
+
|
54 |
# Ruta del archivo remoto
|
55 |
ruta_remota = nodes.avaimentekij盲
|
56 |
+
#avaimentekij盲 es el repositorio de llaves sulkuusers.
|
57 |
+
|
58 |
+
#FUTURE: Separar en dos funciones la que compila y decompila el nombre, y la ue obtiene la caja.
|
|
|
|
|
|
|
|
|
59 |
caja = ruta_remota + username + ".txt"
|
60 |
|
61 |
return caja
|
|
|
98 |
result = False
|
99 |
|
100 |
return result
|
|
|
|
|
101 |
|
102 |
def restaToken(sftp, caja, tokens, work):
|
103 |
|
data/data.py
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
#Future, tener un sistema de data.py y flags.py locales para cuando los archivos sean muy grandes y antes de implementar una base...
|
2 |
+
#... se puedan obtener desde aqu铆.
|
funciones.py
CHANGED
@@ -1,14 +1,18 @@
|
|
1 |
-
import
|
|
|
|
|
2 |
import avaimet
|
3 |
|
4 |
-
|
5 |
|
|
|
6 |
#Genera conexi贸n inicial.
|
7 |
sshListo, sftpListo = avaimet.conecta()
|
8 |
#Obtiene la caja donde est谩 guardados los tokens.
|
9 |
-
|
|
|
10 |
#Obtiene el json con los datos.
|
11 |
-
data = avaimet.
|
12 |
#Cierra la conexi贸n.
|
13 |
avaimet.cierraConexion(sshListo, sftpListo)
|
14 |
|
@@ -69,9 +73,57 @@ def debitTokens(userfile, work):
|
|
69 |
|
70 |
return resultado_debitado
|
71 |
|
|
|
|
|
72 |
def getUserFlag(userfile):
|
73 |
-
print("Getting user flag...")
|
74 |
|
75 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
|
77 |
return flag
|
|
|
1 |
+
import ast
|
2 |
+
import tools
|
3 |
+
import globales
|
4 |
import avaimet
|
5 |
|
6 |
+
#Aqu铆 van las funciones principales, las que interactuan con el servidor est谩n en el m贸dulo avaimet.
|
7 |
|
8 |
+
def getData():
|
9 |
#Genera conexi贸n inicial.
|
10 |
sshListo, sftpListo = avaimet.conecta()
|
11 |
#Obtiene la caja donde est谩 guardados los tokens.
|
12 |
+
#Future: Ese data.py despu茅s puede viri en un globales.
|
13 |
+
dir_data = avaimet.obtenDireccionArchivo(globales.data)
|
14 |
#Obtiene el json con los datos.
|
15 |
+
data = avaimet.obtenContenidoArchivo(sftpListo, dir_data)
|
16 |
#Cierra la conexi贸n.
|
17 |
avaimet.cierraConexion(sshListo, sftpListo)
|
18 |
|
|
|
73 |
|
74 |
return resultado_debitado
|
75 |
|
76 |
+
|
77 |
+
|
78 |
def getUserFlag(userfile):
|
|
|
79 |
|
80 |
+
usuario = tools.decompileUser(userfile)
|
81 |
+
|
82 |
+
#Genera conexi贸n inicial (general para cualquier funci贸n.)
|
83 |
+
sshListo, sftpListo = avaimet.conecta()
|
84 |
+
#Obtiene la caja donde est谩 guardados las flags.
|
85 |
+
#Future: Que flags.py venga de globales.
|
86 |
+
dir_data = avaimet.obtenDireccionArchivo(globales.flags)
|
87 |
+
#Obtiene el json con los datos.
|
88 |
+
data = avaimet.obtenContenidoArchivo(sftpListo, dir_data)
|
89 |
+
|
90 |
+
# Convertir el string a una lista de tuplas utilizando ast.literal_eval()
|
91 |
+
lista_tuplas = ast.literal_eval(data)
|
92 |
+
|
93 |
+
tupla_encontrada = None # Inicializamos una variable para almacenar la tupla encontrada
|
94 |
+
|
95 |
+
for tupla in lista_tuplas:
|
96 |
+
if tupla[0] == usuario:
|
97 |
+
tupla_encontrada = tupla
|
98 |
+
break
|
99 |
+
|
100 |
+
if tupla_encontrada:
|
101 |
+
print("La tupla encontrada es:", tupla_encontrada)
|
102 |
+
else:
|
103 |
+
print("No se encontr贸 ninguna tupla con el texto especificado.")
|
104 |
+
|
105 |
+
valor_en_1 = tupla_encontrada[1]
|
106 |
+
print("Revisar si es correcto que valor_en_1 sea: ", valor_en_1)
|
107 |
+
|
108 |
+
#Cierra la conexi贸n.
|
109 |
+
avaimet.cierraConexion(sshListo, sftpListo)
|
110 |
+
#Future, 驴se puede acaso que se cierre el contenido y que haga la conversi贸n al mismo tiempo?
|
111 |
+
|
112 |
+
return lista_tuplas
|
113 |
+
|
114 |
+
|
115 |
+
|
116 |
+
|
117 |
+
|
118 |
+
|
119 |
+
|
120 |
+
|
121 |
+
|
122 |
+
|
123 |
+
|
124 |
+
|
125 |
+
|
126 |
+
|
127 |
+
|
128 |
|
129 |
return flag
|
globales.py
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
flags = "flags.py"
|
2 |
+
data = "daya.py"
|
main.py
CHANGED
@@ -3,6 +3,8 @@ import funciones
|
|
3 |
|
4 |
app = FastAPI()
|
5 |
|
|
|
|
|
6 |
@app.get("/")
|
7 |
def start():
|
8 |
|
|
|
3 |
|
4 |
app = FastAPI()
|
5 |
|
6 |
+
#Future: Correct warnings in cryptography.
|
7 |
+
|
8 |
@app.get("/")
|
9 |
def start():
|
10 |
|
nycklar/nodes.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1 |
-
master = "moibe"
|
2 |
-
realm = "opal2.opalstack.com"
|
3 |
-
avaimentekij盲 = "/home/moibe/apps/holocards/sulkusers/"
|
4 |
-
data = "/home/moibe/apps/holocards/sulku-data/"
|
5 |
-
key=b'kiSHsm7Y0hbyNdcFIav6OMT39gi29nIzT-rCrr0Tyc8='
|
|
|
6 |
user=b'gAAAAABmEZA4SLBC2YczouOrjIEi9WNCNGOIvyUcqBUnzxNsftXTdy54KaX9x8mAjFkABSI6FJrdZDQKk_5lpJOgJoMChxlniw=='
|
|
|
1 |
+
master = "moibe"
|
2 |
+
realm = "opal2.opalstack.com"
|
3 |
+
avaimentekij盲 = "/home/moibe/apps/holocards/sulkusers/"
|
4 |
+
data = "/home/moibe/apps/holocards/sulku-data/"
|
5 |
+
key=b'kiSHsm7Y0hbyNdcFIav6OMT39gi29nIzT-rCrr0Tyc8='
|
6 |
+
#Ese usuario codificado lo podemos usar principalmente de ejemplo, ya no vienen de aqu铆, es oldballs.
|
7 |
user=b'gAAAAABmEZA4SLBC2YczouOrjIEi9WNCNGOIvyUcqBUnzxNsftXTdy54KaX9x8mAjFkABSI6FJrdZDQKk_5lpJOgJoMChxlniw=='
|
tools.py
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import compiler
|
2 |
+
|
3 |
+
#Tools son herramientas adicionales que usan todos.
|
4 |
+
|
5 |
+
def decompileUser(userfile):
|
6 |
+
|
7 |
+
print("Encoding...")
|
8 |
+
#Con 茅sta acci贸n de encode lo que est谩 haciendo es agregarle la 'b, o sea lo vuelve al tipo q necesitamos pero no modifica los datos.
|
9 |
+
userfile_codificado = userfile.encode("utf-8")
|
10 |
+
|
11 |
+
#Ahora si 茅sta parte va a convertir el string largo en el verdadero nombre de usuario.
|
12 |
+
print("Sending to compiler.")
|
13 |
+
username = compiler.do(userfile_codificado)
|
14 |
+
print("Username is: ", username)
|
15 |
+
|
16 |
+
return username
|