Class: IosBackupExtractor::RawBackup
- Inherits:
-
Object
- Object
- IosBackupExtractor::RawBackup
- Includes:
- NauktisUtils::Logging
- Defined in:
- lib/ios_backup_extractor/raw_backup.rb
Direct Known Subclasses
Constant Summary collapse
- INFO_PLIST =
'Info.plist'
- MANIFEST_PLIST =
'Manifest.plist'
Instance Attribute Summary collapse
-
#info_plist ⇒ Object
readonly
Returns the value of attribute info_plist.
Instance Method Summary collapse
-
#archive_raw(destination, options = {}) ⇒ Object
Creates a tar archive of the backup without touching any files.
-
#archive_to(destination_directory, options = {}) ⇒ Object
Creates a tar archive of the backup with files extracted.
-
#extract_to(destination_directory, options = {}) ⇒ Object
Extracts the backup to
destination_directory
. -
#initialize(backup_directory) ⇒ RawBackup
constructor
A new instance of RawBackup.
-
#is_encrypted? ⇒ Boolean
Tells whether the backup is encrypted or not.
-
#to_s ⇒ Object
Prints one line information about the backup.
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_plist ⇒ Object (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, = {}) load!() 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, = {}) load!() Dir.mktmpdir(nil, [:temp_folder]) do |dir| parent_folder = extract_to(dir, ) 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 [: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, = {}) load!() = {name: 'full'}.merge() 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}_#{[:name]}") parent_directory = File.(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, ) 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.
68 69 70 |
# File 'lib/ios_backup_extractor/raw_backup.rb', line 68 def is_encrypted? @manifest_plist['IsEncrypted'] end |
#to_s ⇒ Object
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 |