Spaces:
Sleeping
Sleeping
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
|