PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backups, Restore, Migration & Clone / 4.11.0
WP STAGING – WordPress Backups, Restore, Migration & Clone v4.11.0
4.11.0 4.10.0 4.9.5 4.9.4 4.9.3 4.9.2 4.9.1 4.9.0 4.8.1 trunk 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.10.0 3.2.0 3.3.1 3.3.2 3.3.3 3.4.1 3.4.3 3.5.0 3.6.0 3.7.1 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.8.7 3.9.0 3.9.1 3.9.2 3.9.3 3.9.4 4.0.0 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.8.0
wp-staging / Backup / Service / BackupSigner.php
wp-staging / Backup / Service Last commit date
Compression 1 day ago Database 1 day ago DirectoryExplorer 1 day ago AbstractBackgroundBackupRequest.php 1 day ago AbstractBackupsFinder.php 1 day ago AbstractExtractor.php 1 day ago AbstractServiceProvider.php 1 day ago Archiver.php 1 day ago BackupAssets.php 1 day ago BackupContent.php 1 day ago BackupMetadataEditor.php 1 day ago BackupMetadataReader.php 1 day ago BackupSigner.php 1 day ago BackupsDirectoryResolver.php 1 day ago BackupsFinder.php 1 day ago BeforeUpdateBackupRequest.php 1 day ago BeforeUpdateBackupsService.php 1 day ago Extractor.php 1 day ago FileBackupService.php 1 day ago FileBackupServiceProvider.php 1 day ago ServiceInterface.php 1 day ago TmpBackupCleaner.php 1 day ago UpdateProtectionHealth.php 1 day ago UpdateProtectionSettings.php 1 day ago ZlibCompressor.php 1 day ago
BackupSigner.php
156 lines
1 <?php
2
3 namespace WPStaging\Backup\Service;
4
5 use RuntimeException;
6 use WPStaging\Backup\Dto\Job\JobBackupDataDto;
7 use WPStaging\Backup\Entity\BackupMetadata;
8 use WPStaging\Framework\Filesystem\FileObject;
9
10 class BackupSigner
11 {
12
13 protected $backupMetadataEditor;
14
15
16 protected $jobDataDto;
17
18
19
20
21 public function __construct(BackupMetadataEditor $backupMetadataEditor)
22 {
23 $this->backupMetadataEditor = $backupMetadataEditor;
24 }
25
26
27
28
29
30 public function setup(JobBackupDataDto $jobDataDto)
31 {
32 $this->jobDataDto = $jobDataDto;
33 }
34
35
36
37
38
39 public function signBackup(string $backupFilePath)
40 {
41 $this->signBackupFile($backupFilePath);
42 }
43
44
45
46
47
48 public function validateSignedBackup(string $backupFilePath)
49 {
50 $this->validateBackupFile($backupFilePath);
51 }
52
53
54
55
56
57
58
59
60
61
62
63
64 protected function signBackupFile(string $backupFilePath, int $backupSize = 0, int $partSize = 0)
65 {
66 clearstatcache();
67 if (!is_file($backupFilePath)) {
68 throw new \RuntimeException('The backup file is invalid: ' . $backupFilePath . '.');
69 }
70
71 $file = new FileObject($backupFilePath, FileObject::MODE_APPEND_AND_READ);
72 $backupMetadata = new BackupMetadata();
73 $backupMetadata = $backupMetadata->hydrateByFile($file);
74
75 if ($backupSize === 0) {
76 $backupSize = $file->getSize();
77
78 $backupSize = $this->reCalcBackupSize($backupSize);
79 }
80
81 $this->jobDataDto->setTotalBackupSize($backupSize);
82 $backupMetadata->setBackupSize($backupSize);
83 $this->signMultiPartMetadata($backupMetadata, $partSize);
84 $this->backupMetadataEditor->setBackupMetadata($file, $backupMetadata);
85 }
86
87
88
89
90
91
92
93 protected function validateBackupFile(string $backupFilePath, int $backupSize = 0, int $partSize = 0)
94 {
95 clearstatcache();
96 if (!is_file($backupFilePath)) {
97 throw new RuntimeException('The backup file does not exist: ' . $backupFilePath);
98 }
99
100 $file = new FileObject($backupFilePath);
101
102 $backupMetadata = new BackupMetadata();
103 $backupMetadata = $backupMetadata->hydrateByFile($file);
104
105 if ($backupMetadata->getName() !== $this->jobDataDto->getName()) {
106 throw new RuntimeException('Unexpected Name in Metadata.');
107 }
108
109 if ($backupSize === 0) {
110 $backupSize = $file->getSize();
111 }
112
113 if ($backupMetadata->getBackupSize() !== $backupSize) {
114 throw new RuntimeException(sprintf('Unexpected Backup Size in Metadata. Size in Metadata %s, Size in File %s', $backupMetadata->getBackupSize(), $backupSize));
115 }
116
117 $this->validateMultipartMetadata($backupMetadata, $partSize);
118 }
119
120
121
122
123
124
125 protected function signMultipartMetadata(BackupMetadata $backupMetadata, int $partSize)
126 {
127
128 }
129
130
131
132
133
134
135 protected function validateMultipartMetadata(BackupMetadata $backupMetadata, int $partSize)
136 {
137
138 }
139
140
141
142
143
144
145
146
147
148
149
150
151 private function reCalcBackupSize(int $backupSize = 0): int
152 {
153 return $backupSize - 2 + strlen((string)$backupSize);
154 }
155 }
156