From 2233c422b76b437bdc25964dca2d5222586917b8 Mon Sep 17 00:00:00 2001 From: Troleomotor10 Date: Thu, 7 Nov 2024 18:48:49 +0100 Subject: [PATCH 1/3] docs: add google SSO supabase + update supabase docs --- .env.example | 5 ++-- CONTRIBUTING.md | 66 ++++++++++++++++++++++++++++++++++---------- supabase/config.toml | 8 +++--- 3 files changed, 58 insertions(+), 21 deletions(-) diff --git a/.env.example b/.env.example index 8b8552c1..2c15a743 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,5 @@ NEXT_PUBLIC_SUPABASE_URL= NEXT_PUBLIC_SUPABASE_ANON_KEY= - -API_KEY= +SUPABASE_GOOGLE_AUTH_ID= +SUPABASE_GOOGLE_AUTH_SECRET= +API_KEY= \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4ec724c1..67f17ebd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -46,33 +46,69 @@ Este mensaje indica que se han añadido instrucciones de instalación local en e ¡Gracias por contribuir! Tu ayuda hace una gran diferencia para el proyecto. -
- ## Desarrollo local - levantar db de desarrollo local ### Pre requisitos -- [docker](https://docs.docker.com/engine/install/) y [docker compose](https://docs.docker.com/compose/install/) -- [cli de supabase](https://supabase.com/docs/guides/local-development/cli/getting-started) +- [Docker](https://docs.docker.com/engine/install/) y [Docker Compose](https://docs.docker.com/compose/install/) +- [Supabase CLI](https://supabase.com/docs/guides/local-development/cli/getting-started) -### Instalar self hosted supabase +Si ya tienes cualquiera de los dos, **actualizalos para evitar errores**. -``` +Si usas docker desktop en Windows, esta es la configuración que deberías tener. + + +### Iniciar supabase en local + +Entramos en la carpeta del repositorio + +```bash cd ${DIRECTORIO_DE_EMERGENCY_CV} -supabase login -supabase init -supabase link --project-ref nmvcsenkfqbdlfdtiqdo +``` + +Iniciamos la base de datos (**tener docker encendido**) + +```bash supabase start ``` -### Para hacer cambios en el schema +Si no vemos las tablas ni los datos de ejemplo cargados podemos refrescar la base de datos con: + +```bash +supabase db reset +``` + +### Hacer cambios en el schema -- Editar como queremos que sea en local (studio de supabase) -- Ejecutar el comando: +#### Crear migracion automatica +Nos interesa usar esta opción, cuando queremos **editar la base de datos desde el studio web** + +Cuando acabemos de realizar los cambios en el studio web, ejecutaremos el siguiente comando para generar la migration. + +```bash +supabase db diff -f nombre_migracion ``` -// nombre de la migracion es indicativo, no tiene nigun efecto -supabase db diff -f ${NOMBRE_DE_LA_MIGRACION} + +#### Crear migración manual + +Nos interesa usar esta opción, cuando queremos **editar la base de datos con codigo SQL manual**. + +Primero, creamos la el archivo migration con + +```bash +supabase migration new nombre_migracion +``` + +Se creara un **nuevo fichero** con el nombre que hemos usado **en supabase/migrations** + +En ese archivo añadiremos todo el código SQL que necesitemos + +Si queremos visualizar nuestros cambios en local, podemos usar + +```bash +supabase db reset ``` -- Esto generara una migracion en el local, hay que añadir esto al PR y github actions lo pondra en produccion. +
+La migration que generemos, la añadiremos en el PR. diff --git a/supabase/config.toml b/supabase/config.toml index 0172bd1c..a79ce9fc 100644 --- a/supabase/config.toml +++ b/supabase/config.toml @@ -190,11 +190,11 @@ verify_enabled = true # Use an external OAuth provider. The full list of providers are: `apple`, `azure`, `bitbucket`, # `discord`, `facebook`, `github`, `gitlab`, `google`, `keycloak`, `linkedin_oidc`, `notion`, `twitch`, # `twitter`, `slack`, `spotify`, `workos`, `zoom`. -[auth.external.apple] -enabled = false -client_id = "" +[auth.external.google] +enabled = true +client_id = "env(SUPABASE_GOOGLE_AUTH_ID)" # DO NOT commit your OAuth provider secret to git. Use environment variable substitution instead: -secret = "env(SUPABASE_AUTH_EXTERNAL_APPLE_SECRET)" +secret = "env(SUPABASE_GOOGLE_AUTH_SECRET)" # Overrides the default auth redirectUrl. redirect_uri = "" # Overrides the default auth provider URL. Used to support self-hosted gitlab, single-tenant Azure, From 9e8dab506566d8c4cc69724ead04cc23591d1192 Mon Sep 17 00:00:00 2001 From: Troleomotor10 Date: Thu, 7 Nov 2024 18:49:16 +0100 Subject: [PATCH 2/3] feat: add privacy policy google auth --- src/components/auth/PhoneNumberDialog.js | 60 +++++++++++++++++++----- 1 file changed, 48 insertions(+), 12 deletions(-) diff --git a/src/components/auth/PhoneNumberDialog.js b/src/components/auth/PhoneNumberDialog.js index 94da5dee..53404a42 100644 --- a/src/components/auth/PhoneNumberDialog.js +++ b/src/components/auth/PhoneNumberDialog.js @@ -12,27 +12,41 @@ import { isValidPhone } from '@/helpers/utils'; const MODAL_NAME = 'phone-number'; const PhoneForm = ({ onSubmit }) => { - const [phoneNumber, setPhoneNumber] = useState(''); + const [formData, setFormData] = useState({ + phoneNumber: '', + privacyPolicy: '', + }); const handleSubmit = useCallback( (e) => { e.preventDefault(); - /* Form validation */ - if (!isValidPhone(phoneNumber)) { + /* PHONE VALIDATION */ + if (!isValidPhone(formData.phoneNumber)) { alert('El teléfono de contacto no es válido.'); return; } - const formatedPhoneNumber = formatPhoneNumber(phoneNumber); - onSubmit(formatedPhoneNumber); - setPhoneNumber(''); + /* POLICY PRIVACY VALIDATION */ + if (!formData.privacyPolicy) { + alert('Para continuar, debes aceptar la Política de Privacidad.'); + return; + } + + const formatedPhoneNumber = formatPhoneNumber(formData.phoneNumber); + + onSubmit(formData.phoneNumber, formData.privacyPolicy); + + setFormData({ + phoneNumber: '', + privacyPolicy: '', + }); }, - [onSubmit, phoneNumber], + [onSubmit, formData], ); const handleChange = useCallback((phoneNumber) => { - setPhoneNumber(phoneNumber); + setFormData((formData) => ({ ...formData, phoneNumber })) }, []); return ( @@ -51,9 +65,31 @@ const PhoneForm = ({ onSubmit }) => { Tu número de teléfono no será usado con ningún otro propósito ni compartido con terceras personas.

- + + {/* PHONE NUMBER */} + + + {/* PRIVACY POLICY */} +
+ setFormData({ ...formData, privacyPolicy: e.target.checked })} + className="min-w-4 min-h-4 cursor-pointer" + id="privacyPolicy" + required + /> + +
-
+ {/* ACCEPT AND SAVE */} +
{/* Toggle button for desktop */}