# frozen_string_literal: true require_relative "base" module Neetob class CLI module Cloudflare class VerifySpf < Base attr_accessor :domain def initialize(domain) super() @domain = domain end def run zone_id = ZONE_IDS[domain.to_sym] raise(StandardError, "Domain '#{domain}' not found.") if zone_id.nil? url = create_url(zone_id, "dns_records") response = get(url) raise(StandardError, "No DNS records found") if response[:result].empty? spf_txt_records = response[:result].filter { |dns| dns[:type] == "TXT" && (dns[:content].start_with?("v=spf1") || dns[:content].start_with?("\"v=spf1")) } if spf_txt_records.count > 1 ui.error("More than one TXT record found for SPF") elsif spf_txt_records.count == 0 ui.success("No TXT record for SPF present") else ui.success("Only one TXT record for SPF present") end spf_txt_records.each_with_index do |dns, index| ui.info("SPF TXT #{index + 1}: #{dns[:content]}") end if spf_txt_records.count == 1 unique_spf_txt_record = spf_txt_records.first if unique_spf_txt_record[:content].end_with?("-all") || unique_spf_txt_record[:content].end_with?("-all\"") ui.success("SPF TXT record is set to hard fail for SPF compliance") else ui.error("SPF TXT record is not set to hard fail for SPF compliance") end end end end end end end