module McAPI::Utils
Utils
module
Public Class Methods
contains(config, props)
click to toggle source
# File lib/mcapi/encryption/utils/utils.rb, line 57 def self.contains(config, props) props.any? do |i| config.key? i end end
create_message_digest(digest)
click to toggle source
Create Digest object for the provided digest string
# File lib/mcapi/encryption/utils/utils.rb, line 44 def self.create_message_digest(digest) return unless digest case digest.upcase when 'SHA-256', 'SHA256' OpenSSL::Digest::SHA256 when 'SHA-512', 'SHA512' OpenSSL::Digest::SHA512 else raise 'Digest algorithm not supported' end end
decode(data, encoding)
click to toggle source
Data decoding
# File lib/mcapi/encryption/utils/utils.rb, line 28 def self.decode(data, encoding) return unless encoding case encoding.downcase when 'hex' [data].pack('H*') when 'base64' Base64.decode64(data) else raise 'Encoding not supported' end end
delete_node(path, obj, properties = [])
click to toggle source
Delete node from JSON object
# File lib/mcapi/encryption/utils/utils.rb, line 96 def self.delete_node(path, obj, properties = []) return unless path && obj paths = path.split('.') to_delete = paths[paths.size - 1] paths.each_with_index do |e, index| prev = obj next unless obj[e] obj = obj[e] prev.delete(to_delete) if obj && index == paths.size - 1 end properties.each { |e| obj.delete(e) } if paths.empty? end
encode(data, encoding)
click to toggle source
Data encoding
# File lib/mcapi/encryption/utils/utils.rb, line 12 def self.encode(data, encoding) return unless encoding case encoding.downcase when 'hex' data.each_byte.map { |b| format('%02x', b.to_i) }.join when 'base64' Base64.encode64(data).delete("\n") else raise 'Encoding not supported' end end
mutate_obj_prop(path, value, obj, src_path = nil, properties = [])
click to toggle source
Perform JSON object properties manipulations
# File lib/mcapi/encryption/utils/utils.rb, line 66 def self.mutate_obj_prop(path, value, obj, src_path = nil, properties = []) tmp = obj prev = nil return unless path delete_node(src_path, obj, properties) if src_path paths = path.split('.') paths.each do |e| tmp[e] = {} unless tmp[e] prev = tmp tmp = tmp[e] end elem = path.split('.').pop if value.is_a?(Hash) && !value.is_a?(Array) prev[elem] = {} unless prev[elem].is_a?(Hash) override_props(prev[elem], value) else prev[elem] = value end end
override_props(target, obj)
click to toggle source
# File lib/mcapi/encryption/utils/utils.rb, line 87 def self.override_props(target, obj) obj.each do |k, _| target[k] = obj[k] end end
parse_header(raw)
click to toggle source
Parse raw HTTP Header
# File lib/mcapi/encryption/utils/utils.rb, line 114 def self.parse_header(raw) raw = raw.partition("\n").last header = Hash.new([].freeze) field = nil raw.each_line do |line| case line when /^([A-Za-z0-9!\#$%&'*+\-.^_`|~]+):\s*(.*?)\s*\z/om field = Regexp.last_match(1) value = Regexp.last_match(2) field.downcase! header[field] = [] unless header.key?(field) header[field] << value when /^\s+(.*?)\s*\z/om value = Regexp.last_match(1) raise Exception, "bad header '#{line}'." unless field header[field][-1] << ' ' << value else raise Exception, "bad header '#{line}'." end end header.each do |_key, values| values.each do |value| value.strip! value.gsub!(/\s+/, ' ') end end header end