DEV: Update Discord webhook domain (#106)

discordapp.com is being deprecated and replaced with discord.com - https://github.com/discord/discord-api-docs/discussions/4510
This commit is contained in:
David Taylor 2022-02-15 11:53:53 +00:00 committed by GitHub
parent ddee0c4417
commit 36087f3004
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 6 deletions

View File

@ -0,0 +1,19 @@
# frozen_string_literal: true
class UpdateDiscordWebhookDomains < ActiveRecord::Migration[6.1]
def up
execute <<~SQL
UPDATE plugin_store_rows psr
SET value = REPLACE(value, 'discordapp.com', 'discord.com')
WHERE psr.plugin_name = 'discourse-chat-integration'
AND psr.key LIKE 'channel:%'
AND psr.type_name = 'JSON'
AND psr.value::json ->> 'provider' = 'discord'
AND psr.value::json ->> 'data' LIKE '%https://discordapp.com/%'
SQL
end
def down
raise ActiveRecord::IrreversibleMigration
end
end

View File

@ -8,11 +8,11 @@ module DiscourseChatIntegration
CHANNEL_PARAMETERS = [ CHANNEL_PARAMETERS = [
{ key: "name", regex: '^\S+' }, { key: "name", regex: '^\S+' },
{ key: "webhook_url", regex: '^https:\/\/discord(?:app)?\.com\/api\/webhooks\/', unique: true, hidden: true } { key: "webhook_url", regex: '^https:\/\/discord\.com\/api\/webhooks\/', unique: true, hidden: true }
].freeze ].freeze
def self.send_message(url, message) def self.send_message(url, message)
http = Net::HTTP.new("discordapp.com", 443) http = Net::HTTP.new("discord.com", 443)
http.use_ssl = true http.use_ssl = true
uri = URI(url) uri = URI(url)

View File

@ -10,16 +10,16 @@ RSpec.describe DiscourseChatIntegration::Provider::DiscordProvider do
SiteSetting.chat_integration_discord_enabled = true SiteSetting.chat_integration_discord_enabled = true
end end
let(:chan1) { DiscourseChatIntegration::Channel.create!(provider: 'discord', data: { name: "Awesome Channel", webhook_url: 'https://discordapp.com/api/webhooks/1234/abcd' }) } let(:chan1) { DiscourseChatIntegration::Channel.create!(provider: 'discord', data: { name: "Awesome Channel", webhook_url: 'https://discord.com/api/webhooks/1234/abcd' }) }
it 'sends a webhook request' do it 'sends a webhook request' do
stub1 = stub_request(:post, 'https://discordapp.com/api/webhooks/1234/abcd?wait=true').to_return(status: 200) stub1 = stub_request(:post, 'https://discord.com/api/webhooks/1234/abcd?wait=true').to_return(status: 200)
described_class.trigger_notification(post, chan1, nil) described_class.trigger_notification(post, chan1, nil)
expect(stub1).to have_been_requested.once expect(stub1).to have_been_requested.once
end end
it 'includes the protocol in the avatar URL' do it 'includes the protocol in the avatar URL' do
stub1 = stub_request(:post, 'https://discordapp.com/api/webhooks/1234/abcd?wait=true') stub1 = stub_request(:post, 'https://discord.com/api/webhooks/1234/abcd?wait=true')
.with(body: hash_including(embeds: [hash_including(author: hash_including(url: /^https?:\/\//))])) .with(body: hash_including(embeds: [hash_including(author: hash_including(url: /^https?:\/\//))]))
.to_return(status: 200) .to_return(status: 200)
described_class.trigger_notification(post, chan1, nil) described_class.trigger_notification(post, chan1, nil)
@ -27,7 +27,7 @@ RSpec.describe DiscourseChatIntegration::Provider::DiscordProvider do
end end
it 'handles errors correctly' do it 'handles errors correctly' do
stub1 = stub_request(:post, "https://discordapp.com/api/webhooks/1234/abcd?wait=true").to_return(status: 400) stub1 = stub_request(:post, "https://discord.com/api/webhooks/1234/abcd?wait=true").to_return(status: 400)
expect(stub1).to have_been_requested.times(0) expect(stub1).to have_been_requested.times(0)
expect { described_class.trigger_notification(post, chan1, nil) }.to raise_exception(::DiscourseChatIntegration::ProviderError) expect { described_class.trigger_notification(post, chan1, nil) }.to raise_exception(::DiscourseChatIntegration::ProviderError)
expect(stub1).to have_been_requested.once expect(stub1).to have_been_requested.once