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
| Momento | Onde na Gupy | O que acontece |
|---|---|---|
| Conexão voluntária | Configuraçõ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-mail | E-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 autorizar | Mesma área de configuração (/companies/setup/meeting-scheduler/oauth-callback) | Confirmação de sucesso da conexão. |
| Desconexão | Mesma área de configuração | O 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 usa | Onde entra na jornada |
|---|---|---|
| Ver o e-mail da conta Google | Registrar 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ário | Criar 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 usa | Onde entra na jornada |
|---|---|---|
| Entrar e ler o perfil do usuário | Identificar a conta conectada (e-mail) e exibir nas configurações. | Autorização inicial + tela de status da conexão. |
| Ler calendários do usuário | Consultar disponibilidade (ocupado/livre) para sugerir horários de entrevista. | Agendamento de entrevistas (individual, em massa e autoagendamento). |
| Acesso total aos calendários do usuário | Criar, 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 acesso | Manter 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
| Funcionalidade | Microsoft | |
|---|---|---|
| Ver se o recrutador está livre em um horário | Leitura do calendário | Leitura do calendário |
| Criar entrevista no calendário do recrutador | Edição de eventos | Escrita no calendário |
| Reagendar ou cancelar entrevista | Edição de eventos | Escrita no calendário |
| Link de videoconferência | Google Meet | Microsoft Teams |
| Saber qual conta está conectada | E-mail da conta Google | Perfil do usuário (e-mail) |
| Continuar integrado sem novo login | Renovação automática | Renovaçã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:
- Capacidade do token — o que o Google/Microsoft autorizou a aplicação a fazer.
- Uso da aplicação — o que a Gupy de fato busca nas APIs hoje.
- Armazenamento — o que a Gupy guarda no banco de dados.
Comportamento atual da aplicação
| O que a Gupy não faz | Capacidade do token? | A Gupy busca/recebe isso hoje? | A Gupy armazena isso? |
|---|---|---|---|
| Ler títulos de reuniões existentes | Sim, 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 ignorados | Não |
| Ler descrições ou participantes de outros eventos | Sim, tecnicamente poderia | Não | Não |
| Navegar ou exportar a agenda completa | Sim, tecnicamente poderia | Não — não listamos eventos do calendário | Não |
| Alterar eventos que não criamos | Sim, tecnicamente poderia (se soubesse o ID) | Não — só opera eventos cujo ID a Gupy gravou ao criar a entrevista | N/A |
Detalhes por provedor
- 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:
| Medida | Efeito |
|---|---|
| Criptografia em repouso | Vazamento 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ção | O access token expira; o refresh é necessário para continuar o acesso. |
| Uso exclusivo server-side | Tokens não circulam no front-end nem em URLs visíveis ao usuário. |
| Desconexão na Gupy | Remove os tokens armazenados; novas operações de calendário deixam de funcionar para aquela conta. |
| Revogação no Google/Microsoft | O 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:
- Na Gupy — desconectar a agenda em Configurações → Agendamento de entrevistas.
- 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.
Updated about 22 hours ago
