Estou criando uma ação do GitHub para publicar no fórum Discourse.
Encontrei a API de posts, porém a documentação diz que usuários do Discourse precisam criar uma chave de API no painel de administração, mesmo que usuários não administradores não tenham acesso a um painel de administração. Aqui tenho algumas perguntas:
A chave de API foi projetada até para usuários não administradores?
Se sim, como usuários não administradores podem criar sua chave de API?
Se sim, para habilitar a chave de API para usuários não administradores, há alguma configuração necessária?
A página de preferências do fórum não tem interface para criar uma chave de API. Então imagino que existam algumas configurações que permitam aos usuários emitir suas próprias chaves de API.
Se isso for para uma GitHub Action, provavelmente será melhor criar uma chave de API escopada, que permita apenas as ações necessárias, mas, sim, você precisará ser um administrador para criar essa chave.
Para programas de CLI, se isso for necessário, você pode iniciar um servidor web local e usar uma URL http://localhost:XXXXX/callback. O aplicativo faz algo semelhante.
Aqui está a exceção relatada no console do navegador:
Uncaught TypeError: Cannot set property 'isReadOnly' of undefined
at Function.createCurrent (_application-42d4413fabab7a4b12e0c25fb01f736af560aa283089071a8493f37c9b042a4a.js:44867)
at Function.current (_application-42d4413fabab7a4b12e0c25fb01f736af560aa283089071a8493f37c9b042a4a.js:8816)
at Object.initialize (_application-42d4413fabab7a4b12e0c25fb01f736af560aa283089071a8493f37c9b042a4a.js:70403)
at Object.i.initialize (_application-42d4413fabab7a4b12e0c25fb01f736af560aa283089071a8493f37c9b042a4a.js:7001)
at _ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js:49660
at i.each (_ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js:67904)
at i.walk (_ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js:67891)
at n.each (_ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js:67858)
at n.topsort (_ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js:67758)
at t._runInitializer (_ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js:49667)
Vou anexar a captura de tela da análise do código JS. Parece que o siteAttributes é esperado como um valor válido, mas está undefined. Se você tiver alguma sugestão para mim, por favor, me avise. Obrigado!
O JS lança um erro porque o método POST para /user-api-key retorna 403 e o método build_not_found_page no controlador não invoca o método preload_anonymous_data, que armazena o valor pré-carregado.
Não está claro por que o servidor respondeu com 403 e <h1 class="title">Oops! That page is private.</h1> quando adicionei o parâmetro auth_redirect. Tentei usar o mesmo domínio para a URL de callback (para verificar um problema de cross-site scripting) e o protocolo HTTPS, mas sem sucesso.
O discourse://auth_redirect não está funcionando como esperado para mim, então vou tentar pedir aos usuários que insiram manualmente o token criptografado, assim como no código Ruby.
Nota para outros usuários: Criei um módulo Node que pode ser invocado via o comando npx. Ele criará uma chave de API com escopo write. Espero que isso ajude no processo de configuração de sistemas que precisam de um token da API do Discourse.
Edição: Olá @KengoTODA. Seu código no GitHub foi útil para me indicar o caminho certo. Ainda estou resolvendo alguns detalhes, mas em breve escreverei um resumo de como consegui fazer tudo funcionar.
O código do GitHub de @KengoTODA me ajudou muito. Agora tenho uma versão funcional de autenticação de usuários por usuário para fazer chamadas de API ao Discourse. Descrevi meus passos aqui: User API keys specification - #45 by JQ331