summaryrefslogtreecommitdiffstats
path: root/app/workers/scheduler
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2022-02-24 17:28:23 +0100
committerGitHub <noreply@github.com>2022-02-24 17:28:23 +0100
commita29a982eaa0536a741b43ffb3397c74e3abe7196 (patch)
tree12d9852def5f0ac7f1fe03e51113a65bafa68e8e /app/workers/scheduler
parent91cc8d1e636a3515b15758d0ad449a0477ea8c4c (diff)
Change e-mail domain blocks to block IPs dynamically (#17635)
* Change e-mail domain blocks to block IPs dynamically * Update app/workers/scheduler/email_domain_block_refresh_scheduler.rb Co-authored-by: Yamagishi Kazutoshi <ykzts@desire.sh> * Update app/workers/scheduler/email_domain_block_refresh_scheduler.rb Co-authored-by: Yamagishi Kazutoshi <ykzts@desire.sh> Co-authored-by: Yamagishi Kazutoshi <ykzts@desire.sh>
Diffstat (limited to 'app/workers/scheduler')
-rw-r--r--app/workers/scheduler/email_domain_block_refresh_scheduler.rb30
1 files changed, 30 insertions, 0 deletions
diff --git a/app/workers/scheduler/email_domain_block_refresh_scheduler.rb b/app/workers/scheduler/email_domain_block_refresh_scheduler.rb
new file mode 100644
index 00000000000..c67be684385
--- /dev/null
+++ b/app/workers/scheduler/email_domain_block_refresh_scheduler.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+class Scheduler::EmailDomainBlockRefreshScheduler
+ include Sidekiq::Worker
+ include Redisable
+
+ sidekiq_options retry: 0
+
+ def perform
+ Resolv::DNS.open do |dns|
+ dns.timeouts = 5
+
+ EmailDomainBlock.find_each do |email_domain_block|
+ ips = begin
+ if ip?(email_domain_block.domain)
+ [email_domain_block.domain]
+ else
+ dns.getresources(email_domain_block.domain, Resolv::DNS::Resource::IN::A).to_a + dns.getresources(email_domain_block.domain, Resolv::DNS::Resource::IN::AAAA).to_a.map { |resource| resource.address.to_s }
+ end
+ end
+
+ email_domain_block.update(ips: ips, last_refresh_at: Time.now.utc)
+ end
+ end
+ end
+
+ def ip?(str)
+ str =~ Regexp.union([Resolv::IPv4::Regex, Resolv::IPv6::Regex])
+ end
+end