ipfs-shipyard/ipfs-deploy

400 when updating Cloudflare dns-link if web3 gateway is enabled

AnthonyTsang opened this issue · 2 comments

Cloudflare is having a new way to handle dns-link.

Instead of using PUT zones/:zone_identifier/dns_records/:identifier like it is an ordinary DNS record, there is a new endpoint PATCH zones/:zone_identifier/web3/hostnames/:identifier

My original issue is that, I was trying to run
ipd -p infura -d cloudflare .
with IPFS_DEPLOY_CLOUDFLARE__ZONE, IPFS_DEPLOY_CLOUDFLARE__RECORD and IPFS_DEPLOY_CLOUDFLARE__API_TOKEN are set.

The Cloudflare API token has
Account : Account Settings : Read
Zone : Zone Settings : Edit
Zone : Zone : Edit
Zone : DNS : Edit

just like #148 said.

But it throws

HTTPError: Response code 400 (Bad Request)
 at Request.<anonymous> (...\node_modules\ipfs-deploy\node_modules\got\dist\source\as-promise\index.js:118:42)

So I dig into the mentioned line and add
console.log(response.body)
It prints out

{
  result: null,
  success: false,
  errors: [
    {
      code: 1049,
      message: 'Unable to edit this record. It was generated by Cloudflare and can be modified in your Web3 Gateway configuration.'
    }
  ],
  messages: []
}

It seems that it has to use the new endpoint to do the job.

You can take a look at my forks of ipfs-deploy and dnslink-cloudflare. I updated them but as project seems dead (previous PR I did with unpin feature hangs since April) I'm now not caring about backward compatibiliy or tests.

I didn't implement all cases as you could still use "old way" to host ipfs files without using Cloudflare web3 features.