# frozen_string_literal: true require "delegate" require "blather" class ProxiedJID < SimpleDelegator ESCAPED = /20|22|26|27|2f|3a|3c|3e|40|5c/.freeze def unproxied Blather::JID.new( node.gsub(/\\(#{ESCAPED})/) { |s| s[1..-1].to_i(16).chr } ) end def self.proxy(jid, suffix=CONFIG[:upstream_domain]) jid = Blather::JID.new(jid) ProxiedJID.new(Blather::JID.new( jid.stripped.to_s .gsub(/([ "&'\/:<>@]|\\(?=#{ESCAPED}))/) { |s| "\\#{s.ord.to_s(16)}" }, suffix, jid.resource )) end end