{"id":50775590,"url":"https://github.com/suap-ava-suite/moodle-auth_suap","last_synced_at":"2026-06-11T23:02:04.760Z","repository":{"id":37613244,"uuid":"322098997","full_name":"suap-ava-suite/moodle-auth_suap","owner":"suap-ava-suite","description":"Plugin de autenticacao via OAuth2 do SUAP. Faz o login no Moodle e sincroniza dados do usuario, foto e campos de perfil customizados.","archived":false,"fork":false,"pushed_at":"2026-05-29T23:38:31.000Z","size":160,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-06-03T20:21:15.587Z","etag":null,"topics":["authentication","enrollment","integration","moodle","plugin","suap"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/suap-ava-suite.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-12-16T20:52:05.000Z","updated_at":"2026-06-03T14:53:58.000Z","dependencies_parsed_at":"2024-02-23T22:29:50.803Z","dependency_job_id":"e0a6ea52-d413-4686-a7d1-18cf08fce1e4","html_url":"https://github.com/suap-ava-suite/moodle-auth_suap","commit_stats":null,"previous_names":["cte-zl-ifrn/moodle-auth_suap","suap-ava-suite/moodle-auth_suap"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/suap-ava-suite/moodle-auth_suap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suap-ava-suite%2Fmoodle-auth_suap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suap-ava-suite%2Fmoodle-auth_suap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suap-ava-suite%2Fmoodle-auth_suap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suap-ava-suite%2Fmoodle-auth_suap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/suap-ava-suite","download_url":"https://codeload.github.com/suap-ava-suite/moodle-auth_suap/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suap-ava-suite%2Fmoodle-auth_suap/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34221150,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["authentication","enrollment","integration","moodle","plugin","suap"],"created_at":"2026-06-11T23:02:03.995Z","updated_at":"2026-06-11T23:02:04.747Z","avatar_url":"https://github.com/suap-ava-suite.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# auth_suap\n\nPlugin de autenticacao via OAuth2 do SUAP. Faz o login no Moodle e sincroniza dados do usuario, foto e campos de perfil customizados.\n\n## Requisitos\n- Moodle 3.7+ (require 2019_05_20_00)\n- PHP 7.2+ com extensão cURL habilitada\n- Plugin `auth_oauth2` habilitado (core do Moodle)\n\n## Dependencias opcionais\n- **local_suap** (opcional) - Se instalado, aplica preferencias customizadas de usuario conforme `default_user_preferences` no primeiro login\n\n## 1. Configuracao no SUAP\n- No SUAP, pesquise por auth e selecione **Aplicacoes OAUTH2**\n- No canto superior direito, clique em **Adicionar Aplicacao OAUTH2**\n\n### Preencha os campos\n- **Nome:** Escolha um nome descritivo para o seu Moodle\n- **Authorization grant type:** Authorization code\n- **Redirect URIs:** `http://moodle/auth/suap/authenticate.php http://moodle/admin/oauth2callback.php http://moodle/authenticate.php`\n- **Client type:** Public\n- **Algorithm:** No OIDC support\n- **Ativo:** ✅ Marque este campo\n\n### Chaves\n- O **Client ID** e o **Client Secret** serao usados no Moodle\n- ⚠️ **Guarde o Client Secret**, pois ele nao podera ser visualizado novamente\n\nClique em **Salvar mudancas**\n\n## 2. Configuracao no Moodle\n1. Ativar plugins de Autenticacao:\n   - Acesse **Administracao do site \u003e Plugins \u003e Autenticacao \u003e Gerenciar autenticacao**\n   - Habilite SUAP (caso ainda não esteja ativados)\n2. Definir URL alternativa para login:\n   - Role ate **URL alternativa para login (alternateloginurl)** e preencha com: `http://moodle/auth/suap/login.php`\n\n⚠️ **Atencao:** Ao definir a URL alternativa, **todas** as tentativas de login serao redirecionadas para essa pagina. Certifique-se de que **ha pelo menos um usuario com autenticacao OAuth2 e permissoes de administrador** antes de prosseguir, para evitar ficar \"preso do lado de fora\" do Moodle.\n\nRole ate o final e clique em **Salvar mudancas**\n\n## 3. Configuracao do SUAP no Moodle\n1. Acesse **Administracao do site \u003e Plugins \u003e Autenticacao \u003e SUAP**\n2. Preencha os campos:\n   - **Client ID:** Client ID gerado no SUAP (você gerou no passo 1)\n   - **Client Secret:** Client Secret gerado no SUAP(você gerou no passo 1)\n   - **Authorize URL:** URL de autorizacao do SUAP, ex.: https://suap.ifrn.edu.br/o/authorize/\n   - **Token URL:** URL de token do SUAP, ex.: https://suap.ifrn.edu.br/o/token/\n   - **RH/EU URL:** URL da API `eu` do SUAP, ex.: https://suap.ifrn.edu.br/api/rh/eu/\n   - **Logout URL:** URL de logout do SUAP, ex.: https://suap.ifrn.edu.br/comum/logout/\n3. Clique em **Salvar mudancas**\n\n## 4. Testando o acesso\nAgora, ao clicar no botao de login, voce sera redirecionado para a tela de autenticacao do SUAP.\n- Se o usuario ja existir no Moodle, suas informacoes serao atualizadas.\n- Caso contrario, um novo usuario sera criado automaticamente.\n\n## Fluxo de autenticacao (resumo)\n1. `login.php` redireciona para `authorize_url`.\n2. O SUAP retorna `code` para `authenticate.php`.\n3. `authenticate.php` troca o `code` por `access_token` em `token_url`.\n4. O perfil eh buscado em `rh_eu_url` e os dados sao sincronizados.\n5. O usuario eh autenticado no Moodle e redirecionado ao destino.\n\n## Endpoints e utilitarios\n| Endpoint | Finalidade |\n| --- | --- |\n| `/auth/suap/login.php` | Inicia o login SUAP |\n| `/auth/suap/authenticate.php` | Callback OAuth2 |\n| `/auth/suap/logout.php` | Logout completo (SUAP + Moodle) |\n| `/auth/suap/dispatch.php` | Gera token de webservice para apps |\n| `/auth/suap/health.php` | Exibe configuracoes ativas (debug) para quem tem a credencial |\n\n## Webservice para apps (dispatch.php)\n`dispatch.php` valida o token recebido no header `Authentication: Token \u003ctoken\u003e` e gera um token de webservice do Moodle.\n\nPara funcionar, configure `verify_token_url` em `auth_suap` (tabela `config_plugins`), pois o plugin nao possui este campo na tela de configuracao.\n\n## Campos de perfil criados automaticamente\nNa instalacao/atualizacao o plugin cria o grupo **SUAP** de campos customizados e registra:\n- `data_de_nascimento`\n- `sexo`\n- `id_doc_certificado`\n- `tipo_doc_certificado`\n- `cpf` (preterido em favor de `id_doc_certificado` e `tipo_doc_certificado`)\n- `passaporte` (preterido em favor de `id_doc_certificado` e `tipo_doc_certificado`)\n\n## Campos alterados no primeiro login x nos logins seguintes\n\nTabela baseada no fluxo de criacao/atualizacao em auth.php.\n\n| Campo | Primeiro login | Logins seguintes | Observacoes |\n| --- | --- | --- | --- |\n| user.username | Sim (criacao) | Nao | **IFRN-id** vindo do SUAP (atributo `identificacao`) |\n| user.password | Sim (criacao) | Nao | Senha aleatoria local (é ignorada). |\n| user.timezone | Sim (criacao) | Nao | `99` |\n| user.confirmed | Sim (criacao) | Nao | `1` |\n| user.mnethostid | Sim (criacao) | Nao | `1` |\n| user.policyagreed | Sim (criacao) | Nao | `0` |\n| user.deleted | Sim (criacao) | Nao | `0` |\n| user.firstaccess | Sim (criacao) | Nao | Timestamp atual. |\n| user.currentlogin | Sim (criacao) | Nao | Timestamp atual. |\n| user.lastip | Sim (criacao) | Nao | IP remoto. |\n| user.firstnamephonetic | Sim (criacao) | Nao | `null`. |\n| user.lastnamephonetic | Sim (criacao) | Nao | `null`. |\n| user.middlename | Sim (criacao) | Nao | `null`. |\n| user.alternatename | Sim (criacao) | Nao | `null`. |\n| user.firstname | Sim | Sim | Derivado de `nome_social` ou `nome_registro`, nessa ordem. Exceto a última parte. |\n| user.lastname | Sim | Sim | Derivado de `nome_social` ou `nome_registro`, nessa ordem. Apenas a última parte. |\n| user.email | Sim | Sim | `email_preferencial` |\n| user.auth | Sim | Sim | `suap` |\n| user.suspended | Sim | Sim | `0` |\n| user.picture | Sim (se foto) | Sim (se foto) | Atualizado via `process_new_icon` do Moodle. |\n| profile_field_nome_apresentacao | Sim | Sim | `nome_usual` |\n| profile_field_nome_completo | Sim | Sim | `nome_registro` |\n| profile_field_nome_social | Sim | Sim | `nome_social` |\n| profile_field_email_secundario | Sim | Sim | `email_secundario` |\n| profile_field_email_google_classroom | Sim | Sim | `email_google_classroom` |\n| profile_field_email_academico | Sim | Sim | `email_academico` |\n| profile_field_campus_sigla | Sim | Sim | `campus` |\n| profile_field_last_login | Sim | Sim | JSON com o payload do SUAP. Usado para suporte. |\n| profile_field_tipo_usuario | Sim | Sim | `tipo_usuario` |\n| profile_field_data_de_nascimento | Sim | Sim | `data_de_nascimento` |\n| profile_field_sexo | Sim | Sim | `sexo` |\n| profile_field_cpf | Sim | Sim | `cpf`. Descontinuado. |\n| profile_field_passaporte | Sim | Sim | `passaporte`. Descontinuado. |\n| profile_field_id_doc_certificado | Sim (se cpf/passaporte) | Sim (se cpf/passaporte) | `cpf` ou `passaporte`, se não houver CPF. |\n| profile_field_tipo_doc_certificado | Sim (se cpf/passaporte) | Sim (se cpf/passaporte) | `CPF` ou `Passaporte`, se não houver CPF. |\n| preferencia de usuario (local_suap) | Sim (criacao) | Nao | Conforme `default_user_preferences` configurado no admin do Moodle. |\n\n## Observacoes\n- O campo `cpf` e `passaporte` estao marcados como descontinuados, mas ainda podem ser recebidos do SUAP.\n- Se a foto estiver disponivel, ela eh salva como `user.picture` via `process_new_icon`.\n- `profile_field_last_login` guarda o JSON completo recebido do SUAP para suporte.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuap-ava-suite%2Fmoodle-auth_suap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsuap-ava-suite%2Fmoodle-auth_suap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuap-ava-suite%2Fmoodle-auth_suap/lists"}