lib/yoti/protobuf/main.rb in yoti-1.3.1 vs lib/yoti/protobuf/main.rb in yoti-1.4.0

- old
+ new

@@ -1,55 +1,80 @@ +$LOAD_PATH.unshift File.expand_path('./attrpubapi/', __dir__) + require 'google/protobuf' require 'json' -require_relative 'v3/attrpubapi/list_pb.rb' -require_relative 'v3/compubapi/encrypted_data_pb.rb' -require_relative 'v3/compubapi/signed_time_stamp_pb.rb' +require_relative 'attrpubapi/List_pb.rb' +require_relative 'compubapi/EncryptedData_pb.rb' +require_relative 'compubapi/SignedTimestamp_pb.rb' + module Yoti module Protobuf class << self CT_UNDEFINED = :UNDEFINED # should not be seen, and is used as an error placeholder CT_STRING = :STRING # UTF-8 encoded text. CT_JPEG = :JPEG # standard .jpeg image. CT_DATE = :DATE # string in RFC3339 format (YYYY-MM-DD) CT_PNG = :PNG # standard .png image CT_JSON = :JSON # json_string + CT_MULTI_VALUE = :MULTI_VALUE # multi value + CT_INT = :INT # integer def current_user(receipt) return nil unless valid_receipt?(receipt) profile_content = receipt['other_party_profile_content'] decoded_profile_content = Base64.decode64(profile_content) - Yoti::Protobuf::CompubapiV3::EncryptedData.decode(decoded_profile_content) + Yoti::Protobuf::Compubapi::EncryptedData.decode(decoded_profile_content) end def attribute_list(data) - Yoti::Protobuf::AttrpubapiV3::AttributeList.decode(data) + Yoti::Protobuf::Attrpubapi::AttributeList.decode(data) end - def value_based_on_content_type(value, content_type = nil) - case content_type - when CT_UNDEFINED - raise ProtobufError, 'The content type is invalid.' - when CT_STRING, CT_DATE - value.encode('utf-8') - when CT_JSON - JSON.parse(value) + def value_based_on_attribute_name(value, attr_name) + case attr_name + when Yoti::Attribute::DOCUMENT_IMAGES + raise(TypeError, 'Document Images could not be decoded') unless value.is_a?(Yoti::MultiValue) + + value.allow_type(Yoti::Image).items else value end end - def image_uri_based_on_content_type(value, content_type = nil) + def value_based_on_content_type(value, content_type = nil) + raise(TypeError, 'Warning: value is NULL') if value.empty? && content_type != CT_STRING + case content_type + when CT_STRING, CT_DATE + value.encode('utf-8') + when CT_JSON + JSON.parse(value) + when CT_INT + value.to_i when CT_JPEG - 'data:image/jpeg;base64,'.concat(Base64.strict_encode64(value)) + Yoti::ImageJpeg.new(value) when CT_PNG - 'data:image/png;base64,'.concat(Base64.strict_encode64(value)) + Yoti::ImagePng.new(value) + when CT_MULTI_VALUE + convert_multi_value(value) + else + Yoti::Log.logger.warn("Unknown Content Type '#{content_type}', parsing as a String") + value.encode('utf-8') end end private + + def convert_multi_value(value) + proto_multi_value = Yoti::Protobuf::Attrpubapi::MultiValue.decode(value) + items = [] + proto_multi_value.values.each do |item| + items.append value_based_on_content_type(item.data, item.content_type) + end + MultiValue.new(items) + end def valid_receipt?(receipt) receipt.key?('other_party_profile_content') && !receipt['other_party_profile_content'].nil? && receipt['other_party_profile_content'] != ''