# frozen_string_literal: true
require "delegate"
require "blather"
class ProxiedJID < SimpleDelegator
ESCAPED = /20|22|26|27|2f|3a|3c|3e|40|5c/
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])
ProxiedJID.new(
Blather::JID.new(
jid.stripped.to_s
.gsub(/([ "&'\/:<>@]|\\(?=#{ESCAPED}))/) { |s|
"\\#{s.ord.to_s(16)}"
},
suffix,
jid.resource
)
)
end
end