Sha256: 928dbf82a1de7d39f68b9f2ad66c03aa0eaabd4e5db888fc8f0be20ccc18ce2c

Contents?: true

Size: 1.31 KB

Versions: 20

Compression:

Stored size: 1.31 KB

Contents

# frozen_string_literal: true

module OoxmlParser
  # Check if file is encrypted
  class EncryptionChecker
    def initialize(file_path, ignore_system: false)
      @file_path = file_path
      @ignore_system = ignore_system
    end

    # @return [Boolean] is file encrypted
    def encrypted?
      return false unless compatible_system?

      # Support of Encrypted status in `file` util was introduced in file v5.20
      # but LTS version of ubuntu before 16.04 uses older `file` and it return `Composite Document`
      # https://github.com/file/file/blob/0eb7c1b83341cc954620b45d2e2d65ee7df1a4e7/ChangeLog#L623
      if mime_type.include?('encrypted') ||
         mime_type.include?('Composite Document File V2 Document, No summary info') ||
         mime_type.include?('application/CDFV2-corrupt')
        warn("File #{@file_path} is encrypted. Can't parse it")
        return true
      end
      false
    end

    private

    # Check if system is compatible with `file` utility
    # @return [Boolean] Result of check
    def compatible_system?
      return true if !Gem.win_platform? && !@ignore_system

      warn 'Checking file for encryption is not supported on Windows'
      false
    end

    # @return [String] mime type of file
    def mime_type
      @mime_type ||= `file -b --mime "#{@file_path}"`
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
ooxml_parser-0.38.0 lib/ooxml_parser/common_parser/parser/encryption_checker.rb
ooxml_parser-0.37.1 lib/ooxml_parser/common_parser/parser/encryption_checker.rb
ooxml_parser-0.37.0 lib/ooxml_parser/common_parser/parser/encryption_checker.rb
ooxml_parser-0.36.1 lib/ooxml_parser/common_parser/parser/encryption_checker.rb
ooxml_parser-0.36.0 lib/ooxml_parser/common_parser/parser/encryption_checker.rb
ooxml_parser-0.35.0 lib/ooxml_parser/common_parser/parser/encryption_checker.rb
ooxml_parser-0.34.2 lib/ooxml_parser/common_parser/parser/encryption_checker.rb
ooxml_parser-0.34.1 lib/ooxml_parser/common_parser/parser/encryption_checker.rb
ooxml_parser-0.34.0 lib/ooxml_parser/common_parser/parser/encryption_checker.rb
ooxml_parser-0.33.0 lib/ooxml_parser/common_parser/parser/encryption_checker.rb
ooxml_parser-0.32.0 lib/ooxml_parser/common_parser/parser/encryption_checker.rb
ooxml_parser-0.31.0 lib/ooxml_parser/common_parser/parser/encryption_checker.rb
ooxml_parser-0.30.0 lib/ooxml_parser/common_parser/parser/encryption_checker.rb
ooxml_parser-0.29.0 lib/ooxml_parser/common_parser/parser/encryption_checker.rb
ooxml_parser-0.28.0 lib/ooxml_parser/common_parser/parser/encryption_checker.rb
ooxml_parser-0.27.0 lib/ooxml_parser/common_parser/parser/encryption_checker.rb
ooxml_parser-0.26.0 lib/ooxml_parser/common_parser/parser/encryption_checker.rb
ooxml_parser-0.25.0 lib/ooxml_parser/common_parser/parser/encryption_checker.rb
ooxml_parser-0.24.0 lib/ooxml_parser/common_parser/parser/encryption_checker.rb
ooxml_parser-0.23.0 lib/ooxml_parser/common_parser/parser/encryption_checker.rb