18F/identity-idp

View on GitHub
app/services/idv/data_url_image.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true

module Idv
  class DataUrlImage
    class InvalidUrlFormatError < StandardError; end

    def initialize(data_url)
      header_and_data = data_url.delete_prefix('data:')
      raise InvalidUrlFormatError.new if header_and_data == data_url
      header, data = header_and_data.split(',', 2)
      @header = header
      @data = data
    end

    # @return [String]
    def content_type
      @header.split(';', 2).first
    end

    # @return [String]
    def read
      if base64_encoded?
        Base64.decode64(@data)
      else
        Addressable::URI.unencode(@data)
      end
    end

    private

    def base64_encoded?
      @header.end_with?(';base64')
    end
  end
end