Não é possível bloquear postagem com a API

Faço algumas chamadas de API do meu aplicativo para o Discourse para modificar postagens.

Na primeira chamada, edito a postagem. Isso funciona perfeitamente. Na próxima chamada, tento bloquear a postagem.

Minha chamada de bloqueio de postagem do JavaScript se parece com isto:

fetch(`https://forum.hollowverse.com/posts/1817/locked.json`, {
  method: 'PUT',
  headers: {
    'Api-Key': process.env.DISCOURSE_SYSTEM_PRIVILEGE_SECRET,
    'content-type': 'application/json',
    'Api-Username': 'hollowbot',
  },
  body: JSON.stringify({locked: true}),
});

Quando executo essa chamada, o Discourse me responde com {locked: false}.

Tentei bloquear a postagem manualmente e inspecionar a chamada de API que o cliente Discourse faz, e ela parece muito semelhante à que faço do meu aplicativo, com exceção do método de autenticação, talvez.

Não tenho certeza do que está acontecendo, alguma ideia?

Não vejo um problema óbvio. Você obteve isso seguindo Como fazer engenharia reversa da API do Discourse? É isso que eu faria para ajudar se estivesse no meu computador.

1 curtida

A API para bloquear uma postagem está documentada aqui Discourse API Docs, mas sim, eu também tentei fazer engenharia reversa de como o cliente Discourse faz isso, e parece muito semelhante à maneira como estou fazendo isso do meu aplicativo.

1 curtida

O código é

params[:locked] === \"true\" ? locker.lock : locker.unlock

O que parece estar fazendo uma comparação de string.

Isso significa que você precisaria enviar \"locked\": \"true\" e não \"locked\": true, e que a documentação ou o código precisariam ser atualizados para refletir ou alterar esse comportamento.

O navegador não envia uma requisição JSON, ele envia Content-Type: application/x-www-form-urlencoded que interpretará o parâmetro como uma string, e é por isso que funciona no navegador.

2 curtidas

Obrigado pela sua ajuda, Richard!

TIL!

E vou verificar a possibilidade de enviar uma atualização para a documentação.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.