Class: IosBackupExtractor::RawBackup

Inherits:
Object
  • Object
show all
Includes:
NauktisUtils::Logging
Defined in:
lib/ios_backup_extractor/raw_backup.rb

Direct Known Subclasses

RawBackup10, RawBackup4

Constant Summary collapse

INFO_PLIST =
'Info.plist'
MANIFEST_PLIST =
'Manifest.plist'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(backup_directory) ⇒ RawBackup

Returns a new instance of RawBackup.



8
9
10
11
12
13
# File 'lib/ios_backup_extractor/raw_backup.rb', line 8

def initialize(backup_directory)
  @backup_directory = NauktisUtils::FileBrowser.ensure_valid_directory(backup_directory)
  @info_plist = InfoPlist.new(File.join(@backup_directory, INFO_PLIST))
  @manifest_plist = IosBackupExtractor.plist_file_to_hash(File.join(@backup_directory, MANIFEST_PLIST))
  raise 'This looks like a very old backup (iOS 3?)' unless @manifest_plist.has_key? 'BackupKeyBag'
end

Instance Attribute Details

#info_plistObject (readonly)

Returns the value of attribute info_plist.



4
5
6
# File 'lib/ios_backup_extractor/raw_backup.rb', line 4

def info_plist
  @info_plist
end

Instance Method Details

#archive_raw(destination, options = {}) ⇒ Object

Creates a tar archive of the backup without touching any files.



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/ios_backup_extractor/raw_backup.rb', line 18

def archive_raw(destination, options = {})
  load!(options)
  destination_directory = NauktisUtils::FileBrowser.ensure_valid_directory(destination)
  backup_name = NauktisUtils::FileBrowser.sanitize_name("#{@info_plist.last_backup_date.strftime('%Y_%m_%d')}_#{@info_plist.product_type}_iOS#{@info_plist.product_version}_#{@info_plist.serial_number}_raw")
  parent_folder = @backup_directory
  NauktisUtils::Archiver.new do
    add(parent_folder)
    destination(destination_directory)
    name(File.basename(backup_name))
  end
end

#archive_to(destination_directory, options = {}) ⇒ Object

Creates a tar archive of the backup with files extracted.



51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/ios_backup_extractor/raw_backup.rb', line 51

def archive_to(destination_directory, options = {})
  load!(options)
  Dir.mktmpdir(nil, options[:temp_folder]) do |dir|
    parent_folder = extract_to(dir, options)
    logger.debug(self.class.name) { "Starting archiving of #{parent_folder}" }
    NauktisUtils::Archiver.new do
      add(parent_folder)
      destination(destination_directory)
      name(File.basename(parent_folder))
      compress(:bzip2) if options[:compress]
    end
  end
end

#extract_to(destination_directory, options = {}) ⇒ Object

Extracts the backup to destination_directory.



33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/ios_backup_extractor/raw_backup.rb', line 33

def extract_to(destination_directory, options = {})
  load!(options)
  options = {name: 'full'}.merge(options)
  destination_directory = NauktisUtils::FileBrowser.ensure_valid_directory(destination_directory)
  backup_name = NauktisUtils::FileBrowser.sanitize_name("#{@info_plist.last_backup_date.strftime('%Y_%m_%d')}_#{@info_plist.product_type}_iOS#{@info_plist.product_version}_#{@info_plist.serial_number}_#{options[:name]}")
  parent_directory = File.expand_path(File.join(destination_directory, backup_name))
  raise "Backup destination already exists. #{parent_directory}" if File.exist? parent_directory
  FileUtils.mkdir(parent_directory)
  logger.info(self.class.name) { "Starting backup extraction in directory #{parent_directory}" }
  copy_files(parent_directory, options)
  add_files_with_extensions(parent_directory)
  logger.info(self.class.name) { "Backup extraction finished. #{IosBackupExtractor.file_count(parent_directory)} files extracted." }
  parent_directory
end

#is_encrypted?Boolean

Tells whether the backup is encrypted or not.

Returns:

  • (Boolean)


68
69
70
# File 'lib/ios_backup_extractor/raw_backup.rb', line 68

def is_encrypted?
  @manifest_plist['IsEncrypted']
end

#to_sObject

Prints one line information about the backup



73
74
75
# File 'lib/ios_backup_extractor/raw_backup.rb', line 73

def to_s
  @info_plist.to_s
end