File size: 5,366 Bytes
9cc66e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as BaseBuilder
from PIL import Image
import json


class Page():
    def __init__(self):
        self.__ = BaseBuilder
        self.imgg = Image

    def page(self):
        return self.__

    def new_page(self, title: str, icon=str(), color_divider="rainbow"):
        self.page().set_page_config(page_title=title,
                                    page_icon=icon,
                                    layout="wide")
        self.page().title(f"Clasificación de imágenes con Visión Artificial",
                          anchor="titulo-proyecto",
                          help=None)
        self.page().subheader(f"{title} {icon}",
                              anchor="titulo-pagina",
                              divider=color_divider,
                              help=None)
        self.check_password()

    def new_body(self, new=False):
        self.__body = BaseBuilder.empty() if new else self.page().container()

    def get_body(self):
        return self.__body

    def init_globals(self, globals=dict({})):
        for _k, _v in globals.items():
            if self.get_global(_k,None) is None:
                self.set_global(_k, _v)

    def set_global(self, key=str(), value=None):
        self.page().session_state[key] = value

    def get_global(self, key=str(), default=None, is_secret=False):
        if is_secret:
            return self.page().secrets.get(key, default)
        else:
            return self.page().session_state.get(key, default)

    def cargar_css(self, archivo_css=str("default")):
        ruta = f"core/estilos/{archivo_css}.css"
        try:
            with open(ruta) as archivo:
                self.page().markdown(
                    f'<style>{archivo.read()}</style>', unsafe_allow_html=True)
        except Exception as er:
            print(f"Error:\n{er}")

    def check_password(self):
        if self.user_logged_in():
            self.page().sidebar.success("👨‍💻 Conectado")
            self.page().sidebar.button("Logout", use_container_width=True,
                                       type="primary", on_click=self.logout)
            return True
        else:
            self.page().sidebar.subheader("# ¡👨‍💻 Desbloquea todas las funciones!")
            self.page().sidebar.write("¡Ingresa tu Usuario y Contraseña!")
            self.page().sidebar.text_input("Usuario", value="",
                                           on_change=self.login, key="USUARIO")
            self.page().sidebar.text_input("Password", type="password",
                                           on_change=self.login, key="PASSWORD", value="")
            self.page().sidebar.button("LogIn", use_container_width=True, on_click=self.login)
            return False

    def user_logged_in(self):
        return self.get_global('logged_in', False)

    def login(self):
        _config = self.get_global('PRIVATE_CONFIG', dict({}), True)
        _usuario = self.get_global("USUARIO")
        _registros = self.get_global("registros", None, True)
        _factor = int(_config['FPSSWD'])
        if self.codificar(_usuario, _factor) in _registros:
            if self.codificar(self.get_global("PASSWORD"), _factor) == _registros[self.codificar(_usuario, _factor)]:
                del self.page().session_state["USUARIO"]
                del self.page().session_state["PASSWORD"]
                self.set_global('hf_key', _config['HUGGINGFACE_KEY'])
                self.set_global('logged_in', True)
            else:
                self.logout("😕 Ups! Contraseña Incorrecta")
        else:
            self.logout("😕 Ups! Nombre de Usuario Incorrecto")

    def logout(self, mensaje=str("¡Vuelva Pronto!")):
        self.page().sidebar.error(mensaje)
        self.set_global('hf_key')
        self.set_global('logged_in')

    @staticmethod
    def codificar(palabra=str(), modificador=None):
        # Acepta:
        # ABCDEFGHIJKLMNOPQRSTUVWXYZ
        # abcdefghijklmnopqrstuvwxyz
        # 1234567890!#$-_=%&/()*[]
        codigo = str()
        try:
            for _byte in bytearray(palabra.strip(), 'utf-8'):
                # x = f(y) => la variable 'x' estará en función de la variable 'y'
                # Si ... f(y) = y² * k     => donde:
                # x es el valor decimal del input en bytes
                # modificador es un número real variable, definido por el usuario
                _y = int(format(_byte, 'b'), 2)
                _x = int(pow(_y, 2) * modificador)
                # magia
                codigo = f" {bin(_x)}{codigo}"
        except Exception as error:
            print(f"Error Codificando:\n{error}")
        return codigo.strip()

    @staticmethod
    def decodificar(codigo=str(), modificador=None):
        # SOLO DECODIFICA SU ECUACIÓN INVERSA...
        palabra = str()
        try:
            for _byte_str in codigo.strip().split(' '):
                # entonces...podemos decir que y = √(x/k)
                # es su ecuación inversa correspondiente
                _x = int(_byte_str, 2)
                _y = int(pow((_x/modificador), 1/2))
                letra = _y.to_bytes(_y.bit_length(), 'big').decode()
                # magia
                palabra = f"{letra}{palabra}"
        except Exception as error:
            print(f"Error Decodificando:\n{error}")
        return palabra.stip()