From 8746129ea34326acd88901f1e63fcf68f65990c5 Mon Sep 17 00:00:00 2001 From: Troleomotor10 Date: Wed, 6 Nov 2024 16:06:16 +0100 Subject: [PATCH 1/3] feat: add auto login when user register and privacy policy --- package-lock.json | 105 ++++++++++++++++++++++++++++ src/app/politica-privacidad/page.js | 65 +++++++++++++++++ src/components/auth/Login.js | 3 - src/components/auth/SignUp.js | 45 ++++++++++-- src/components/layout/Footer.js | 11 ++- src/lib/service.ts | 3 +- 6 files changed, 219 insertions(+), 13 deletions(-) create mode 100644 src/app/politica-privacidad/page.js diff --git a/package-lock.json b/package-lock.json index 5614eae9..ff4e42a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6988,6 +6988,111 @@ "version": "0.1.5", "license": "MIT", "optional": true + }, + "node_modules/@next/swc-darwin-x64": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.2.tgz", + "integrity": "sha512-KUpBVxIbjzFiUZhiLIpJiBoelqzQtVZbdNNsehhUn36e2YzKHphnK8eTUW1s/4aPy5kH/UTid8IuVbaOpedhpw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.2.tgz", + "integrity": "sha512-9J7TPEcHNAZvwxXRzOtiUvwtTD+fmuY0l7RErf8Yyc7kMpE47MIQakl+3jecmkhOoIyi/Rp+ddq7j4wG6JDskQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.2.tgz", + "integrity": "sha512-BjH4ZSzJIoTTZRh6rG+a/Ry4SW0HlizcPorqNBixBWc3wtQtj4Sn9FnRZe22QqrPnzoaW0ctvSz4FaH4eGKMww==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.2.tgz", + "integrity": "sha512-i3U2TcHgo26sIhcwX/Rshz6avM6nizrZPvrDVDY1bXcLH1ndjbO8zuC7RoHp0NSK7wjJMPYzm7NYL1ksSKFreA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.2.tgz", + "integrity": "sha512-AMfZfSVOIR8fa+TXlAooByEF4OB00wqnms1sJ1v+iu8ivwvtPvnkwdzzFMpsK5jA2S9oNeeQ04egIWVb4QWmtQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.2.tgz", + "integrity": "sha512-JkXysDT0/hEY47O+Hvs8PbZAeiCQVxKfGtr4GUpNAhlG2E0Mkjibuo8ryGD29Qb5a3IOnKYNoZlh/MyKd2Nbww==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.2.tgz", + "integrity": "sha512-foaUL0NqJY/dX0Pi/UcZm5zsmSk5MtP/gxx3xOPyREkMFN+CTjctPfu3QaqrQHinaKdPnMWPJDKt4VjDfTBe/Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } } } } diff --git a/src/app/politica-privacidad/page.js b/src/app/politica-privacidad/page.js new file mode 100644 index 00000000..2f29c3a8 --- /dev/null +++ b/src/app/politica-privacidad/page.js @@ -0,0 +1,65 @@ +export default function politicaPrivacidad() { + return ( +
+

Politica de privacidad

+
+

1. Datos Personales que Recopilamos

+

Recopilamos datos personales para facilitar el contacto entre personas que ofrecen ayuda sin ánimo de lucro y aquellas que la necesitan en las zonas afectadas por catástrofes naturales. Los datos recopilados incluyen:

+
    +
  • Datos obligatorios: correo electrónico para el registro y ubicación aproximada (barrio o área general).
  • +
  • Datos opcionales: número de teléfono y descripción de las necesidades de ayuda.
  • +
+

Nota: No proporciones ningún dato que no esté indicado en el formulario, como nombre completo, DNI o cuentas bancarias.

+
+
+

2. Finalidad y Base Legal del Tratamiento de Datos

+
    +
  • Finalidad: Facilitar la conexión entre personas que ofrecen y requieren ayuda en las áreas afectadas.
  • +
  • Base legal: El tratamiento de los datos se basa en el consentimiento expreso del usuario, otorgado al registrarse y rellenar el formulario de solicitud de ayuda.
  • +
+
+
+

3. Consentimiento para la Recopilación y Publicación de Datos

+

Al registrarse y rellenar el formulario de solicitud de ayuda, el usuario otorga su consentimiento para la recopilación y, cuando lo autorice expresamente, la publicación de su ubicación aproximada en el mapa, número de teléfono y necesidades. Este consentimiento es revocable en cualquier momento.

+

Para revocar el consentimiento de publicación, envía un correo a info@ajudadana.es, indicando ELIMINACIÓN DE SOLICITUD DE AYUDA EN EL MAPA, junto con el correo de registro y la ubicación aproximada. Responderemos en un plazo máximo de 30 días.

+
+
+

4. Duración de Conservación de los Datos

+

Los datos serán utilizados durante la emergencia y hasta un máximo de 6 meses después de la normalización de la situación, momento en el cual serán eliminados y destruidos de forma segura.

+
+
+

5. Derechos de los Usuarios

+

De acuerdo con el RGPD, los usuarios tienen derecho a:

+
    +
  • Acceso: Solicitar una copia de sus datos personales.
  • +
  • Rectificación: Modificar información incorrecta.
  • +
  • Supresión: Solicitar la eliminación de sus datos en cualquier momento.
  • +
  • Oposición y Limitación del Tratamiento: Oponerse al tratamiento o limitar su uso.
  • +
  • Portabilidad: Solicitar que sus datos sean transferidos a otra entidad.
  • +
+

Para ejercer estos derechos, envía una solicitud a info@ajudadana.es, incluyendo el derecho específico que deseas ejercer. La solicitud se procesará en un plazo de 30 días.

+
+
+

6. Seguridad de los Datos

+

Implementamos medidas técnicas y organizativas para proteger los datos personales. En caso de una violación de seguridad que pueda afectar los derechos y libertades de los usuarios, notificaremos a la AEPD en un plazo de 72 horas y, si procede, a los usuarios afectados.

+
+
+

7. Transferencia de Datos a Terceros

+

Actualmente, Ayuda Dana no realiza transferencias de datos personales fuera del Espacio Económico Europeo (EEE). Si esto cambia, se informará y solicitará el consentimiento explícito de los usuarios.

+
+
+

8. Privacidad de los Menores

+

El sitio no está dirigido a menores de 18 años. Si un padre o tutor detecta que un menor ha proporcionado datos personales sin el debido consentimiento, contacta con nosotros en info@ajudadana.es para su eliminación.

+
+
+

9. Modificaciones de la Política de Privacidad

+

Ayuda Dana se reserva el derecho de modificar esta Política de Privacidad. En caso de cambios sustanciales, notificaremos a los usuarios registrados y solicitaremos nuevamente su consentimiento si los cambios implican un uso ampliado de sus datos.

+
+
+

10. Contacto

+

Para preguntas sobre nuestra Política de Privacidad o el uso de tus datos, contáctanos en info@ajudadana.es

+
+

Última actualización: 5 de noviembre de 2024

+
+ ) +} \ No newline at end of file diff --git a/src/components/auth/Login.js b/src/components/auth/Login.js index c90cbe48..752170ff 100644 --- a/src/components/auth/Login.js +++ b/src/components/auth/Login.js @@ -112,9 +112,6 @@ export default function Login({ onSuccessCallback }) { onBackButtonClicked={() => { setIsSignUp(false); }} - onSuccessCallback={() => { - setIsSignUp(false); - }} /> )} diff --git a/src/components/auth/SignUp.js b/src/components/auth/SignUp.js index 75026372..2c2f6995 100644 --- a/src/components/auth/SignUp.js +++ b/src/components/auth/SignUp.js @@ -8,12 +8,13 @@ import { PhoneInput } from '@/components/PhoneInput'; import { formatPhoneNumber } from '@/helpers/utils'; import { isValidPhone } from '@/helpers/utils'; -export default function SignUp({ onSuccessCallback, onBackButtonClicked }) { +export default function SignUp({ onBackButtonClicked }) { const [formData, setFormData] = useState({ nombre: '', email: '', password: '', telefono: '', + privacyPolicy: '' }); const [status, setStatus] = useState({ isSubmitting: false, @@ -71,16 +72,33 @@ export default function SignUp({ onSuccessCallback, onBackButtonClicked }) { return; } - const response = await authService.signUp(formData.email, formData.password, formData.nombre, formatedPhoneNumber); + // privacy policy + if (!formData.privacyPolicy) { + setError('Para continuar, debes aceptar la Política de Privacidad.'); + return; + } + + // SEND SIGN-UP REQUEST TO AUTHENTICATION SERVICE + const response = await authService.signUp(formData.email, formData.password, formData.nombre, formatedPhoneNumber, formData.privacyPolicy); + if (response.error) { - setError('Ha habido un error inesperado creando el usuario'); + // SHOW ERROR IF PASSWORD IS WEAK OR USER ALREDY EXISTS + if (response.error.code === 'weak_password') { + setError('La contraseña debe tener al menos 6 caracteres.') + } else if (response.error.code === 'user_already_exists') { + setError('Ya existe una cuenta con este correo. Inicia sesión o intenta con otro.') + } else { + setError('Ocurrió un error. Inténtalo de nuevo.') + } return; } setStatus({ isSubmitting: false, error: null, success: true }); - if (typeof onSuccessCallback === 'function') { - onSuccessCallback(response.data); - } + + // SIGN IN WITH NEW USER CREATED + await authService.signIn(formData.email, formData.password); + // REDIRECT USER TO HOME PAGE + window.location.href = '/' }; return ( @@ -137,6 +155,21 @@ export default function SignUp({ onSuccessCallback, onBackButtonClicked }) { /> + + {/* Política de privacidad */} +
+
+ setFormData({ ...formData, privacyPolicy: e.target.checked })} + className='min-w-4 min-h-4 cursor-pointer' + id='privacyPolicy' + required + /> + +
+
{/* Boton */} diff --git a/src/components/layout/Footer.js b/src/components/layout/Footer.js index 89fe5cf0..c960d2c8 100644 --- a/src/components/layout/Footer.js +++ b/src/components/layout/Footer.js @@ -7,9 +7,14 @@ const Footer = () => { Web creada por personas voluntarias,{' '} independiente de cualquier organismo.

- - info@ajudadana.es - +
+ + info@ajudadana.es + + + Política de privacidad + +

© {new Date().getFullYear()} Emergency CV

diff --git a/src/lib/service.ts b/src/lib/service.ts index ef45cfda..6b2b3d98 100644 --- a/src/lib/service.ts +++ b/src/lib/service.ts @@ -177,7 +177,7 @@ export const authService = { async getSessionUser() { return supabase.auth.getUser(); }, - async signUp(email: any, password: any, nombre: any, telefono: any) { + async signUp(email:any, password:any, nombre:any, telefono:any, privacyPolicy: boolean) { return supabase.auth.signUp({ email, password, @@ -185,6 +185,7 @@ export const authService = { data: { nombre, telefono, + privacyPolicy, }, }, }); From e433056050597e047d5360d421738c11b68cb664 Mon Sep 17 00:00:00 2001 From: Troleomotor10 Date: Wed, 6 Nov 2024 16:09:50 +0100 Subject: [PATCH 2/3] style: update styles for auth box and emergency layout --- src/app/auth/page.js | 2 +- src/components/layout/EmergencyLayout.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/auth/page.js b/src/app/auth/page.js index 8d286b37..5397547f 100644 --- a/src/app/auth/page.js +++ b/src/app/auth/page.js @@ -18,7 +18,7 @@ export default function AuthPage() { }); return ( -
+
(window.location.href = '/')} />
); diff --git a/src/components/layout/EmergencyLayout.js b/src/components/layout/EmergencyLayout.js index 7962a634..38a4743d 100644 --- a/src/components/layout/EmergencyLayout.js +++ b/src/components/layout/EmergencyLayout.js @@ -28,7 +28,7 @@ export default function EmergencyLayout({ children }) {
setIsSidebarOpen(!isSidebarOpen)} />
-
+
{children}
diff --git a/src/lib/service.ts b/src/lib/service.ts index 6b2b3d98..cf86ad0d 100644 --- a/src/lib/service.ts +++ b/src/lib/service.ts @@ -177,7 +177,7 @@ export const authService = { async getSessionUser() { return supabase.auth.getUser(); }, - async signUp(email:any, password:any, nombre:any, telefono:any, privacyPolicy: boolean) { + async signUp(email: any, password: any, nombre: any, telefono: any, privacyPolicy: boolean) { return supabase.auth.signUp({ email, password,