---
# System prepended metadata

title: Instalar auth en local

---

# Instalar auth en local
- Instalar auth
    1. git clone https://github.com/alliende/auth.git
    2. Bajar la imagen de la BD
    3. npm i
    4. npm run createContainerDB
    5. npm run initDB 
    6. npm start
- Instalar ngrok y establecer la conexión entre ngrok y el servicio auth
    1. [descargar ngrok](ngrok.com) para darle acceso a google al servicio auth local
    2. `./ngrok http 3001` Conectar ngrok con auth (puerto definido en auth)
    3. Utilizar el tunel creado para reemplazarlo en los archivos (https://XXX.ngrok.io)
- Crear una nueva aplicación con google para utilizar la api de google calendar
    1. Crear un nuevo proyecto
    2. Habilitar la API de Google Calendar en sección Agregar APIs. Botón `+ habilitar apis y servicios`, dentro de panel de control, encontrar google calendar api y hacer click en habilitar.
    3. Sección de Credenciales del proyecto:
        1. Crear Credenciales > Help me choose (seguir instrucciones del repositorio)
            - Responder preguntas,
            - Ingresar URIs de origenes de javascript autorizados
                - https://XXX.ngrok.io
            - Ingresar URI de redireccuón autorizados
                - https://XXX.ngrok.io/choose-calendar
                - https://XXX.ngrok.io/choose-calendar/google
        2. Configurar pantalla de consentimiento
            - Definir Dominios autorizados
                - https://XXX.ngrok.io
        3. Verificación del dominio
            - Ingresar la uri https://XXX.ngrok.io
            - Descargar archivo .html 
            - Copiar el google-site-verification en routes.js en la primera ruta
            - Hacer click en verificar
            - Volver a ingresar la uri verificada en verificación del dominio
- Cambios en auth_app
    - .env: 
        ```
        REACT_APP_AUTH_URL a: https://XXX.ngrok.io
        ```
    - src/components/ChooseCalendar/index.js:
        ```
        ...
        const onSave = async calendarId => {
        try {
          setLoading(true)
          setCalendars(null)
          const {
            data: { ok, error: setCalendarError }
          } = await post(
            `${process.env.REACT_APP_AUTH_URL}/set-${service}-calendar`,
            {
              calendarId,
              userId
            }
          )

          if (ok) {
            window.open(`http://${hostname}`, '_self')   // Línea a eliminar
            window.open(`http://localhost:3000`, '_self')   // Línea a agregar 
          } else {
            setError(setCalendarError)
          }
        } catch (e) {
          console.log(e)
          setError(e)
        }
        setLoading(false)
       }
        ...
        ```
    - npm run build
    - Copiar carpeta build a www en auth
- Cambios en auth
    - .env:
        ```
        AUTH_URL=https://XXX.ngrok.io
        GOOGLE_CLIENT_ID=XXX
        GOOGLE_CLIENT_SECRET=XXX
        ```
    - package.json
        ```
        "createContainerDB": "docker run -p 8080:8080 -p 28016:28015 -d --name auth -v `pwd`/db/data/loadDB:/loadDB -v `pwd`/db/data/saveDB:/saveDB db_dev:1",
        ```
	- src/crons/index.js
	    ```
        export default function runCrons(queries) {
            // sundayCron(async logger => renewGoogleSubscription(queries, logger))
            // oddCron(async logger => renewOutlookSubscription(queries, logger))
        }
        ```
	- src/handlers.js
	    ```
        ln: 101
        const { ok, error } = await request(
            `$http://${hostname}/api/google-login-success`,
            null,
            {
              method: 'POST',
              body: {
                userId
              },
              jsonResponse: true
            }
        )
        ```
        ```
        ln: 410
        const { ok, error, failedEvents } = await request(
             `http://${hostname}/api/events/${user.id}`,
              null,
              {
                method: 'POST',
                body: {
                  events,
                  service: 'google'
                },
                jsonResponse: true
              }
            )
        ```
        ```
        ln: 560
        const { ok, error, failedEvents } = await request(
          `http://${hostname}/api/service-calendar-success`,
          null,
          {
            method: 'POST',
            body: {
              userId,
              events,
              service: 'google'
            },
            jsonResponse: true
          }
        )
        ```
        ```
        ln: 630
        /* If user doesn't exists, create it */
      if (!user) {
        await queries.insertUser({
          hostname: 'localhost:2707',
          id: userId
        })
      }
        ```
        ```
        ln: 740
        const { ok, error } = await request(
           `http://${hostname}/api/outlook-login-success`,
            null,
            {
              method: 'POST',
              body: {
                userId
              },
              jsonResponse: true
            }
          )
        ```
        ```
        ln: 880
        const { ok, error, failedEvents } = await request(
         `http://${hostname}/api/service-calendar-success`,
          null,
          {
            method: 'POST',
            body: {
              userId,
              events,
              service: 'outlook'
            },
            jsonResponse: true
          }
        )
        ```
        ```
        ln: 1230
        const { ok, error, failedEvents } = await request(
               `http://${hostname}/api/events/${userId}`,
                null,
                {
                  method: 'POST',
                  body: {
                    events,
                    service: 'outlook'
                  },
                  jsonResponse: true
                }
              )
        ```
	- src/routes.js
	    ```
        app.get('/googleXXX.html', (req, res) => {
            res.send('google-site-verification: googleXXX.html')
      })
        ```
	- src/utils.js
        ```
        ln: 85
        /* Get Date from hostname, so we update agenda at the date they actually are */
      let shortDate
      try {
            shortDate = (await exports.request(`http://${hostname}/api/getDate`, null, {
              jsonResponse: true
            })).date
      } catch (e) {
            shortDate = null
      }
        ```
        ```
        ln: 262
        /* Get Date from hostname, so we update agenda at the date they actually are */
        const { date: shortDate } = await exports.request(
          `http://${hostname}/api/getDate`,
          null,
          { jsonResponse: true }
        )
        ```

- Cambios en equip_api 
    - actionReducer
        ```
        // Dentro de la acción GOOGLE_LOGOUT
        const response = await request('https://XXX.ngrok.io/google-logout', null, {
          method: 'POST',
          body: {
            userId
          },
          jsonResponse: true
        })
        ```
- Cambios en equip_web
    - domains/agenda/components/AppBar/ProfileMenu/index.js
        ```
        ln: 65
        /**
       * @description Open a url to login in google
       */
      openGoogleLogin = () => {
            const { userId } = this.props
            const [, , domain] = window.location.href.split('/')
            window.open(
              `https://XXX.ngrok.io/google-auth?host=${domain}&userId=${userId}`,
              '_self'
        )
      }
        ```
        ```
        ln: 77
        /**
        * @description Open a url to login in outlokk
       */
      openOutlookLogin = () => {
            const { userId } = this.props
            const [, , domain] = window.location.href.split('/')
            window.open(
              `https://XXX.ngrok.iooutlook-auth?host=${domain}&userId=${userId}`,
              '_self'
            )
      }
        ```
