Calendar sync (Google + Outlook)
Eventos criados em Skillment podem aparecer automaticamente no Google Calendar ou Outlook 365 do learner. OAuth pessoal por conta — aluno autoriza, autoriza, learner revoga quando quiser.
Setup do tenant
Em /admin/integrations/calendars:
- Google Calendar: Cloud Console → APIs → Create OAuth 2.0 Client ID. Authorized redirect URI:
https://[tenant].skillment.app/api/calendar/google/callback. Cole client ID + secret no admin. - Outlook 365: Azure Portal → App registrations → New. Redirect URI:
https://[tenant].skillment.app/api/calendar/outlook/callback. Permission:Calendars.ReadWrite(delegated). Cole client ID + secret. - Habilite o toggle pra cada provider
Setup do learner
Em /perfil/calendar, learner vê 2 botões:
- “Conectar Google Calendar”
- “Conectar Outlook”
Click → OAuth consent → callback → Skillment armazena refresh token criptografado. Daí em diante, todo evento que o learner se inscrever cria automaticamente no calendário escolhido.
Segurança do refresh token
Refresh tokens são sensitive credentials — quem tem pode emitir access tokens novos sem reautenticar. Skillment armazena encrypted-at-rest:
- Algoritmo: AES-256-GCM (authenticated encryption)
- Key derivation: HKDF (RFC 5869) com salt + info per-tenant
- Chave mestra:
CALENDAR_TOKEN_ENCRYPTION_KEYvia Wrangler secret, nunca em código - Rotação: chave nova invalida tokens existentes (learner reautoriza); planejamento de versioned encryption no backlog enterprise.
Revogar acesso
Learner pode revogar em /perfil/calendar a qualquer momento. Click revoke → Skillment chama o endpoint de revoke do provider + deleta o refresh token criptografado da DB. Eventos já criados no calendar permanecem (não removemos por padrão).
Limites e edge cases
- Refresh token expirado: Google revoga após 6 meses inativo. Quando next sync falha, marcamos a integration como inválida e pedimos learner pra reconectar.
- Rate limit Google: 1M req/dia per project (folgado pra dezenas de milhares de learners).
- Outlook delegate access: em algumas configs enterprise, o admin precisa pre-aprovar a app. Veja o erro de consent específico no flow.
Endpoint pra apagar evento
Se um evento Skillment é cancelado, o calendar event correspondente também é deletado via sync. Não há orphan events do nosso lado.