Integração de calendário — Permissões e privacidade

Documento para clientes, áreas de negócio e DPO. Descreve quais permissões a Gupy solicita nas integrações com Google Calendar e Microsoft Outlook (Office 365), para que são usadas e o que não é acessado.

Como funciona a conexão

A Gupy solicita autorização individual: cada recrutador(a) conecta a própria agenda (Google ou Microsoft). A autorização acontece uma vez; depois disso, a Gupy usa a conexão para agendar entrevistas em nome dessa pessoa.

Onde o usuário vê e autoriza as permissões

MomentoOnde na GupyO que acontece
Conexão voluntáriaConfigurações da empresa → Agendamento de entrevistas (/companies/setup/meeting-scheduler)Ao clicar em conectar Google ou Microsoft, a Gupy abre a tela oficial de autorização do provedor.
Convite por e-mailE-mail "Convite para integrar calendário"Link para a mesma página de configuração. Enviado a usuários que ainda não conectaram a agenda (individual ou em lote pelo admin).
Retorno após autorizarMesma área de configuração (/companies/setup/meeting-scheduler/oauth-callback)Confirmação de sucesso da conexão.
DesconexãoMesma área de configuraçãoO usuário pode desconectar a agenda a qualquer momento; a Gupy deixa de acessar o calendário.

A tela com a lista de permissões é sempre a do Google ou da Microsoft, não uma tela customizada da Gupy.


Permissões — Google Calendar

Permissão (como aparece para o usuário)Para que a Gupy usaOnde entra na jornada
Ver o e-mail da conta GoogleRegistrar qual conta foi conectada e exibir nas configurações ("Conta conectada: …").Autorização inicial + tela de status da conexão.
Ver calendários (somente leitura)Consultar apenas horários ocupados ou livres, para sugerir slots de entrevista sem conflito. Não usamos título, descrição, participantes ou local de outros compromissos.Agendamento de entrevistas (individual, em massa e autoagendamento pelo candidato).
Ver e editar eventos do calendárioCriar o evento de entrevista no calendário do recrutador; atualizar se data/hora/participantes mudarem; cancelar/excluir se a entrevista for cancelada. Em reunião online, gerar link do Google Meet.Criação, reagendamento e cancelamento de entrevistas.
Manter acesso quando offline (parte do fluxo OAuth; não aparece como permissão separada)Manter a integração ativa sem pedir login toda vez (renovação automática da conexão).Uso contínuo da integração após a primeira autorização.

Escopos técnicos (referência interna): calendar.readonly, calendar.events, userinfo.email.


Permissões — Microsoft / Outlook (Office 365)

Permissão (como aparece para o usuário)Para que a Gupy usaOnde entra na jornada
Entrar e ler o perfil do usuárioIdentificar a conta conectada (e-mail) e exibir nas configurações.Autorização inicial + tela de status da conexão.
Ler calendários do usuárioConsultar disponibilidade (ocupado/livre) para sugerir horários de entrevista.Agendamento de entrevistas (individual, em massa e autoagendamento).
Acesso total aos calendários do usuárioCriar, atualizar e excluir eventos de entrevista criados pela Gupy. Em reunião online, tentar gerar link do Microsoft Teams.Criação, reagendamento e cancelamento de entrevistas.
Manter acesso aos dados aos quais você deu acessoManter a integração ativa sem pedir login toda vez.Uso contínuo da integração após a primeira autorização.

No Microsoft, não existe permissão "só disponibilidade" como no Google. Por isso pedimos leitura + escrita, mas na prática usamos leitura só para ocupado/livre e escrita só nos eventos de entrevista da Gupy.

Escopos técnicos (referência interna): User.Read, Calendars.Read, Calendars.ReadWrite, offline_access.


Resumo por funcionalidade do produto

FuncionalidadeGoogleMicrosoft
Ver se o recrutador está livre em um horárioLeitura do calendárioLeitura do calendário
Criar entrevista no calendário do recrutadorEdição de eventosEscrita no calendário
Reagendar ou cancelar entrevistaEdição de eventosEscrita no calendário
Link de videoconferênciaGoogle MeetMicrosoft Teams
Saber qual conta está conectadaE-mail da conta GooglePerfil do usuário (e-mail)
Continuar integrado sem novo loginRenovação automáticaRenovação automática

O que a Gupy não faz — e o que isso significa na prática

Existem três camadas distintas. Isso é importante para privacidade e LGPD:

  1. Capacidade do token — o que o Google/Microsoft autorizou a aplicação a fazer.
  2. Uso da aplicação — o que a Gupy de fato busca nas APIs hoje.
  3. Armazenamento — o que a Gupy guarda no banco de dados.

Comportamento atual da aplicação

O que a Gupy não fazCapacidade do token?A Gupy busca/recebe isso hoje?A Gupy armazena isso?
Ler títulos de reuniões existentesSim, tecnicamente poderia (escopos permitem)Não — no Google a API de disponibilidade não traz título; no Microsoft campos extras podem vir na resposta, mas são ignoradosNão
Ler descrições ou participantes de outros eventosSim, tecnicamente poderiaNãoNão
Navegar ou exportar a agenda completaSim, tecnicamente poderiaNão — não listamos eventos do calendárioNão
Alterar eventos que não criamosSim, tecnicamente poderia (se soubesse o ID)Não — só opera eventos cujo ID a Gupy gravou ao criar a entrevistaN/A

Detalhes por provedor

Google

  • A consulta de disponibilidade usa a API freebusy, que retorna somente intervalos de horário (início/fim), sem título, descrição ou participantes.
  • Os escopos pedidos (calendar.readonly + calendar.events) são mais amplos do que o uso mínimo de disponibilidade, mas a implementação atual não consulta a agenda completa.

Microsoft

  • A consulta de disponibilidade usa getSchedule. A resposta HTTP pode incluir campos adicionais (ex.: assunto), dependendo do tenant/configuração.
  • O código da Gupy utiliza apenas status (ocupado/tentativo), início e fim — e descarta os demais campos. Nada disso é persistido.

FAQ para DPO e áreas de compliance

A Gupy consegue ler minhas reuniões pessoais?

Pelo token, tecnicamente sim — os escopos OAuth concedidos pelo Google e Microsoft permitem, em abstracto, ler eventos do calendário.

Na prática, a aplicação Gupy hoje não faz isso. A consulta de disponibilidade retorna apenas horários ocupados/livres (Google) ou usa só início/fim/status (Microsoft). Não há fluxo que liste ou armazene títulos, descrições ou participantes de outros compromissos.

Por que a permissão de "leitura de calendário" parece tão ampla?

Os provedores (especialmente Microsoft) não oferecem um escopo OAuth equivalente ao "somente ocupado/livre" do Google de forma isolada. Para agendar entrevistas com conflito de horário e criar eventos no calendário, é necessário combinar permissões de leitura e escrita.

A Gupy limita o uso dessas permissões ao mínimo operacional, mesmo que o escopo autorizado seja mais amplo.

A Gupy altera compromissos que não foram criados por ela?

Não. Criação, atualização e exclusão de eventos no calendário externo ocorrem somente para entrevistas agendadas pela plataforma, usando o identificador do evento que a Gupy guardou no momento da criação.

O que a Gupy armazena após a conexão?

  • Tokens de acesso e refresh (criptografados)
  • E-mail da conta conectada
  • Data da conexão
  • Escopos concedidos
  • Identificadores dos eventos de entrevista criados pela Gupy (para atualizar/cancelar depois)

Não armazenamos títulos, descrições ou participantes de outros compromissos da agenda.

Os tokens são guardados com segurança? O que acontece se algum token vazar? Pode ser utilizado por outras pessoas?

Sim, são armazenados com proteção. Os tokens de acesso e de renovação (refresh) nunca ficam em texto puro no banco de dados. Antes de serem gravados, passam por criptografia AES-256-GCM (algoritmo simétrico com autenticação de integridade). A chave de criptografia é mantida apenas no ambiente de execução da aplicação (variável de ambiente), separada dos dados persistidos.

O usuário final não recebe nem visualiza os tokens. Eles existem somente no servidor da Gupy e são descriptografados apenas no momento em que a aplicação precisa chamar o Google ou a Microsoft (consultar disponibilidade, criar/atualizar/cancelar entrevista). Não há endpoint que exponha o token ao navegador ou a terceiros.

Se um token vazar, sim — tecnicamente poderia ser usado por outra pessoa. Tokens OAuth funcionam como credencial de acesso: quem possui o valor do token pode, em princípio, chamar as APIs do Google/Microsoft em nome da conta que autorizou, dentro dos escopos concedidos, até o token expirar ou ser revogado. O token de renovação (refresh), se exposto, prolonga esse risco porque permite obter novos tokens de acesso.

O que limita e mitiga esse risco na prática:

MedidaEfeito
Criptografia em repousoVazamento do banco de dados, por si só, não expõe tokens utilizáveis — seria necessário também a chave de criptografia.
Tokens de acesso de curta duraçãoO access token expira; o refresh é necessário para continuar o acesso.
Uso exclusivo server-sideTokens não circulam no front-end nem em URLs visíveis ao usuário.
Desconexão na GupyRemove os tokens armazenados; novas operações de calendário deixam de funcionar para aquela conta.
Revogação no Google/MicrosoftO usuário pode invalidar o acesso do app diretamente no provedor, independentemente da Gupy.

Resumo para compliance: a Gupy trata os tokens como segredo sensível (criptografia + uso restrito ao backend). Ainda assim, como qualquer credencial OAuth, um vazamento do token em texto puro permitiria uso indevido até expiração ou revogação — por isso a revogação pelo usuário e a desconexão na plataforma são os mecanismos de resposta recomendados em caso de incidente.

O usuário pode revogar o acesso?

Sim, de duas formas:

  1. Na Gupy — desconectar a agenda em Configurações → Agendamento de entrevistas.
  2. No provedor — revogar o acesso do app nas configurações de segurança da conta Google ou Microsoft.

Quem autoriza a conexão?

Cada usuário da empresa (recrutador/gestor) autoriza a própria agenda. Não é uma integração única da empresa que acessa calendários de todos os funcionários sem consentimento individual.