iatoolkit 0.60.1__py3-none-any.whl → 0.61.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of iatoolkit might be problematic. Click here for more details.

@@ -1,24 +1,22 @@
1
1
  {% extends "base.html" %}
2
2
 
3
- {% block title %}Recuperar Contraseña - {{ company.name }}{% endblock %}
3
+ {% block title %}Recuperar Contraseña - {{ branding.name }}{% endblock %}
4
4
 
5
- {% block content %}
6
- <!-- 1. Incluimos los estilos de branding reutilizables -->
7
- {% include '_branding_styles.html' %}
8
-
9
- <!-- Enlazamos la hoja de estilos de la landing page para reutilizar estilos -->
10
- <link rel="stylesheet" href="{{ iatoolkit_base_url }}/static/styles/landing_page.css">
5
+ {% block styles %}
6
+ <style>{{ branding.css_variables | safe }}</style>
7
+ <link rel="stylesheet" href="{{ url_for('static', filename='styles/chat_iatoolkit.css') }}">
8
+ {% endblock %}
11
9
 
12
- <!-- 2. Incluimos la barra de navegación reutilizable -->
13
- {% include '_navbar.html' %}
10
+ {% block content %}
11
+ {% include '_company_header.html' %}
14
12
 
15
13
  <!-- 3. Sección contenedora para centrar el contenido -->
16
14
  <section class="hero-section">
17
15
  <div class="container">
18
16
  <div class="row justify-content-center">
19
17
  <div class="col-lg-6 col-md-8">
20
- <div class="border rounded p-4 p-md-5 shadow-sm bg-light">
21
- <h4 class="form-title fw-bold mb-3 text-center">Recuperar Contraseña</h4>
18
+ <div class="branded-form-container">
19
+ <h4 class="branded-form-title">Recuperar Contraseña</h4>
22
20
 
23
21
  <p class="text-muted text-center mb-4">
24
22
  Ingresa tu correo electrónico y te enviaremos un enlace para restablecer tu contraseña.
@@ -36,7 +34,7 @@
36
34
  </form>
37
35
 
38
36
  <div class="text-center mt-4 pt-3" style="border-top: 1px solid #e0e0e0;">
39
- <a href="{{ url_for('index', company_short_name=company_short_name) }}" class="text-muted text-decoration-none fw-semibold">
37
+ <a href="{{ url_for('home', company_short_name=company_short_name) }}" class="text-muted text-decoration-none fw-semibold">
40
38
  <i class="bi bi-arrow-left me-1"></i>Volver al inicio
41
39
  </a>
42
40
  </div>
@@ -0,0 +1,80 @@
1
+ {% extends "base.html" %}
2
+
3
+ {% block title %}{{ branding.name }} - Inicio{% endblock %}
4
+
5
+ {% block styles %}
6
+ {# Carga las variables de CSS personalizadas de la empresa #}
7
+ <style>
8
+ {{ branding.css_variables | safe }}
9
+ </style>
10
+ {% endblock %}
11
+
12
+ {% block content %}
13
+ {% include '_company_header.html' %}
14
+
15
+ {# Contenido principal con la propuesta de valor y el widget de login #}
16
+ <div class="container my-4 my-md-5">
17
+ <div class="row align-items-center g-5">
18
+
19
+ {# Columna de la propuesta de valor #}
20
+ <div class="col-lg-7">
21
+ <h1 class="branded-headline mb-3">Inteligencia Artificial con nuestros propios datos</h1>
22
+ <p class="lead text-muted">
23
+ Hemos diseñado este asistente de inteligencia artificial, entrenado exclusivamente con el conocimiento y los datos de Sample Company, para ser tu principal punto de apoyo. Olvídate de buscar en múltiples sistemas; ahora puedes obtener respuestas precisas y agilizar tus tareas en un solo lugar.
24
+ </p>
25
+ <ul class="list-unstyled mt-4 fs-5">
26
+ <li class="mb-2"><i class="bi bi-check-circle-fill text-branded-primary me-2"></i>Consulta al instante políticas internas, manuales de procedimientos y la documentación de cualquier proyecto.</li>
27
+ <li class="mb-2"><i class="bi bi-check-circle-fill text-branded-primary me-2"></i>Genera resúmenes de informes, redacta borradores de correos electrónicos o traduce documentos con total seguridad.</li>
28
+ <li class="mb-2"><i class="bi bi-check-circle-fill text-branded-primary me-2"></i>Acelera tus proyectos encontrando rápidamente al experto o equipo correcto para cada consulta.</li> </ul>
29
+ </div>
30
+
31
+ {# Columna del widget de inicio de sesión #}
32
+ <div class="col-lg-5">
33
+ <div class="branded-form-container">
34
+ <h4 class="branded-form-title">Iniciar Sesión</h4>
35
+
36
+ <!-- 1. Encabezado de Marketing -->
37
+ <div class="text-center mb-4">
38
+ <p class="text-muted widget-intro-text">
39
+ Ingresa tus credenciales para acceder a la plataforma de {{ branding.name }}.
40
+ </p>
41
+ </div>
42
+
43
+ <!-- 2. Formulario de Inicio de Sesión -->
44
+ <form id="login-form"
45
+ action="{{ url_for('login', company_short_name=company_short_name) }}"
46
+ method="post">
47
+ <div class="mb-3">
48
+ <label for="email" class="form-label d-block">Correo Electrónico</label>
49
+ <input type="email" id="email" name="email" class="form-control"
50
+ required value="{{ form_data.email if form_data is defined else '' }}">
51
+ </div>
52
+ <div class="mb-3">
53
+ <label for="password" class="form-label d-block">Contraseña</label>
54
+ <input type="password" id="password" name="password"
55
+ class="form-control" required>
56
+ </div>
57
+ <button type="submit" class="btn btn-branded-primary w-100 fw-bold py-2">
58
+ Iniciar Sesión
59
+ </button>
60
+ </form>
61
+
62
+ <!-- 3. Nueva Sección de Registro más Atractiva -->
63
+ <div class="mt-4 pt-3 text-center" style="border-top: 1px solid #e0e0e0;">
64
+ <span class="text-muted small">¿Eres nuevo aquí?</span>
65
+ <a href="{{ url_for('signup', company_short_name=company_short_name) }}" id="signup-link" class="fw-bold ms-1 text-decoration-none" style="color: var(--brand-primary-color);">Crea una cuenta gratis</a>
66
+ </div>
67
+
68
+ <!-- 4. Enlace de Recuperación de Contraseña (más sutil) -->
69
+ <div class="text-center mt-2">
70
+ <a href="{{ url_for('forgot_password', company_short_name=company_short_name) }}" class="text-decoration-none text-muted" style="font-size: 0.8rem;">
71
+ ¿Olvidaste tu contraseña?
72
+ </a>
73
+ </div>
74
+ </div>
75
+ </div>
76
+
77
+ </div>
78
+ </div>
79
+
80
+ {% endblock %}
@@ -1,71 +1,72 @@
1
1
  {% extends "base.html" %}
2
2
 
3
- {% block title %}IAToolkit{% endblock %}
3
+ {% block title %}IAToolkit - Asistente Inteligente Personalizable{% endblock %}
4
4
 
5
- {% block content %}
6
-
7
- <!-- Incluimos los estilos de branding reutilizables -->
8
- {% include '_branding_styles.html' %}
5
+ {% block styles %}
6
+ {# Enlazamos la hoja de estilos del website y los iconos de Bootstrap #}
7
+ <link rel="stylesheet" href="{{ url_for('static', filename='styles/landing_page.css') }}">
8
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
9
+ {% endblock %}
9
10
 
10
- <!-- Enlazamos la hoja de estilos de la landing page -->
11
- <link rel="stylesheet" href="{{ iatoolkit_base_url }}/static/styles/landing_page.css">
12
11
 
13
- <!-- 1. Barra de Navegación (sin cambios) -->
14
- <nav class="navbar landing-navbar">
15
- <div class="container-fluid">
16
- <span class="navbar-brand">IAToolkit</span>
12
+ {% block content %}
13
+ <!-- 1. Encabezado con una clase 100% propia y única -->
14
+ <header class="website-header">
15
+ <div class="container">
16
+ <span class="website-brand">IAToolkit</span>
17
17
  </div>
18
- </nav>
18
+ </header>
19
19
 
20
- <!-- 2. Sección Principal (sin cambios) -->
20
+ <!-- 2. Sección Principal (Hero) -->
21
21
  <section class="hero-section">
22
22
  <div class="container">
23
- <div class="row align-items-center">
23
+ <div class="row align-items-center g-5 py-5">
24
24
  <div class="col-lg-7">
25
- <div class="value-proposition">
26
- <h1 class="hero-title gradient-text">IA que entiende tu <span class="text-dark">negocio</span> desde el primer día.</h1>
27
-
28
- </div>
29
- <ul class="hero-bullets">
30
- <li><i class="bi bi-database"></i> Conecta tus bases de datos, APIs y documentos.</li>
25
+ <h1 class="hero-title gradient-text">IA que entiende tu negocio desde el primer día.</h1>
26
+ <ul class="hero-bullets mt-4">
27
+ <li><i class="bi bi-hdd-stack"></i> Conecta tus bases de datos, APIs y documentos.</li>
31
28
  <li><i class="bi bi-chat-dots"></i> Construye un asistente que entiende el lenguaje de tu empresa.</li>
32
29
  <li><i class="bi bi-rocket-takeoff"></i> Despliega donde quieras, con tu marca y tus reglas.</li>
33
30
  </ul>
34
31
  </div>
35
32
  <div class="col-lg-5">
36
- {% include '_login_widget.html' %}
33
+ <div class="border rounded-3 p-4 p-md-5 shadow-sm bg-light">
34
+ <h3 class="fw-bold text-center mb-3">Prueba la Plataforma</h3>
35
+ <p class="text-muted text-center mb-4">
36
+ Explora una versión de demostración completamente funcional para ver el asistente en acción.
37
+ </p>
38
+ <div class="d-grid">
39
+ {# Este botón usa la clase .btn-primary, que es estilizada por .hero-section .btn-primary en el CSS #}
40
+ <a href="{{ url_for('home', company_short_name='sample_company') }}"
41
+ class="btn btn-primary btn-lg fw-bold">
42
+ Acceder a la Demo
43
+ </a>
44
+ </div>
45
+ </div>
37
46
  </div>
38
47
  </div>
39
48
  </div>
40
49
  </section>
41
50
 
42
- <!-- 3. Sección de Características con 6 recuadros -->
51
+ <!-- 3. Sección de Características -->
43
52
  <section class="features-section">
44
53
  <div class="container">
45
- <!-- Primera Fila de Características -->
46
54
  <div class="row g-4">
47
- <!-- Feature 1: GitHub / Open Source -->
48
55
  <div class="col-lg-4 d-flex align-items-stretch">
49
56
  <div class="opensource-box">
50
57
  <div>
51
58
  <div class="opensource-icon"><i class="bi bi-github"></i></div>
52
- <div class="opensource-content">
53
- <h3>100% Open Source</h3>
54
- <p>Construido en Python, IAToolkit te da control total. Audita el código, adáptalo y contribuye a una comunidad en crecimiento.</p>
55
-
56
- <a href="https://github.com/flibedinsky/iatoolkit" target="_blank" class="btn btn-light">
57
- <i class="bi bi-github me-2"></i>Ir a GitHub
58
- {% if iatoolkit_version %}
59
- <span class="badge bg-dark ms-2">{{ iatoolkit_version }}</span>
60
- {% endif %}
61
- </a>
62
- </div>
59
+ <h3>100% Open Source</h3>
60
+ <p>Construido en Python, IAToolkit te da control total. Audita el código, adáptalo y contribuye a una comunidad en crecimiento.</p>
63
61
  </div>
64
-
62
+ <a href="https://github.com/flibedinsky/iatoolkit" target="_blank" class="btn btn-light mt-auto">
63
+ <i class="bi bi-github me-2"></i>Ir a GitHub
64
+ {% if iatoolkit_version %}
65
+ <span class="badge bg-dark ms-2">{{ iatoolkit_version }}</span>
66
+ {% endif %}
67
+ </a>
65
68
  </div>
66
69
  </div>
67
-
68
- <!-- Feature 4: Conectividad -->
69
70
  <div class="col-lg-4 d-flex align-items-stretch">
70
71
  <div class="feature-item">
71
72
  <div class="feature-icon"><i class="bi bi-hdd-stack"></i></div>
@@ -73,8 +74,6 @@
73
74
  <p>Integra tus bases de datos SQL, documentos (PDFs, TXT) y otros sistemas para que el asistente tenga un contexto real de tu negocio.</p>
74
75
  </div>
75
76
  </div>
76
-
77
- <!-- Feature 2: Multi-LLM -->
78
77
  <div class="col-lg-4 d-flex align-items-stretch">
79
78
  <div class="feature-item">
80
79
  <div class="feature-icon"><i class="bi bi-gem"></i></div>
@@ -82,10 +81,7 @@
82
81
  <p>No te ates a un solo proveedor. IAToolkit está diseñado para funcionar con diferentes modelos, incluyendo Gemini y OpenAI (GPT).</p>
83
82
  </div>
84
83
  </div>
85
-
86
84
  </div>
87
-
88
- <!-- Segunda Fila de Características -->
89
85
  <div class="row g-4 mt-4">
90
86
  <div class="col-lg-4 d-flex align-items-stretch">
91
87
  <div class="feature-item">
@@ -94,17 +90,13 @@
94
90
  <p>Crea, gestiona y comparte una librería de prompts personalizados para tu empresa, optimizando las tareas repetitivas.</p>
95
91
  </div>
96
92
  </div>
97
- <!-- Feature 6: Personalización -->
98
93
  <div class="col-lg-4 d-flex align-items-stretch">
99
94
  <div class="feature-item">
100
95
  <div class="feature-icon"><i class="bi bi-palette"></i></div>
101
96
  <h3>100% Personalizable</h3>
102
- <p>Desde la apariencia visual hasta las capacidades y herramientas del asistente,
103
- adapta cada aspecto para que se alinee con la identidad de tu marca.</p>
97
+ <p>Adapta cada aspecto, desde la apariencia visual hasta las capacidades y herramientas del asistente, para que se alinee con la identidad de tu marca.</p>
104
98
  </div>
105
99
  </div>
106
-
107
- <!-- Feature 5: Seguridad -->
108
100
  <div class="col-lg-4 d-flex align-items-stretch">
109
101
  <div class="feature-item">
110
102
  <div class="feature-icon"><i class="bi bi-shield-lock"></i></div>
@@ -112,49 +104,40 @@
112
104
  <p>Despliega IAToolkit en tus propios servidores. Tus datos y consultas nunca son compartidos con terceros, garantizando la máxima confidencialidad.</p>
113
105
  </div>
114
106
  </div>
115
-
116
107
  </div>
117
108
  </div>
118
109
  </section>
119
110
 
120
111
  <!-- 3.5 Sobre el Autor -->
121
112
  <section class="author-section py-5">
122
- <div class="container">
123
- <div class="author-card p-4">
124
- <div class="row align-items-center g-4">
125
- <!-- Columna para la Imagen -->
126
- <div class="col-md-2 text-center">
127
- <img src="{{ url_for('static', filename='images/fernando.jpeg') }}" alt="Foto de Fernando Libedinsky" class="img-fluid rounded-circle" style="max-width: 120px;">
128
- </div>
129
- <!-- Columna para el Texto -->
130
- <div class="col-md-10">
131
- <div class="d-flex flex-wrap align-items-center mb-2">
132
- <h5 class="mb-0 me-3" style="color: var(--brand-primary-color);">Sobre el autor</h5>
133
- <a href="https://www.linkedin.com/in/fernandolibedinsky" target="_blank" rel="noopener" class="author-linkedin ms-auto">
134
- <i class="bi bi-linkedin me-1"></i> LinkedIn
135
- </a>
136
- </div>
137
- <p class="author-bio mb-0">
138
- Soy <strong>Fernando Libedinsky</strong>, ingeniero de software y creador de <strong>IAToolkit</strong>.
139
- <br>Tras una extensa trayectoria en el desarrollo de software, sigo movido por la misma curiosidad que me llevó a programar por primera vez: aprender, explorar y construir cosas nuevas.
140
- <br>IAToolkit es la continuación de ese impulso, una plataforma creada para conectar rapidamente empresas con la inteligencia artificial.
141
- </p>
113
+ <div class="container">
114
+ <div class="author-card p-4">
115
+ <div class="row align-items-center g-4">
116
+ <div class="col-md-2 text-center">
117
+ <img src="{{ url_for('static', filename='images/fernando.jpeg') }}" alt="Foto de Fernando Libedinsky" class="img-fluid rounded-circle" style="max-width: 120px;">
118
+ </div>
119
+ <div class="col-md-10">
120
+ <div class="d-flex flex-wrap align-items-center mb-2">
121
+ <h5 class="mb-0 me-3">Sobre el autor</h5>
122
+ <a href="https://www.linkedin.com/in/fernandolibedinsky" target="_blank" rel="noopener" class="author-linkedin ms-auto">
123
+ <i class="bi bi-linkedin me-1"></i> LinkedIn
124
+ </a>
142
125
  </div>
126
+ <p class="author-bio mb-0">
127
+ Soy <strong>Fernando Libedinsky</strong>, ingeniero de software y creador de <strong>IAToolkit</strong>.
128
+ <br>Tras una extensa trayectoria en el desarrollo de software, sigo movido por la misma curiosidad que me llevó a programar por primera vez: aprender, explorar y construir cosas nuevas.
129
+ <br>IAToolkit es la continuación de ese impulso, una plataforma creada para conectar rapidamente empresas con la inteligencia artificial.
130
+ </p>
143
131
  </div>
144
132
  </div>
145
133
  </div>
146
- </section>
147
-
134
+ </div>
135
+ </section>
148
136
 
149
- <!-- 4. Footer (sin cambios) -->
137
+ <!-- 4. Footer -->
150
138
  <footer class="landing-footer">
151
139
  <div class="container">
152
- &copy; IAToolkit - Proyecto Open Source
140
+ &copy; 2024 IAToolkit - Proyecto Open Source
153
141
  </div>
154
142
  </footer>
155
-
156
- {% endblock %}
157
-
158
- {% block scripts %}
159
- <!-- No se necesita JavaScript aquí para la funcionalidad de la página -->
160
143
  {% endblock %}
@@ -1,16 +1,18 @@
1
1
  {% extends "base.html" %}
2
2
 
3
- {% block title %}Registro de Usuario - {{ company.name }}{% endblock %}
3
+ {% block title %}Crear Cuenta - {{ branding.name }}{% endblock %}
4
4
 
5
- {% block content %}
6
- <!-- 1. Incluimos los estilos de branding reutilizables -->
7
- {% include '_branding_styles.html' %}
5
+ {% block styles %}
6
+ {# ¡Importante! Añadimos los estilos para el branding #}
7
+ <style>
8
+ {{ branding.css_variables | safe }}
9
+ </style>
10
+ <link rel="stylesheet" href="{{ url_for('static', filename='styles/chat_iatoolkit.css') }}">
11
+ {% endblock %}
8
12
 
9
- <!-- Enlazamos la hoja de estilos de la landing page para reutilizar estilos -->
10
- <link rel="stylesheet" href="{{ iatoolkit_base_url }}/static/styles/landing_page.css">
13
+ {% block content %}
14
+ {% include '_company_header.html' %}
11
15
 
12
- <!-- 2. Incluimos la barra de navegación reutilizable -->
13
- {% include '_navbar.html' %}
14
16
 
15
17
  <!-- 3. Sección contenedora para centrar el contenido -->
16
18
  <section class="hero-section">
@@ -18,8 +20,8 @@
18
20
  <div class="row justify-content-center">
19
21
  <!-- Se ha reducido el ancho de la columna a lg-6 y md-8 -->
20
22
  <div class="col-lg-6 col-md-8">
21
- <div class="border rounded p-4 p-md-5 shadow-sm bg-light">
22
- <h4 class="form-title fw-bold mb-3 text-center">Crea tu cuenta en {{ company.name }}</h4>
23
+ <div class="branded-form-container">
24
+ <h4 class="branded-form-title">Crea tu cuenta en {{ company.name }}</h4>
23
25
  <form action="{{ url_for('signup', company_short_name=company_short_name) }}" method="post">
24
26
  <div class="mb-3">
25
27
  <label for="email" class="form-label text-secondary">Correo Electrónico</label>
@@ -91,7 +91,7 @@ class ChangePasswordView(MethodView):
91
91
  # Éxito: Guardar mensaje en sesión y redirigir
92
92
  session['alert_message'] = "Tu contraseña ha sido restablecida exitosamente. Ahora puedes iniciar sesión."
93
93
  session['alert_icon'] = 'success'
94
- return redirect(url_for('index', company_short_name=company_short_name))
94
+ return redirect(url_for('home', company_short_name=company_short_name))
95
95
 
96
96
  except Exception as e:
97
97
  return render_template("error.html",
@@ -60,7 +60,7 @@ class ForgotPasswordView(MethodView):
60
60
  # Guardamos el mensaje y el icono en la sesión manualmente
61
61
  session['alert_message'] = "Si tu correo está registrado, recibirás un enlace para restablecer tu contraseña."
62
62
  session['alert_icon'] = "success"
63
- return redirect(url_for('index', company_short_name=company_short_name))
63
+ return redirect(url_for('home', company_short_name=company_short_name))
64
64
 
65
65
  except Exception as e:
66
66
  return render_template("error.html",
@@ -0,0 +1,43 @@
1
+ # iatoolkit/views/home_view.py
2
+
3
+ from flask import render_template, abort, session
4
+ from flask.views import MethodView
5
+ from injector import inject
6
+ from iatoolkit.services.profile_service import ProfileService
7
+ from iatoolkit.services.branding_service import BrandingService
8
+
9
+
10
+ class HomeView(MethodView):
11
+ """
12
+ Handles the rendering of the company-specific home page with a login widget.
13
+ """
14
+
15
+ @inject
16
+ def __init__(self,
17
+ profile_service: ProfileService,
18
+ branding_service: BrandingService):
19
+ self.profile_service = profile_service
20
+ self.branding_service = branding_service
21
+
22
+ def get(self, company_short_name: str):
23
+ company = self.profile_service.get_company_by_short_name(company_short_name)
24
+
25
+ if not company:
26
+ abort(404, description=f"La empresa '{company_short_name}' no fue encontrada.")
27
+
28
+ # Obtener los datos de branding para la plantilla
29
+ branding_data = self.branding_service.get_company_branding(company)
30
+
31
+ # Recuperar y limpiar cualquier mensaje de alerta de la sesión
32
+ alert_message = session.pop('alert_message', None)
33
+ alert_icon = session.pop('alert_icon', 'error')
34
+
35
+ # Renderizar la nueva plantilla home.html
36
+ return render_template(
37
+ 'home.html',
38
+ company=company,
39
+ company_short_name=company_short_name,
40
+ branding=branding_data,
41
+ alert_message=alert_message,
42
+ alert_icon=alert_icon
43
+ )
@@ -1,43 +1,14 @@
1
1
  # iatoolkit/views/index_view.py
2
2
 
3
- from flask import render_template, abort, session
3
+ from flask import render_template, session
4
4
  from flask.views import MethodView
5
- from injector import inject
6
- from iatoolkit.services.profile_service import ProfileService
7
- from iatoolkit.services.branding_service import BrandingService
8
5
 
9
6
 
10
7
  class IndexView(MethodView):
11
8
  """
12
- Handles the rendering of the company-specific landing page.
9
+ Handles the rendering of the generic landing page, which no longer depends
10
+ on a specific company.
13
11
  """
14
12
 
15
- @inject
16
- def __init__(self,
17
- profile_service: ProfileService,
18
- branding_service: BrandingService):
19
- self.profile_service = profile_service
20
- self.branding_service = branding_service
21
-
22
- def get(self, company_short_name: str):
23
- # La vista ahora recibe el company_short_name desde la URL
24
- company = self.profile_service.get_company_by_short_name(company_short_name)
25
-
26
- if not company:
27
- abort(404, description=f"La empresa '{company_short_name}' no fue encontrada.")
28
-
29
- # Obtenemos los datos de branding para la plantilla
30
- branding_data = self.branding_service.get_company_branding(company)
31
-
32
- alert_message = session.pop('alert_message', None)
33
- alert_icon = session.pop('alert_icon', 'error')
34
-
35
- # 2. Pasamos las variables a la plantilla. Si no hay mensaje, serán None.
36
- return render_template(
37
- 'index.html',
38
- company=company,
39
- company_short_name=company_short_name,
40
- branding=branding_data,
41
- alert_message=alert_message,
42
- alert_icon=alert_icon
43
- )
13
+ def get(self):
14
+ return render_template('index.html')
@@ -32,7 +32,7 @@ class LogoutApiView(MethodView):
32
32
  # get URL for redirection
33
33
  url_for_redirect = company.parameters.get('external_urls', {}).get('logout_url')
34
34
  if not url_for_redirect:
35
- url_for_redirect = url_for('index', company_short_name=company_short_name)
35
+ url_for_redirect = url_for('home', company_short_name=company_short_name)
36
36
 
37
37
  # clear de session cookie
38
38
  SessionManager.clear()
@@ -82,7 +82,7 @@ class SignupView(MethodView):
82
82
  session['alert_icon'] = 'success'
83
83
 
84
84
  # Redirigimos al usuario a la página de login
85
- return redirect(url_for('index', company_short_name=company_short_name))
85
+ return redirect(url_for('home', company_short_name=company_short_name))
86
86
 
87
87
  except Exception as e:
88
88
  return render_template("error.html",
@@ -7,14 +7,16 @@ from flask.views import MethodView
7
7
  from flask import render_template, url_for, redirect, session
8
8
  from iatoolkit.services.profile_service import ProfileService
9
9
  from itsdangerous import URLSafeTimedSerializer, SignatureExpired
10
+ from iatoolkit.services.branding_service import BrandingService # ¡Importante!
10
11
  from injector import inject
11
12
  import os
12
13
 
13
14
 
14
15
  class VerifyAccountView(MethodView):
15
16
  @inject
16
- def __init__(self, profile_service: ProfileService):
17
+ def __init__(self, profile_service: ProfileService, branding_service: BrandingService):
17
18
  self.profile_service = profile_service
19
+ self.branding_service = branding_service
18
20
  self.serializer = URLSafeTimedSerializer(os.getenv("USER_VERIF_KEY"))
19
21
 
20
22
  def get(self, company_short_name: str, token: str):
@@ -23,6 +25,7 @@ class VerifyAccountView(MethodView):
23
25
  if not company:
24
26
  return render_template('error.html', message="Empresa no encontrada"), 404
25
27
 
28
+ branding_data = self.branding_service.get_company_branding(company)
26
29
  try:
27
30
  # decode the token from the URL
28
31
  email = self.serializer.loads(token, salt='email-confirm', max_age=3600*5)
@@ -30,6 +33,7 @@ class VerifyAccountView(MethodView):
30
33
  return render_template('signup.html',
31
34
  company=company,
32
35
  company_short_name=company_short_name,
36
+ branding=branding_data,
33
37
  token=token,
34
38
  alert_message="El enlace de verificación ha expirado. Por favor, solicita uno nuevo."), 400
35
39
 
@@ -40,16 +44,18 @@ class VerifyAccountView(MethodView):
40
44
  'signup.html',
41
45
  company=company,
42
46
  company_short_name=company_short_name,
47
+ branding=branding_data,
43
48
  token=token,
44
49
  alert_message=response["error"]), 400
45
50
 
46
51
  # Guardamos el mensaje y el icono en la sesión manualmente
47
52
  session['alert_message'] = response['message']
48
53
  session['alert_icon'] = "success"
49
- return redirect(url_for('index', company_short_name=company_short_name))
54
+ return redirect(url_for('home', company_short_name=company_short_name))
50
55
 
51
56
  except Exception as e:
52
57
  return render_template("error.html",
53
58
  company=company,
54
59
  company_short_name=company_short_name,
60
+ branding=branding_data,
55
61
  message="Ha ocurrido un error inesperado."), 500
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 0.60.1
3
+ Version: 0.61.0
4
4
  Summary: IAToolkit
5
5
  Author: Fernando Libedinsky
6
6
  License-Expression: MIT