Mage_Downloader - Version 1.9.3.0

Version Notes

1.9.3.0

Download this release

Release Info

Developer Magento Core Team
Extension Mage_Downloader
Version 1.9.3.0
Comparing to
See all releases


Code changes from version 1.9.2.4 to 1.9.3.0

.htaccess CHANGED
@@ -144,6 +144,21 @@
144
  RewriteCond %{REQUEST_METHOD} ^TRAC[EK]
145
  RewriteRule .* - [L,R=405]
146
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
147
  ############################################
148
  ## redirect for mobile user agents
149
 
144
  RewriteCond %{REQUEST_METHOD} ^TRAC[EK]
145
  RewriteRule .* - [L,R=405]
146
 
147
+ <IfModule mod_setenvif.c>
148
+ <IfModule mod_headers.c>
149
+
150
+ ############################################
151
+ # X-Content-Type-Options: nosniff disable content-type sniffing on some browsers.
152
+ Header set X-Content-Type-Options: nosniff
153
+
154
+ ############################################
155
+ # This header forces to enables the Cross-site scripting (XSS) filter in browsers (if disabled)
156
+ BrowserMatch \bMSIE\s8 ie8
157
+ Header set X-XSS-Protection: "1; mode=block" env=!ie8
158
+
159
+ </IfModule>
160
+ </IfModule>
161
+
162
  ############################################
163
  ## redirect for mobile user agents
164
 
downloader/Maged/BruteForce/Validator.php ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magento.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magento.com for more information.
21
+ *
22
+ * @category Mage
23
+ * @package Mage_Connect
24
+ * @copyright Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (http://www.magento.com)
25
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
26
+ */
27
+ class Maged_BruteForce_Validator
28
+ {
29
+ const MODEL_KEY_ATTEMPTS_COUNT = "brute-force-attempts-count";
30
+ const MODEL_KEY_BAD_ATTEMPTS_COUNT = "brute-force-bad-attempts-count";
31
+ const MODEL_KEY_LAST_BAD_TIME = "brute-force-last-bad-time";
32
+ const MODEL_KEY_DIFF_TIME_TO_ATTEMPT = "brute-force-diff-time-to-attempt";
33
+
34
+ const DEFAULT_ATTEMPTS_COUNT = 3;
35
+ const DEFAULT_BAD_ATTEMPTS_COUNT = 0;
36
+ const DEFAULT_DIFF_TIME_TO_ATTEMPT = 180;// 3 minutes
37
+
38
+
39
+ /** @var Maged_Model_BruteForce_ModelConfigInterface */
40
+ protected $model;
41
+
42
+ /**
43
+ * BruteForce constructor.
44
+ * @param Maged_Model_BruteForce_ModelConfigInterface $model
45
+ */
46
+ public function __construct(Maged_Model_BruteForce_ModelConfigInterface $model)
47
+ {
48
+ $this->model = $model;
49
+ }
50
+
51
+ /**
52
+ * @return bool
53
+ */
54
+ public function isCanLogin()
55
+ {
56
+ $badAttempts = $this->getBadAttempts();
57
+ $configAttemptsCount = $this->getConfigAttemptsCount();
58
+
59
+ if ($badAttempts >= $configAttemptsCount and $badAttempts % $configAttemptsCount === 0) {
60
+ $lastBadLogin = intval($this->model->get(self::MODEL_KEY_LAST_BAD_TIME));
61
+ if ($lastBadLogin > 0) {
62
+ $timeDiff = $this->model->get(self::MODEL_KEY_DIFF_TIME_TO_ATTEMPT, self::DEFAULT_DIFF_TIME_TO_ATTEMPT);
63
+ $currentTime = time();
64
+ $checkTime = $lastBadLogin + $timeDiff;
65
+ if ($checkTime > $currentTime) {
66
+ return false;
67
+ }
68
+ }
69
+ }
70
+ return true;
71
+ }
72
+
73
+ /**
74
+ * @return int
75
+ */
76
+ protected function getBadAttempts()
77
+ {
78
+ return (int)$this->model->get(self::MODEL_KEY_BAD_ATTEMPTS_COUNT, self::DEFAULT_BAD_ATTEMPTS_COUNT);
79
+ }
80
+
81
+ /**
82
+ * @return int
83
+ */
84
+ protected function getConfigAttemptsCount()
85
+ {
86
+ return (int)$this->model->get(self::MODEL_KEY_ATTEMPTS_COUNT, self::DEFAULT_ATTEMPTS_COUNT);
87
+ }
88
+
89
+ /**
90
+ * @return int
91
+ */
92
+ public function getTimeToAttempt()
93
+ {
94
+ return (int)$this->model->get(self::MODEL_KEY_DIFF_TIME_TO_ATTEMPT, self::DEFAULT_DIFF_TIME_TO_ATTEMPT);
95
+ }
96
+
97
+ /**
98
+ * @return $this
99
+ */
100
+ public function doGoodLogin()
101
+ {
102
+ $this->reset();
103
+ return $this;
104
+ }
105
+
106
+ /**
107
+ * @return void
108
+ */
109
+ public function reset()
110
+ {
111
+ $this->model
112
+ ->set(self::MODEL_KEY_BAD_ATTEMPTS_COUNT, self::DEFAULT_BAD_ATTEMPTS_COUNT)
113
+ ->set(self::MODEL_KEY_DIFF_TIME_TO_ATTEMPT, self::DEFAULT_DIFF_TIME_TO_ATTEMPT)
114
+ ->delete(self::MODEL_KEY_LAST_BAD_TIME)
115
+ ->save();
116
+ }
117
+
118
+ /**
119
+ * @return $this
120
+ */
121
+ public function doBadLogin()
122
+ {
123
+ $badAttempts = $this->getBadAttempts() + 1;
124
+ $configAttemptsCount = $this->getConfigAttemptsCount();
125
+ $timeToNextLogin = $this->getDiffTimeToNextAttempt();
126
+
127
+ if ($badAttempts % $configAttemptsCount == 0 and $badAttempts != $configAttemptsCount) {
128
+ $timeToNextLogin += self::DEFAULT_DIFF_TIME_TO_ATTEMPT;
129
+ }
130
+
131
+ $this->model
132
+ ->set(self::MODEL_KEY_BAD_ATTEMPTS_COUNT, $badAttempts)
133
+ ->set(self::MODEL_KEY_DIFF_TIME_TO_ATTEMPT, $timeToNextLogin)
134
+ ->set(self::MODEL_KEY_ATTEMPTS_COUNT, $configAttemptsCount)
135
+ ->set(self::MODEL_KEY_LAST_BAD_TIME, time())
136
+ ->save();
137
+
138
+ return $this;
139
+ }
140
+
141
+ /**
142
+ * @return int
143
+ */
144
+ protected function getDiffTimeToNextAttempt()
145
+ {
146
+ return (int)$this->model->get(self::MODEL_KEY_DIFF_TIME_TO_ATTEMPT, self::DEFAULT_DIFF_TIME_TO_ATTEMPT);
147
+ }
148
+ }
downloader/Maged/Connect.php CHANGED
@@ -459,12 +459,9 @@ function clear_cache(callbacks)
459
  onSuccess: function(transport, json) {
460
  var result = true;
461
  try{
462
- var response = eval('(' + transport.responseText + ')');
463
- if (typeof response.result != 'undefined') {
464
- result = response.result;
465
- } else {
466
- result = false;
467
- }
468
  if (typeof response.message != 'undefined') {
469
  if (response.message.length > 0) {
470
  message = response.message;
459
  onSuccess: function(transport, json) {
460
  var result = true;
461
  try{
462
+ var response = transport.responseJSON || transport.responseText.evalJSON(true) || {};
463
+ result = response.result || false;
464
+
 
 
 
465
  if (typeof response.message != 'undefined') {
466
  if (response.message.length > 0) {
467
  message = response.message;
downloader/Maged/Connect/Frontend.php CHANGED
@@ -117,10 +117,12 @@ class Maged_Connect_Frontend extends Mage_Connect_Frontend
117
  */
118
  public function confirm($string)
119
  {
120
- $formId = $_POST['form_id'];
 
 
121
  echo <<<SCRIPT
122
  <script type="text/javascript">
123
- if (confirm("{$string}")) {
124
  parent.document.getElementById('ignore_local_modification').value=1;
125
  parent.onSuccess();
126
  if (parent && parent.disableInputs) {
117
  */
118
  public function confirm($string)
119
  {
120
+ $confirmString = htmlentities($string, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
121
+ $formId = htmlspecialchars($_POST['form_id'], ENT_COMPAT | ENT_HTML401, 'UTF-8');
122
+
123
  echo <<<SCRIPT
124
  <script type="text/javascript">
125
+ if (confirm("{$confirmString}")) {
126
  parent.document.getElementById('ignore_local_modification').value=1;
127
  parent.onSuccess();
128
  if (parent && parent.disableInputs) {
downloader/Maged/Controller.php CHANGED
@@ -34,6 +34,10 @@
34
  */
35
  final class Maged_Controller
36
  {
 
 
 
 
37
  /**
38
  * Request key of action
39
  */
@@ -820,7 +824,18 @@ final class Maged_Controller
820
  $this->setAction('index');
821
  }
822
  } else {
823
- $this->session()->authenticate();
 
 
 
 
 
 
 
 
 
 
 
824
  }
825
 
826
  while (!$this->_isDispatched) {
@@ -1033,8 +1048,8 @@ final class Maged_Controller
1033
  return array(
1034
  'major' => '1',
1035
  'minor' => '9',
1036
- 'revision' => '2',
1037
- 'patch' => '4',
1038
  'stability' => '',
1039
  'number' => '',
1040
  );
@@ -1151,4 +1166,71 @@ final class Maged_Controller
1151
  {
1152
  return $this->session()->getFormKey();
1153
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1154
  }
34
  */
35
  final class Maged_Controller
36
  {
37
+
38
+ const DOWNLOADER_DIRECTORY = "downloader";
39
+ const BRUTE_FORCE_CONFIG_NAME = "brute-force.ini";
40
+
41
  /**
42
  * Request key of action
43
  */
824
  $this->setAction('index');
825
  }
826
  } else {
827
+ try {
828
+ /** @var Maged_BruteForce_Validator $bruteForce */
829
+ $bruteForce = $this->createBruteForceValidator();
830
+ if ($bruteForce->isCanLogin()) {
831
+ $this->session()->authenticate($bruteForce);
832
+ } else {
833
+ throw new Exception ("Access is locked. Please try again in a few minutes.");
834
+ }
835
+ } catch (Exception $e) {
836
+ $this->session()->addMessage("error", $e->getMessage());
837
+ $this->setAction("login");
838
+ }
839
  }
840
 
841
  while (!$this->_isDispatched) {
1048
  return array(
1049
  'major' => '1',
1050
  'minor' => '9',
1051
+ 'revision' => '3',
1052
+ 'patch' => '0',
1053
  'stability' => '',
1054
  'number' => '',
1055
  );
1166
  {
1167
  return $this->session()->getFormKey();
1168
  }
1169
+
1170
+ /**
1171
+ * @return Maged_BruteForce_Validator
1172
+ * @throws Exception
1173
+ */
1174
+ protected function createBruteForceValidator()
1175
+ {
1176
+ $isRemote = (strlen($this->config()->remote_config) > 0);
1177
+ $localFileName = ($isRemote) ? "brute-force.tmp.ini" : self::BRUTE_FORCE_CONFIG_NAME;
1178
+ $localFile = $this->getBruteForceLocalFile($localFileName);
1179
+
1180
+ if (!is_file($localFile)) {
1181
+ $this->createBruteForceTemporaryFile($localFile, $this->getBruteForceLocalDirectory());
1182
+ }
1183
+ if (!is_writable($localFile)) {
1184
+ throw new Exception("Unable to write to the configuration file.");
1185
+ }
1186
+ if ($isRemote) {
1187
+ $resource = new Maged_Model_BruteForce_Resource_FTP($this->config()->remote_config, $localFile, self::DOWNLOADER_DIRECTORY . DIRECTORY_SEPARATOR . self::BRUTE_FORCE_CONFIG_NAME);
1188
+ } else {
1189
+ $resource = new Maged_Model_BruteForce_Resource_File($localFile, self::DOWNLOADER_DIRECTORY . DIRECTORY_SEPARATOR . self::BRUTE_FORCE_CONFIG_NAME);
1190
+ }
1191
+ return new Maged_BruteForce_Validator(new Maged_Model_BruteForce_ConfigIni($resource));
1192
+ }
1193
+
1194
+ /**
1195
+ * @param string $fileName
1196
+ * @return false |string
1197
+ */
1198
+ protected function getBruteForceLocalFile($fileName)
1199
+ {
1200
+ $varFolder = $this->getBruteForceLocalDirectory();
1201
+ return rtrim($varFolder . DIRECTORY_SEPARATOR . str_replace('/', DIRECTORY_SEPARATOR, $fileName), DIRECTORY_SEPARATOR);
1202
+ }
1203
+
1204
+ /**
1205
+ * @param string $localBruteForceConfigFile
1206
+ * @param string $folder
1207
+ * @throws Exception
1208
+ */
1209
+ protected function createBruteForceTemporaryFile($localBruteForceConfigFile, $folder)
1210
+ {
1211
+ $error = false;
1212
+ if (!is_dir($folder)) {
1213
+ if (false === mkdir($folder)) {
1214
+ $error = true;
1215
+ };
1216
+ }
1217
+ $fp = fopen($localBruteForceConfigFile, "w");
1218
+ if ($fp !== false) {
1219
+ fclose($fp);
1220
+ } else {
1221
+ $error = true;
1222
+ }
1223
+
1224
+ if ($error) {
1225
+ throw new Exception("Unable to create a temporary file. Please add write permission to the var/ folder.");
1226
+ }
1227
+ }
1228
+
1229
+ /**
1230
+ * @return string
1231
+ */
1232
+ protected function getBruteForceLocalDirectory()
1233
+ {
1234
+ return $this->getMageDir() . DIRECTORY_SEPARATOR . "var" . DIRECTORY_SEPARATOR;
1235
+ }
1236
  }
downloader/Maged/Model/BruteForce/ConfigIni.php ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magento.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magento.com for more information.
21
+ *
22
+ * @category Mage
23
+ * @package Mage_Connect
24
+ * @copyright Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (http://www.magento.com)
25
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
26
+ */
27
+ class Maged_Model_BruteForce_ConfigIni implements Maged_Model_BruteForce_ModelConfigInterface
28
+ {
29
+ /**
30
+ * @var array
31
+ */
32
+ protected $data = array();
33
+ /**
34
+ * @var Maged_Model_BruteForce_Resource_ResourceInterface
35
+ */
36
+ private $resource;
37
+
38
+ /**
39
+ * BruteForceConfig constructor.
40
+ * @param Maged_Model_BruteForce_Resource_ResourceInterface $resource
41
+ * @throws Exception
42
+ */
43
+ public function __construct(Maged_Model_BruteForce_Resource_ResourceInterface $resource)
44
+ {
45
+ if ($resource->isReadable()) {
46
+ $this->resource = $resource;
47
+ $this->readConfig();
48
+ } else {
49
+ throw new Exception("Unable to read the configuration file.");
50
+ }
51
+ }
52
+
53
+ /**
54
+ * @throws Exception
55
+ */
56
+ public function readConfig()
57
+ {
58
+ if (false === $data = parse_ini_string($this->resource->read())) {
59
+ throw new Exception("Incorrect configuration file.");
60
+ }
61
+ $this->data = $data;
62
+ }
63
+
64
+ /**
65
+ * @param string $name
66
+ * @param null $defaultValue
67
+ * @return mixed|null
68
+ */
69
+ public function get($name, $defaultValue = null)
70
+ {
71
+ return (isset($this->data[$name]) ? $this->data[$name] : $defaultValue);
72
+ }
73
+
74
+ /**
75
+ * @param string $name
76
+ * @param mixed $value
77
+ * @return $this
78
+ * @throws Exception
79
+ */
80
+ public function set($name, $value)
81
+ {
82
+ if (is_array($value) or is_object($value)) {
83
+ throw new Exception ("Bad value type.");
84
+ }
85
+ $this->data[$name] = $value;
86
+ return $this;
87
+ }
88
+
89
+ public function save()
90
+ {
91
+ if ($this->resource->isWritable()) {
92
+ $res = array();
93
+ foreach ($this->data as $key => $value) {
94
+ $res[] = "$key = " . (is_numeric($value) ? $value : '"' . $value . '"');
95
+ }
96
+ $content = implode("\n", $res);
97
+ $this->resource->write($content);
98
+ } else {
99
+ throw new Exception("Unable to write to the configuration file.");
100
+ }
101
+ }
102
+
103
+ /**
104
+ * @param string $name
105
+ * @return $this
106
+ */
107
+ public function delete($name)
108
+ {
109
+ if (isset($this->data[$name])) {
110
+ unset($this->data[$name]);
111
+ }
112
+ return $this;
113
+ }
114
+
115
+ }
downloader/Maged/Model/BruteForce/ModelConfigInterface.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magento.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magento.com for more information.
20
+ *
21
+ * @category Mage
22
+ * @package Mage_Connect
23
+ * @copyright Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (http://www.magento.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ interface Maged_Model_BruteForce_ModelConfigInterface
28
+ {
29
+
30
+ /**
31
+ * @param string $key
32
+ * @param mixed|null $defaultValue
33
+ * @return mixed
34
+ */
35
+ public function get($key, $defaultValue = null);
36
+
37
+ /**
38
+ * @param string $key
39
+ * @param mixed $value
40
+ * @return Maged_Model_BruteForce_ModelConfigInterface
41
+ * @throws Exception
42
+ */
43
+ public function set($key, $value);
44
+
45
+ /**
46
+ * @return void
47
+ */
48
+ public function save();
49
+
50
+ /**
51
+ * @param string $key
52
+ * @return Maged_Model_BruteForce_ModelConfigInterface
53
+ */
54
+ public function delete($key);
55
+ }
downloader/Maged/Model/BruteForce/Resource/FTP.php ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magento.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magento.com for more information.
21
+ *
22
+ * @category Mage
23
+ * @package Mage_Connect
24
+ * @copyright Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (http://www.magento.com)
25
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
26
+ */
27
+ class Maged_Model_BruteForce_Resource_FTP implements Maged_Model_BruteForce_Resource_ResourceInterface
28
+ {
29
+ /** @var string */
30
+ protected $connectionString;
31
+ /** @var Mage_Connect_Ftp */
32
+ protected $ftp;
33
+ /**
34
+ * @var string
35
+ */
36
+ private $localFilePath;
37
+ /**
38
+ * @var string
39
+ */
40
+ private $remoteFilePath;
41
+
42
+ /**
43
+ * FTP constructor.
44
+ * @param $connectionString
45
+ * @param $localFilePath
46
+ * @param $remoteFileName
47
+ * @throws Exception
48
+ */
49
+ public function __construct($connectionString, $localFilePath, $remoteFileName)
50
+ {
51
+ $this->connectionString = $connectionString;
52
+ $this->ftp = new Mage_Connect_Ftp();
53
+ $this->localFilePath = $localFilePath;
54
+ $this->remoteFilePath = $remoteFileName;
55
+
56
+ $this->ftp->connect($this->connectionString);
57
+ }
58
+
59
+ /**
60
+ * @return string
61
+ */
62
+ public function read()
63
+ {
64
+ if ($this->isReadable()) {
65
+ return file_get_contents($this->localFilePath);
66
+ }
67
+ return false;
68
+ }
69
+
70
+ /**
71
+ * @return boolean
72
+ */
73
+ public function isReadable()
74
+ {
75
+ return ($this->ftp->get($this->localFilePath, $this->remoteFilePath) === true);
76
+ }
77
+
78
+ public function __destruct()
79
+ {
80
+ unlink($this->localFilePath);
81
+ $this->ftp->close();
82
+ }
83
+
84
+ /**
85
+ * @param string $content
86
+ * @return boolean
87
+ */
88
+ public function write($content)
89
+ {
90
+ if ($this->isWritable()) {
91
+ file_put_contents($this->localFilePath, $content);
92
+ return $this->ftp->upload(
93
+ $this->remoteFilePath,
94
+ $this->localFilePath
95
+ );
96
+ }
97
+ return false;
98
+ }
99
+
100
+ /**
101
+ * @return string
102
+ */
103
+ public function isWritable()
104
+ {
105
+ return ($this->isReadable());
106
+ }
107
+
108
+ /**
109
+ * @return string
110
+ */
111
+ public function getResourcePath()
112
+ {
113
+ return $this->remoteFilePath;
114
+ }
115
+ }
downloader/Maged/Model/BruteForce/Resource/File.php ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magento.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magento.com for more information.
21
+ *
22
+ * @category Mage
23
+ * @package Mage_Connect
24
+ * @copyright Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (http://www.magento.com)
25
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
26
+ */
27
+ class Maged_Model_BruteForce_Resource_File implements Maged_Model_BruteForce_Resource_ResourceInterface
28
+ {
29
+ /** @var string */
30
+ protected $filePath;
31
+ /** @var string */
32
+ protected $displayFileName;
33
+
34
+ /**
35
+ * File constructor.
36
+ * @param string $filePath
37
+ * @param displayFileName
38
+ */
39
+ public function __construct($filePath, $displayFileName)
40
+ {
41
+ $this->filePath = $filePath;
42
+ $this->displayFileName = $displayFileName;
43
+ }
44
+
45
+ /**
46
+ * @return string
47
+ */
48
+ public function read()
49
+ {
50
+ if ($this->isReadable()) {
51
+ return file_get_contents($this->filePath);
52
+ }
53
+ return false;
54
+ }
55
+
56
+ /**
57
+ * @return boolean
58
+ */
59
+ public function isReadable()
60
+ {
61
+ return (is_file($this->filePath) and is_readable($this->filePath));
62
+ }
63
+
64
+ /**
65
+ * @param string $content
66
+ * @return boolean
67
+ */
68
+ public function write($content)
69
+ {
70
+ if ($this->isWritable()) {
71
+ return (boolean)file_put_contents($this->filePath, $content);
72
+ }
73
+ return false;
74
+ }
75
+
76
+ /**
77
+ * @return string
78
+ */
79
+ public function isWritable()
80
+ {
81
+ return (is_file($this->filePath) and is_writable($this->filePath));
82
+ }
83
+
84
+ /**
85
+ * @return string
86
+ */
87
+ public function getResourcePath()
88
+ {
89
+ return $this->displayFileName;
90
+ }
91
+ }
downloader/Maged/Model/BruteForce/Resource/ResourceInterface.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/osl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magento.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magento.com for more information.
21
+ *
22
+ * @category Mage
23
+ * @package Mage_Connect
24
+ * @copyright Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (http://www.magento.com)
25
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
26
+ */
27
+ interface Maged_Model_BruteForce_Resource_ResourceInterface
28
+ {
29
+ /**
30
+ * @return boolean
31
+ */
32
+ public function isReadable();
33
+
34
+ /**
35
+ * @return string
36
+ */
37
+ public function read();
38
+
39
+ /**
40
+ * @return string
41
+ */
42
+ public function isWritable();
43
+
44
+ /**
45
+ * @param string $content
46
+ * @return boolean
47
+ */
48
+ public function write($content);
49
+
50
+ /**
51
+ * @return string
52
+ */
53
+ public function getResourcePath();
54
+ }
downloader/Maged/Model/Session.php CHANGED
@@ -83,8 +83,10 @@ class Maged_Model_Session extends Maged_Model
83
 
84
  /**
85
  * Authentication to downloader
 
 
86
  */
87
- public function authenticate()
88
  {
89
  if (!$this->_session) {
90
  return $this;
@@ -121,7 +123,10 @@ class Maged_Model_Session extends Maged_Model
121
  $user = $this->_session->login($_POST['username'], $_POST['password']);
122
  $this->_session->refreshAcl();
123
  if ($this->_checkUserAccess($user)) {
 
124
  return $this;
 
 
125
  }
126
  } catch (Exception $e) {
127
  $this->addMessage('error', $e->getMessage());
83
 
84
  /**
85
  * Authentication to downloader
86
+ * @param Maged_BruteForce_Validator $bruteForceValidator
87
+ * @return $this
88
  */
89
+ public function authenticate(Maged_BruteForce_Validator $bruteForceValidator )
90
  {
91
  if (!$this->_session) {
92
  return $this;
123
  $user = $this->_session->login($_POST['username'], $_POST['password']);
124
  $this->_session->refreshAcl();
125
  if ($this->_checkUserAccess($user)) {
126
+ $bruteForceValidator->doGoodLogin();
127
  return $this;
128
+ } else {
129
+ $bruteForceValidator->doBadLogin();
130
  }
131
  } catch (Exception $e) {
132
  $this->addMessage('error', $e->getMessage());
downloader/lib/Mage/Connect/Packager.php CHANGED
@@ -247,7 +247,8 @@ class Mage_Connect_Packager
247
  if (@rmdir($dir)) {
248
  $this->removeEmptyDirectory(dirname($dir), $ftp);
249
  } else {
250
- throw new RuntimeException('Failed to delete dir ' . $dir . "\r\n Check permissions");
 
251
  }
252
  }
253
  }
@@ -275,7 +276,7 @@ class Mage_Connect_Packager
275
  $dest = $targetPath . DIRECTORY_SEPARATOR . $filePath . DIRECTORY_SEPARATOR . $fileName;
276
  if(@file_exists($dest)) {
277
  if (!@unlink($dest)) {
278
- $failedFiles[] = $dest;
279
  }
280
  }
281
  $this->removeEmptyDirectory(dirname($dest));
@@ -308,7 +309,7 @@ class Mage_Connect_Packager
308
  foreach ($contents as $file) {
309
  $ftp->delete($file);
310
  if ($ftp->fileExists($file)) {
311
- $failedFiles[] = $file;
312
  continue;
313
  }
314
  $this->removeEmptyDirectory(dirname($file), $ftp);
@@ -402,14 +403,14 @@ class Mage_Connect_Packager
402
  $failedFiles = array();
403
  foreach ($contents as $file) {
404
  $source = $tar . DS . $file;
405
- if (file_exists($source) && is_file($source)) {
406
  $args = array(ltrim($file,"/"), $source);
407
  if($modeDir||$modeFile) {
408
  $args[] = $modeDir;
409
  $args[] = $modeFile;
410
  }
411
  if (call_user_func_array(array($ftp,'upload'), $args) === false) {
412
- $failedFiles[] = $source;
413
  }
414
  }
415
  }
@@ -457,7 +458,7 @@ class Mage_Connect_Packager
457
  $filePath = dirname($file);
458
  $source = $tar . DS . $file;
459
  $dest = $targetPath . DS . $filePath . DS . $fileName;
460
- if (is_file($source)) {
461
  @copy($source, $dest);
462
  if($modeFile) {
463
  @chmod($dest, $modeFile);
@@ -498,7 +499,7 @@ class Mage_Connect_Packager
498
  continue;
499
  }
500
  if (!mkdir($targetPath . DS . $dirPath, $modeDir, true)) {
501
- $failedDirs[] = $targetPath . DS . $dirPath;
502
  } else {
503
  $createdDirs[] = $targetPath . DS . $dirPath;
504
  }
247
  if (@rmdir($dir)) {
248
  $this->removeEmptyDirectory(dirname($dir), $ftp);
249
  } else {
250
+ throw new RuntimeException('Failed to delete dir ' . Mage_System_Dirs::getFilteredPath($dir)
251
+ . "\r\n Check permissions");
252
  }
253
  }
254
  }
276
  $dest = $targetPath . DIRECTORY_SEPARATOR . $filePath . DIRECTORY_SEPARATOR . $fileName;
277
  if(@file_exists($dest)) {
278
  if (!@unlink($dest)) {
279
+ $failedFiles[] = Mage_System_Dirs::getFilteredPath($dest);
280
  }
281
  }
282
  $this->removeEmptyDirectory(dirname($dest));
309
  foreach ($contents as $file) {
310
  $ftp->delete($file);
311
  if ($ftp->fileExists($file)) {
312
+ $failedFiles[] = Mage_System_Dirs::getFilteredPath($file);
313
  continue;
314
  }
315
  $this->removeEmptyDirectory(dirname($file), $ftp);
403
  $failedFiles = array();
404
  foreach ($contents as $file) {
405
  $source = $tar . DS . $file;
406
+ if (file_exists($source) && is_file($source) && $file != '.htaccess') {
407
  $args = array(ltrim($file,"/"), $source);
408
  if($modeDir||$modeFile) {
409
  $args[] = $modeDir;
410
  $args[] = $modeFile;
411
  }
412
  if (call_user_func_array(array($ftp,'upload'), $args) === false) {
413
+ $failedFiles[] = Mage_System_Dirs::getFilteredPath($source);
414
  }
415
  }
416
  }
458
  $filePath = dirname($file);
459
  $source = $tar . DS . $file;
460
  $dest = $targetPath . DS . $filePath . DS . $fileName;
461
+ if (is_file($source) && ($fileName != '.htaccess' || !is_file($dest))) {
462
  @copy($source, $dest);
463
  if($modeFile) {
464
  @chmod($dest, $modeFile);
499
  continue;
500
  }
501
  if (!mkdir($targetPath . DS . $dirPath, $modeDir, true)) {
502
+ $failedDirs[] = Mage_System_Dirs::getFilteredPath($targetPath . DS . $dirPath);
503
  } else {
504
  $createdDirs[] = $targetPath . DS . $dirPath;
505
  }
downloader/lib/Mage/HTTP/Client/Curl.php CHANGED
@@ -373,8 +373,14 @@ implements Mage_HTTP_IClient
373
  $uriModified = $this->getModifiedUri($uri, $https);
374
  $this->_ch = curl_init();
375
  $this->curlOption(CURLOPT_URL, $uriModified);
376
- $this->curlOption(CURLOPT_SSL_VERIFYPEER, false);
377
- $this->curlOption(CURLOPT_SSL_CIPHER_LIST, 'TLSv1');
 
 
 
 
 
 
378
  $this->getCurlMethodSettings($method, $params, $isAuthorizationRequired);
379
 
380
  if(count($this->_headers)) {
373
  $uriModified = $this->getModifiedUri($uri, $https);
374
  $this->_ch = curl_init();
375
  $this->curlOption(CURLOPT_URL, $uriModified);
376
+ $this->curlOption(CURLOPT_SSL_VERIFYPEER, true);
377
+ /**
378
+ * Use value from CURL_SSLVERSION_TLSv1 (available since PHP 5.5)
379
+ *
380
+ * @link http://php.net/manual/ru/function.curl-setopt.php
381
+ */
382
+
383
+ $this->curlOption(CURLOPT_SSLVERSION, 1);
384
  $this->getCurlMethodSettings($method, $params, $isAuthorizationRequired);
385
 
386
  if(count($this->_headers)) {
downloader/lib/Mage/System/Dirs.php CHANGED
@@ -84,10 +84,12 @@ class Mage_System_Dirs
84
  return true;
85
  }
86
  if($exists && !is_dir($path)) {
 
87
  throw new Exception("'{$path}' already exists, should be a dir, not a file!");
88
  }
89
  $out = @mkdir($path, $mode, $recursive);
90
  if(false === $out) {
 
91
  throw new Exception("Can't create dir: '{$path}'");
92
  }
93
  return true;
@@ -101,4 +103,20 @@ class Mage_System_Dirs
101
  }
102
 
103
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  }
84
  return true;
85
  }
86
  if($exists && !is_dir($path)) {
87
+ $path = Mage_System_Dirs::getFilteredPath($path);
88
  throw new Exception("'{$path}' already exists, should be a dir, not a file!");
89
  }
90
  $out = @mkdir($path, $mode, $recursive);
91
  if(false === $out) {
92
+ $path = Mage_System_Dirs::getFilteredPath($path);
93
  throw new Exception("Can't create dir: '{$path}'");
94
  }
95
  return true;
103
  }
104
 
105
  }
106
+
107
+ /**
108
+ * Replace full path to relative
109
+ *
110
+ * @param $path
111
+ * @return string
112
+ */
113
+ public static function getFilteredPath($path)
114
+ {
115
+ $dir = pathinfo($_SERVER['SCRIPT_FILENAME'], PATHINFO_DIRNAME);
116
+ $position = strpos($path, $dir);
117
+ if ($position !== false && $position < 1) {
118
+ $path = substr_replace($path, '.', 0, strlen($dir));
119
+ }
120
+ return $path;
121
+ }
122
  }
downloader/template/connect/iframe.phtml CHANGED
@@ -67,7 +67,7 @@ function onSuccess()
67
  {
68
  var div = top.$('connect_iframe_success');
69
  if (div) {
70
- top.location.href = top.location.href.replace(/#.*$/, '')+'#connect_iframe_result';
71
  div.style.display = '';
72
  }
73
  }
@@ -76,7 +76,7 @@ function onFailure()
76
  {
77
  var div = top.$('connect_iframe_failure');
78
  if (div) {
79
- top.location.href = top.location.href.replace(/#.*$/, '')+'#connect_iframe_result';
80
  div.style.display = '';
81
  }
82
  }
67
  {
68
  var div = top.$('connect_iframe_success');
69
  if (div) {
70
+ top.location.hash = 'connect_iframe_result';
71
  div.style.display = '';
72
  }
73
  }
76
  {
77
  var div = top.$('connect_iframe_failure');
78
  if (div) {
79
+ top.location.hash = 'connect_iframe_result';
80
  div.style.display = '';
81
  }
82
  }
downloader/template/install/download.phtml CHANGED
@@ -103,6 +103,14 @@
103
  </tr>
104
  </table>
105
  <table cellspacing="0" cellpadding="0" class="form-list" id="inst_protocol_panel">
 
 
 
 
 
 
 
 
106
  <tr>
107
  <td class="label">Host:</td>
108
  <td class="value">
103
  </tr>
104
  </table>
105
  <table cellspacing="0" cellpadding="0" class="form-list" id="inst_protocol_panel">
106
+ <tr>
107
+ <td colspan="2">
108
+ <div class="notice-msg">
109
+ Remember: all .htaccess file will be skipped if you use FTP to upload.
110
+ </div>
111
+ </td>
112
+ </tr>
113
+
114
  <tr>
115
  <td class="label">Host:</td>
116
  <td class="value">
downloader/template/install/header.phtml CHANGED
@@ -85,7 +85,7 @@
85
 
86
  <br/>
87
  <p>
88
- Having trouble installing Magento? Check out our <a href="http://www.magentocommerce.com/knowledge-base/entry/magento-installation-cheat-sheet" id="installation_guide_link">Installation Guide</a>
89
  <script type="text/javascript">
90
  $('installation_guide_link').target = "installation_guide";
91
  </script>
85
 
86
  <br/>
87
  <p>
88
+ Having trouble installing Magento? Check out our <a href="http://www.magentocommerce.com/knowledge-base/entry/magento-installation-guide" id="installation_guide_link">Installation Guide</a>
89
  <script type="text/javascript">
90
  $('installation_guide_link').target = "installation_guide";
91
  </script>
downloader/template/install/writable.phtml CHANGED
@@ -35,6 +35,6 @@
35
  <button class="form-button" type="button" onclick="location.reload()"><span>Refresh</span></button>
36
  <br/><br/><br/>
37
  <p>To learn more about setting write permissions, please visit <a href="http://www.magentocommerce.com/knowledge-base/entry/magento-installation-guide" target="Install_Help">the Magento community site</a> for further details.</p>
38
- <p>Alternatively, if you are a developer and familiar with SVN, you can follow <a href="http://www.magentocommerce.com/svn" target="Install_Help">these instructions</a> to check out the latest Magento branch.</p>
39
  <?php echo $this->template('install/footer.phtml') ?>
40
 
35
  <button class="form-button" type="button" onclick="location.reload()"><span>Refresh</span></button>
36
  <br/><br/><br/>
37
  <p>To learn more about setting write permissions, please visit <a href="http://www.magentocommerce.com/knowledge-base/entry/magento-installation-guide" target="Install_Help">the Magento community site</a> for further details.</p>
38
+ <p>Alternatively, if you are a developer and familiar with SVN, you can follow <a href="http://magento.com/help/documentation" target="Install_Help">these instructions</a> to check out the latest Magento branch.</p>
39
  <?php echo $this->template('install/footer.phtml') ?>
40
 
downloader/template/login.phtml CHANGED
@@ -35,7 +35,7 @@
35
  <p><small>Please re-enter your Magento Adminstration Credentials.<br/>Only administrators with full permissions will be able to log in.</small></p>
36
  <table class="form-list">
37
  <tr><td class="label"><label for="username">Username:</label></td><td class="value"><input id="username" name="username" value=""/></td></tr>
38
- <tr><td class="label"><label for="password">Password:</label></td><td class="value"><input type="password" id="password" name="password"/></td></tr>
39
  <tr><td></td>
40
  <td class="value"><button type="submit">Log In</button></td></tr>
41
  </table>
35
  <p><small>Please re-enter your Magento Adminstration Credentials.<br/>Only administrators with full permissions will be able to log in.</small></p>
36
  <table class="form-list">
37
  <tr><td class="label"><label for="username">Username:</label></td><td class="value"><input id="username" name="username" value=""/></td></tr>
38
+ <tr><td class="label"><label for="password">Password:</label></td><td class="value"><input type="password" id="password" name="password" autocomplete="off"/></td></tr>
39
  <tr><td></td>
40
  <td class="value"><button type="submit">Log In</button></td></tr>
41
  </table>
downloader/template/settings.phtml CHANGED
@@ -147,7 +147,7 @@ function changeDeploymentType (element)
147
  <tr>
148
  <td class="label">FTP Password:</td>
149
  <td class="value">
150
- <input id="ftp_password" name="ftp_password" value="<?php echo($this->get('ftp_password'));?>" class="input-text" type="password"></input>
151
  </td>
152
  </tr>
153
  <tr>
147
  <tr>
148
  <td class="label">FTP Password:</td>
149
  <td class="value">
150
+ <input id="ftp_password" name="ftp_password" value="" class="input-text" type="password"></input>
151
  </td>
152
  </tr>
153
  <tr>
package.xml CHANGED
@@ -1,18 +1,18 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Mage_Downloader</name>
4
- <version>1.9.2.4</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Magento Downloader</summary>
10
  <description>Magento Downloader</description>
11
- <notes>1.9.2.4</notes>
12
  <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
13
- <date>2016-02-17</date>
14
- <time>18:27:46</time>
15
- <contents><target name="mage"><dir name="downloader"><dir name="js"><file name="prototype.js" hash="3766aeff5778b54f74f93670322ca0df"/></dir><dir name="Maged"><dir name="Connect"><file name="Frontend.php" hash="1fe594862033bdaa75e04ca2bdbbff17"/></dir><file name="Connect.php" hash="c5733623d0aa65c0f139f4871cb7fa4f"/><file name="Controller.php" hash="935bc6849724d39acfdf5a8de12d9268"/><file name="Exception.php" hash="a42db400bc39f8bf3b59f72ba97d977f"/><dir name="Model"><dir name="Config"><file name="Abstract.php" hash="a0cf5733571ff2e6290c21364e3f5c24"/><file name="Community.php" hash="a636eb518434ca1dfe8ca1f01bf379fd"/><file name="Interface.php" hash="4d5fab4370d1d139f066bfebc0feb695"/></dir><file name="Config.php" hash="b97bd285b6de78866c30ee0e7789f916"/><dir name="Connect"><file name="Request.php" hash="00448a099046a24ab66fd5182c963114"/></dir><file name="Connect.php" hash="325bd131537d3b88a3f1c6ce7eec7bf1"/><file name="Dowloader.php" hash="1b11353e50d943a105f2a3de69f58bc4"/><file name="Session.php" hash="7b7cf4f320a9235a3be6ebca96ee5ae2"/></dir><file name="Model.php" hash="6cdf4d7f15043aac54102397fa8969df"/><file name="View.php" hash="fbaf1cf8fc0200f90ee1c02f567b7ee8"/><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><dir name="skin"><file name="boxes.css" hash="252cc12205a39279b5c5330e23aad7ac"/><file name="ie7boxes.css" hash="f17d5252a3f67fdbcdb4e9df4f7971fb"/><file name="ieboxes.css" hash="cae83da82fef24e35155fb56b2c4a85f"/><dir name="images"><file name="Magento_Connect.jpg" hash="20e1378c09506fdc5723abc0115d5f57"/><file name="ajax-loader-tr.gif" hash="1ae32bc8232ff2527c627e5b38eb319a"/><file name="btn_bg.gif" hash="37c51a4d48a92da9648dcd3ca011039f"/><file name="header_bg.gif" hash="8440b04c5cb6b1451bb886bfbef260a5"/><file name="logo.gif" hash="5eb089ecea67d82311d7c91898460104"/><file name="nav_bg.gif" hash="1cb1366f03a9efad6b17e4483aef20cf"/><file name="nav_separator.gif" hash="492011a7de2de84a9c7837bfd879ab95"/></dir><dir name="install"><file name="boxes.css" hash="de9a4050805ee8eaee88dc30351170ae"/><file name="clears.css" hash="4d4f27ee5e4fd5d33a9aa192f952d674"/><file name="ie7minus.css" hash="8cc457cdbbe8842902ca91f23a44adf7"/><file name="iestyles.css" hash="f9d8a7f31aa41ce449a2b14eb5e961e9"/><dir name="images"><file name="error_msg_icon.gif" hash="e4f28607f075a105e53fa3113d84bd26"/><file name="footer_bg.gif" hash="d59784af16fd95ea82226e5708a89232"/><file name="footer_container_bg.gif" hash="d468e3943943cbbf711586e69d40ca42"/><file name="footer_info_separator.gif" hash="7da64eefaf4da3855ab6ee76dbced0c2"/><file name="footer_informational_bg.gif" hash="72d37f4b2ea747bf8969c2654ad1d1e0"/><file name="footer_left.gif" hash="2b15a54bea9409a75c142d14a62f0149"/><file name="footer_legality_bg.gif" hash="4eb1602e3369dccd901ffe98ea0fd4b3"/><file name="footer_right.gif" hash="a45eaf35c8797d299bd4d9b936528e8f"/><file name="header_bg.gif" hash="795c6de754d0d49717ed08d5cd8168c8"/><file name="header_nav_bg.gif" hash="80c6a18686eb0243e06d6176506a2502"/><file name="header_top_bg.jpg" hash="143f524392ee62fcc8183f5930d7258b"/><file name="header_top_container_bg.jpg" hash="294c18f3f6b838bba06ae41dd3c3d638"/><file name="logo.gif" hash="073a947a39b967af678455a5c7f66e90"/><file name="main_bg.gif" hash="cf18ba9f7c7e6b058b439cde1a897e9c"/><file name="main_container_bg.gif" hash="a8f5717873dc6cf8f6bd22924b5838fe"/><file name="note_msg_icon.gif" hash="e774ee481a2820789c1a77112377c4e0"/><file name="success_msg_icon.gif" hash="834dfafd5f8b44c4b24a4c00add56fcf"/><file name="validation_advice_bg.gif" hash="b85432906de8985a8b14eeb2dc652d3c"/></dir><file name="reset.css" hash="d10ef7911c66830825b0367b46fc203c"/></dir></dir><dir name="template"><dir name="connect"><file name="iframe.phtml" hash="7184ea4efaefe2e49952e06ebc82b7e4"/><file name="packages.phtml" hash="83fb56d37655a352008a46084f69f29b"/><file name="packages_prepare.phtml" hash="d664da715e3d9e35e51cf51a356d7ad6"/></dir><file name="exception.phtml" hash="446cb7db443dac90fd179e4dc9042208"/><file name="footer.phtml" hash="c19c11172aa91e03e99e387226236ba4"/><file name="header.phtml" hash="cd119717f993edab2532033fd1e7031a"/><file name="index.phtml" hash="af7fd53abba1ceee7931a59727baf1ac"/><dir name="install"><file name="download.phtml" hash="f8cd81dfdad9316ee9cc436a80d034d1"/><file name="footer.phtml" hash="ffd35db4058f3e1612214f2f76b3f445"/><file name="header.phtml" hash="ee4d96860229d06a436457dacbe335b5"/><file name="writable.phtml" hash="1573d8b6e869adf198e7245e2faefdd2"/></dir><file name="login.phtml" hash="f090def42f337e6c0d831606b62d2446"/><file name="messages.phtml" hash="a25f4bd907224f5124b00c166414d2d5"/><file name="noroute.phtml" hash="e3701c3664d76611110209e88d36ea9e"/><file name="settings.phtml" hash="6b2baacc34089a3d0d63bff0132ce261"/><file name="writable.phtml" hash="934410a54bd3fb796c2bfa7e0d011d51"/><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><file name="index.php" hash="2d785a16995da61d6ea03aa9eb130c3a"/><dir name="lib"><dir name="Mage"><dir name="Archive"><file name="Abstract.php" hash="fe932085a8ee80ced42caa531114f1e0"/><file name="Bz.php" hash="d6426ab0a7999ef9829f8f4ad0ae4f65"/><file name="Gz.php" hash="0825c0e8ac799f5071edc5441935b74b"/><dir name="Helper"><dir name="File"><file name="Bz.php" hash="f9bed06826ecc6d6ad55f303ddaf45c7"/><file name="Gz.php" hash="c839c55d72b3ec5c524113222a650936"/></dir><file name="File.php" hash="5fc72860b28ec0c3a9d075d9ec3899f5"/></dir><file name="Interface.php" hash="141a427b2de40a2425f04a59d84a5ac1"/><file name="Tar.php" hash="6c10e519a593c0414dabc848fdb84baf"/></dir><file name="Archive.php" hash="0644f8db11f1c357b7869945cb5bcd53"/><dir name="Autoload"><file name="Simple.php" hash="286dbec2676d0e7537e5d10d63f03b64"/></dir><dir name="Backup"><file name="Abstract.php" hash="bfe563b766fadff97fd363de8c4df8b1"/><dir name="Archive"><file name="Tar.php" hash="c8fe2ced6e6eec732be365c03cca7a1f"/></dir><file name="Db.php" hash="2ec2fe7b4017b861be4d1440627b3c19"/><dir name="Exception"><file name="CantLoadSnapshot.php" hash="8dda1d8fcb58b38f3a6b34fe14c19738"/><file name="FtpConnectionFailed.php" hash="ac9e832b2502a85d87de7ecd24d0a06e"/><file name="FtpValidationFailed.php" hash="38a4d1b979b7aa23ec285d4ed0cfcbdb"/><file name="NotEnoughFreeSpace.php" hash="18730975d2f1eeb8a7f4e95ea783bbf7"/><file name="NotEnoughPermissions.php" hash="30be06ac99390b6c5a2e697583d967e7"/></dir><file name="Exception.php" hash="e50bd4ee85b423143f408252403938f8"/><dir name="Filesystem"><file name="Helper.php" hash="3a50c7daffcd2a32dfade3b056c6e809"/><dir name="Iterator"><file name="File.php" hash="daac2b8602774cb2ca4dcf2cee275375"/><file name="Filter.php" hash="2f2a5a7b993e5ed9e98b444bf01cfc18"/></dir><dir name="Rollback"><file name="Abstract.php" hash="dbd411d64baeb4255fcd68ea8f4a8657"/><file name="Fs.php" hash="05c8e69bdb6cc499ee6d2e9dfe0df806"/><file name="Ftp.php" hash="e52f99c00cc30c52ce9cf82b39df6cc4"/></dir></dir><file name="Filesystem.php" hash="b94ad4d595d0e4ef7c3255cdad1c7ada"/><file name="Interface.php" hash="1bbad039d29cf54675c59764c0baf381"/><file name="Media.php" hash="267a6da8299593324304af34b9016a88"/><file name="Nomedia.php" hash="f59f14a1dac8f40800a6477341c68df8"/><file name="Snapshot.php" hash="e12f7f3819445d6fce43abc9d6a6d249"/></dir><file name="Backup.php" hash="40a2c5a18460690bfb24474e162f58b2"/><dir name="Connect"><file name="Backup.php" hash="2e4d1e2c1fb8f78bc2033fca475c476f"/><dir name="Channel"><file name="Generator.php" hash="ce1306cd397921a92dabc281215ebcf4"/><file name="Parser.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/><file name="VO.php" hash="e9e715cf8b85960faddaf064f9adcdf0"/></dir><dir name="Command"><file name="Channels.php" hash="3149451cfe1be57bb5cb18b2a9759ec3"/><file name="Channels_Header.php" hash="ad00027c4f5642211ba51d2648931967"/><file name="Config.php" hash="c4aefacf1e0d77b595802700a03b9091"/><file name="Config_Header.php" hash="6308fc5c62ad94c92579e6ba8532764f"/><file name="Install.php" hash="eb7afec2d9b017c40e02561447180cac"/><file name="Install_Header.php" hash="9909984d7cbaedd4433d2638d0c30e55"/><file name="Package.php" hash="19cc7ad69932e84482b87c6c48f8b109"/><file name="Package_Header.php" hash="6783594e2920fcee8c04fdd869ab8dbd"/><file name="Registry.php" hash="623d0f1ab6e7b1c5f8b42bc418db63f8"/><file name="Registry_Header.php" hash="59d72375eac65124fead2e39d65d012e"/><file name="Remote.php" hash="9acf14759e955d7d4bcf5005c59d512f"/><file name="Remote_Header.php" hash="d1e7a277fe5671fb8783100d77bf6517"/></dir><file name="Command.php" hash="6d3eff81db6d7890ed8acf616d0d11a5"/><file name="Config.php" hash="08752165f08baec4736c39c1b2ec6bf7"/><file name="Converter.php" hash="253e0faaf11b3b6ebd4f131b6e194f2b"/><dir name="Frontend"><file name="CLI.php" hash="9640aaca77e3a34934ec543e0bfe8391"/></dir><file name="Frontend.php" hash="1293aa36c6a18cb283a4eee12f7230b5"/><file name="Ftp.php" hash="0323c80694b6acadf93c4a8d0e298a22"/><dir name="Loader"><file name="Ftp.php" hash="2bd56f41f20cbc78725a3ca480f3ecde"/></dir><file name="Loader.php" hash="620b95d854f29f3d7e4d74d192e113a8"/><dir name="Package"><file name="Extension.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/><file name="Hotfix.php" hash="3964d63fe528ff52445afdbef9a3efce"/><file name="Maintainer.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/><file name="Reader.php" hash="f4d55460659a19a38f1e29f08aff71a7"/><file name="Target.php" hash="0674dfd23e69adc5832e330d5fb041d8"/><file name="VO.php" hash="1a37cad472e2d61044321b20ed4ceae4"/><file name="Writer.php" hash="fe7b796442aaf844296baeb9c63715a0"/></dir><file name="Package.php" hash="c301c73d327c386776c196390021f7b5"/><file name="Packager.php" hash="af7af012704cced243becf84fa5baba9"/><dir name="Repository"><file name="Abstract.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/><dir name="Channel"><file name="Abstract.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/><file name="Commercial.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/><file name="Community.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/><file name="Core.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/></dir><file name="Channel.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/><file name="Local.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/></dir><file name="Repository.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/><dir name="Rest"><file name="Builder.php" hash="1a009de2ca883a6686900e42f28691c3"/><file name="Factory.php" hash="816de1ef0e376e4a610aa0d97600e479"/></dir><file name="Rest.php" hash="3030c97d6128590bea0b7fb704505a99"/><file name="Singleconfig.php" hash="c6572e5c0159a79d12c05b96cd179f90"/><dir name="Structures"><file name="Graph.php" hash="823112810f5ea1c5382079591ebd9282"/><file name="Node.php" hash="089a0a309aedd56f8ef506a613eb92c9"/></dir><file name="Validator.php" hash="085a0fa83fc246d5390fb23b1d330d9e"/></dir><dir name="DB"><file name="Exception.php" hash="df87dc0b525da51748422213e3fdfc34"/><file name="Mysqli.php" hash="c6ff8085cdc797ecd73202a82dc0268d"/></dir><file name="Exception.php" hash="a6044f488f965fa1f35ebe509a1c7cf7"/><dir name="HTTP"><dir name="Client"><file name="Curl.php" hash="3ee84f5f785cf70b17e1ce7853f9654c"/><file name="Socket.php" hash="5183aa4839c4387ff5ea38ffb7fab98c"/></dir><file name="Client.php" hash="a5a702957a0b5a2f45f608dc95bcfdad"/><file name="IClient.php" hash="4412c30e01d49bf54389ecb74afa917e"/></dir><dir name="System"><file name="Args.php" hash="7f596269c4f2c524ba1897c88033186e"/><file name="Dirs.php" hash="3a1c0021175e04a93082e3084e0d1dfb"/><file name="Ftp.php" hash="543f8aa70d392454b6739c3f29396a09"/></dir><dir name="Xml"><file name="Generator.php" hash="dc74586a864fbc9901ae981aec967c99"/><file name="Parser.php" hash="5b6dd20e89f0aa8cda3c24a73df316bb"/></dir></dir><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><file name="config.ini" hash="a52ba98e71ab19de387b3af1a04c6102"/><file name=".htaccess" hash="520cc012c84739584526b8a9ff098e23"/><file name="mage.php" hash="58571168f6ac531be694577b5c106823"/><file name="favicon.ico" hash="88733ee53676a47fc354a61c32516e82"/><file name="target.xml" hash="9037fc86de8dd2aea215ca3c3714e03b"/></dir><dir name="."><file name=".htaccess" hash="deca82965182800d87a097f3111515f1"/><file name="index.php" hash="1cdcc86d7ba78d75ac5a2169301e5f72"/><file name="mage" hash="30b755910b5f0149b0dc14e86475b875"/></dir></target></contents>
16
  <compatible/>
17
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
18
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Mage_Downloader</name>
4
+ <version>1.9.3.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Magento Downloader</summary>
10
  <description>Magento Downloader</description>
11
+ <notes>1.9.3.0</notes>
12
  <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
13
+ <date>2016-10-04</date>
14
+ <time>13:04:45</time>
15
+ <contents><target name="mage"><dir name="downloader"><dir name="js"><file name="prototype.js" hash="3766aeff5778b54f74f93670322ca0df"/></dir><dir name="Maged"><dir name="BruteForce"><file name="Validator.php" hash="5bf221ba9f4abe8c454cb5dfb4e8fe61"/></dir><dir name="Connect"><file name="Frontend.php" hash="78a776b53c0fb66d1b76dd3ac2b3fb6a"/></dir><file name="Connect.php" hash="2480fc6a2688a2b24c439ae7eeac73e2"/><file name="Controller.php" hash="bff143dded5ba43f133089e0e25f3e2f"/><file name="Exception.php" hash="a42db400bc39f8bf3b59f72ba97d977f"/><dir name="Model"><dir name="BruteForce"><file name="ConfigIni.php" hash="4fae9ddb08886881c77993ef7b49e785"/><file name="ModelConfigInterface.php" hash="1650a63f84dfbf53b9800bc31fa1f038"/><dir name="Resource"><file name="FTP.php" hash="9a8861eb938c334942d865b0514dbc7b"/><file name="File.php" hash="e9496e7915f14dd863ff13095f9f552d"/><file name="ResourceInterface.php" hash="310041c37da8e98af156d742e5c6b96f"/></dir></dir><dir name="Config"><file name="Abstract.php" hash="a0cf5733571ff2e6290c21364e3f5c24"/><file name="Community.php" hash="a636eb518434ca1dfe8ca1f01bf379fd"/><file name="Interface.php" hash="4d5fab4370d1d139f066bfebc0feb695"/></dir><file name="Config.php" hash="b97bd285b6de78866c30ee0e7789f916"/><dir name="Connect"><file name="Request.php" hash="00448a099046a24ab66fd5182c963114"/></dir><file name="Connect.php" hash="325bd131537d3b88a3f1c6ce7eec7bf1"/><file name="Dowloader.php" hash="1b11353e50d943a105f2a3de69f58bc4"/><file name="Session.php" hash="2df34c95e8c47fc5c219c00edceb34c0"/></dir><file name="Model.php" hash="6cdf4d7f15043aac54102397fa8969df"/><file name="View.php" hash="fbaf1cf8fc0200f90ee1c02f567b7ee8"/><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><dir name="skin"><file name="boxes.css" hash="252cc12205a39279b5c5330e23aad7ac"/><file name="ie7boxes.css" hash="f17d5252a3f67fdbcdb4e9df4f7971fb"/><file name="ieboxes.css" hash="cae83da82fef24e35155fb56b2c4a85f"/><dir name="images"><file name="Magento_Connect.jpg" hash="20e1378c09506fdc5723abc0115d5f57"/><file name="ajax-loader-tr.gif" hash="1ae32bc8232ff2527c627e5b38eb319a"/><file name="btn_bg.gif" hash="37c51a4d48a92da9648dcd3ca011039f"/><file name="header_bg.gif" hash="8440b04c5cb6b1451bb886bfbef260a5"/><file name="logo.gif" hash="5eb089ecea67d82311d7c91898460104"/><file name="nav_bg.gif" hash="1cb1366f03a9efad6b17e4483aef20cf"/><file name="nav_separator.gif" hash="492011a7de2de84a9c7837bfd879ab95"/></dir><dir name="install"><file name="boxes.css" hash="de9a4050805ee8eaee88dc30351170ae"/><file name="clears.css" hash="4d4f27ee5e4fd5d33a9aa192f952d674"/><file name="ie7minus.css" hash="8cc457cdbbe8842902ca91f23a44adf7"/><file name="iestyles.css" hash="f9d8a7f31aa41ce449a2b14eb5e961e9"/><dir name="images"><file name="error_msg_icon.gif" hash="e4f28607f075a105e53fa3113d84bd26"/><file name="footer_bg.gif" hash="d59784af16fd95ea82226e5708a89232"/><file name="footer_container_bg.gif" hash="d468e3943943cbbf711586e69d40ca42"/><file name="footer_info_separator.gif" hash="7da64eefaf4da3855ab6ee76dbced0c2"/><file name="footer_informational_bg.gif" hash="72d37f4b2ea747bf8969c2654ad1d1e0"/><file name="footer_left.gif" hash="2b15a54bea9409a75c142d14a62f0149"/><file name="footer_legality_bg.gif" hash="4eb1602e3369dccd901ffe98ea0fd4b3"/><file name="footer_right.gif" hash="a45eaf35c8797d299bd4d9b936528e8f"/><file name="header_bg.gif" hash="795c6de754d0d49717ed08d5cd8168c8"/><file name="header_nav_bg.gif" hash="80c6a18686eb0243e06d6176506a2502"/><file name="header_top_bg.jpg" hash="143f524392ee62fcc8183f5930d7258b"/><file name="header_top_container_bg.jpg" hash="294c18f3f6b838bba06ae41dd3c3d638"/><file name="logo.gif" hash="073a947a39b967af678455a5c7f66e90"/><file name="main_bg.gif" hash="cf18ba9f7c7e6b058b439cde1a897e9c"/><file name="main_container_bg.gif" hash="a8f5717873dc6cf8f6bd22924b5838fe"/><file name="note_msg_icon.gif" hash="e774ee481a2820789c1a77112377c4e0"/><file name="success_msg_icon.gif" hash="834dfafd5f8b44c4b24a4c00add56fcf"/><file name="validation_advice_bg.gif" hash="b85432906de8985a8b14eeb2dc652d3c"/></dir><file name="reset.css" hash="d10ef7911c66830825b0367b46fc203c"/></dir></dir><dir name="template"><dir name="connect"><file name="iframe.phtml" hash="3f86f07b3cc49aa3add499b5f99a2ceb"/><file name="packages.phtml" hash="83fb56d37655a352008a46084f69f29b"/><file name="packages_prepare.phtml" hash="d664da715e3d9e35e51cf51a356d7ad6"/></dir><file name="exception.phtml" hash="446cb7db443dac90fd179e4dc9042208"/><file name="footer.phtml" hash="c19c11172aa91e03e99e387226236ba4"/><file name="header.phtml" hash="cd119717f993edab2532033fd1e7031a"/><file name="index.phtml" hash="af7fd53abba1ceee7931a59727baf1ac"/><dir name="install"><file name="download.phtml" hash="278ec476e6af69c0ca27efc3a638bc8a"/><file name="footer.phtml" hash="ffd35db4058f3e1612214f2f76b3f445"/><file name="header.phtml" hash="df212cdef481852c3926a96e70e94586"/><file name="writable.phtml" hash="472ff87b5d7158beec57fd6d7fa27f0d"/></dir><file name="login.phtml" hash="9645fca3d92f81ce92ffd184facbbc9c"/><file name="messages.phtml" hash="a25f4bd907224f5124b00c166414d2d5"/><file name="noroute.phtml" hash="e3701c3664d76611110209e88d36ea9e"/><file name="settings.phtml" hash="bb70adcbe7f76d4d6fbb9974a97a2571"/><file name="writable.phtml" hash="934410a54bd3fb796c2bfa7e0d011d51"/><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><file name="index.php" hash="2d785a16995da61d6ea03aa9eb130c3a"/><dir name="lib"><dir name="Mage"><dir name="Archive"><file name="Abstract.php" hash="fe932085a8ee80ced42caa531114f1e0"/><file name="Bz.php" hash="d6426ab0a7999ef9829f8f4ad0ae4f65"/><file name="Gz.php" hash="0825c0e8ac799f5071edc5441935b74b"/><dir name="Helper"><dir name="File"><file name="Bz.php" hash="f9bed06826ecc6d6ad55f303ddaf45c7"/><file name="Gz.php" hash="c839c55d72b3ec5c524113222a650936"/></dir><file name="File.php" hash="5fc72860b28ec0c3a9d075d9ec3899f5"/></dir><file name="Interface.php" hash="141a427b2de40a2425f04a59d84a5ac1"/><file name="Tar.php" hash="6c10e519a593c0414dabc848fdb84baf"/></dir><file name="Archive.php" hash="0644f8db11f1c357b7869945cb5bcd53"/><dir name="Autoload"><file name="Simple.php" hash="286dbec2676d0e7537e5d10d63f03b64"/></dir><dir name="Backup"><file name="Abstract.php" hash="bfe563b766fadff97fd363de8c4df8b1"/><dir name="Archive"><file name="Tar.php" hash="c8fe2ced6e6eec732be365c03cca7a1f"/></dir><file name="Db.php" hash="2ec2fe7b4017b861be4d1440627b3c19"/><dir name="Exception"><file name="CantLoadSnapshot.php" hash="8dda1d8fcb58b38f3a6b34fe14c19738"/><file name="FtpConnectionFailed.php" hash="ac9e832b2502a85d87de7ecd24d0a06e"/><file name="FtpValidationFailed.php" hash="38a4d1b979b7aa23ec285d4ed0cfcbdb"/><file name="NotEnoughFreeSpace.php" hash="18730975d2f1eeb8a7f4e95ea783bbf7"/><file name="NotEnoughPermissions.php" hash="30be06ac99390b6c5a2e697583d967e7"/></dir><file name="Exception.php" hash="e50bd4ee85b423143f408252403938f8"/><dir name="Filesystem"><file name="Helper.php" hash="3a50c7daffcd2a32dfade3b056c6e809"/><dir name="Iterator"><file name="File.php" hash="daac2b8602774cb2ca4dcf2cee275375"/><file name="Filter.php" hash="2f2a5a7b993e5ed9e98b444bf01cfc18"/></dir><dir name="Rollback"><file name="Abstract.php" hash="dbd411d64baeb4255fcd68ea8f4a8657"/><file name="Fs.php" hash="05c8e69bdb6cc499ee6d2e9dfe0df806"/><file name="Ftp.php" hash="e52f99c00cc30c52ce9cf82b39df6cc4"/></dir></dir><file name="Filesystem.php" hash="b94ad4d595d0e4ef7c3255cdad1c7ada"/><file name="Interface.php" hash="1bbad039d29cf54675c59764c0baf381"/><file name="Media.php" hash="267a6da8299593324304af34b9016a88"/><file name="Nomedia.php" hash="f59f14a1dac8f40800a6477341c68df8"/><file name="Snapshot.php" hash="e12f7f3819445d6fce43abc9d6a6d249"/></dir><file name="Backup.php" hash="40a2c5a18460690bfb24474e162f58b2"/><dir name="Connect"><file name="Backup.php" hash="2e4d1e2c1fb8f78bc2033fca475c476f"/><dir name="Channel"><file name="Generator.php" hash="ce1306cd397921a92dabc281215ebcf4"/><file name="Parser.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/><file name="VO.php" hash="e9e715cf8b85960faddaf064f9adcdf0"/></dir><dir name="Command"><file name="Channels.php" hash="3149451cfe1be57bb5cb18b2a9759ec3"/><file name="Channels_Header.php" hash="ad00027c4f5642211ba51d2648931967"/><file name="Config.php" hash="c4aefacf1e0d77b595802700a03b9091"/><file name="Config_Header.php" hash="6308fc5c62ad94c92579e6ba8532764f"/><file name="Install.php" hash="eb7afec2d9b017c40e02561447180cac"/><file name="Install_Header.php" hash="9909984d7cbaedd4433d2638d0c30e55"/><file name="Package.php" hash="19cc7ad69932e84482b87c6c48f8b109"/><file name="Package_Header.php" hash="6783594e2920fcee8c04fdd869ab8dbd"/><file name="Registry.php" hash="623d0f1ab6e7b1c5f8b42bc418db63f8"/><file name="Registry_Header.php" hash="59d72375eac65124fead2e39d65d012e"/><file name="Remote.php" hash="9acf14759e955d7d4bcf5005c59d512f"/><file name="Remote_Header.php" hash="d1e7a277fe5671fb8783100d77bf6517"/></dir><file name="Command.php" hash="6d3eff81db6d7890ed8acf616d0d11a5"/><file name="Config.php" hash="08752165f08baec4736c39c1b2ec6bf7"/><file name="Converter.php" hash="253e0faaf11b3b6ebd4f131b6e194f2b"/><dir name="Frontend"><file name="CLI.php" hash="9640aaca77e3a34934ec543e0bfe8391"/></dir><file name="Frontend.php" hash="1293aa36c6a18cb283a4eee12f7230b5"/><file name="Ftp.php" hash="0323c80694b6acadf93c4a8d0e298a22"/><dir name="Loader"><file name="Ftp.php" hash="2bd56f41f20cbc78725a3ca480f3ecde"/></dir><file name="Loader.php" hash="620b95d854f29f3d7e4d74d192e113a8"/><dir name="Package"><file name="Extension.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/><file name="Hotfix.php" hash="3964d63fe528ff52445afdbef9a3efce"/><file name="Maintainer.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/><file name="Reader.php" hash="f4d55460659a19a38f1e29f08aff71a7"/><file name="Target.php" hash="0674dfd23e69adc5832e330d5fb041d8"/><file name="VO.php" hash="1a37cad472e2d61044321b20ed4ceae4"/><file name="Writer.php" hash="fe7b796442aaf844296baeb9c63715a0"/></dir><file name="Package.php" hash="c301c73d327c386776c196390021f7b5"/><file name="Packager.php" hash="2bf37ef15e8f6160f01a1905888241fa"/><dir name="Repository"><file name="Abstract.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/><dir name="Channel"><file name="Abstract.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/><file name="Commercial.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/><file name="Community.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/><file name="Core.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/></dir><file name="Channel.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/><file name="Local.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/></dir><file name="Repository.php" hash="0ff7c4822bbce0b4390e3e1bec6f4d5d"/><dir name="Rest"><file name="Builder.php" hash="1a009de2ca883a6686900e42f28691c3"/><file name="Factory.php" hash="816de1ef0e376e4a610aa0d97600e479"/></dir><file name="Rest.php" hash="3030c97d6128590bea0b7fb704505a99"/><file name="Singleconfig.php" hash="c6572e5c0159a79d12c05b96cd179f90"/><dir name="Structures"><file name="Graph.php" hash="823112810f5ea1c5382079591ebd9282"/><file name="Node.php" hash="089a0a309aedd56f8ef506a613eb92c9"/></dir><file name="Validator.php" hash="085a0fa83fc246d5390fb23b1d330d9e"/></dir><dir name="DB"><file name="Exception.php" hash="df87dc0b525da51748422213e3fdfc34"/><file name="Mysqli.php" hash="c6ff8085cdc797ecd73202a82dc0268d"/></dir><file name="Exception.php" hash="a6044f488f965fa1f35ebe509a1c7cf7"/><dir name="HTTP"><dir name="Client"><file name="Curl.php" hash="ba4efbea8341d085f295378e4c784458"/><file name="Socket.php" hash="5183aa4839c4387ff5ea38ffb7fab98c"/></dir><file name="Client.php" hash="a5a702957a0b5a2f45f608dc95bcfdad"/><file name="IClient.php" hash="4412c30e01d49bf54389ecb74afa917e"/></dir><dir name="System"><file name="Args.php" hash="7f596269c4f2c524ba1897c88033186e"/><file name="Dirs.php" hash="e204ece33cf1eac95f9d37f4f4dfb11a"/><file name="Ftp.php" hash="543f8aa70d392454b6739c3f29396a09"/></dir><dir name="Xml"><file name="Generator.php" hash="dc74586a864fbc9901ae981aec967c99"/><file name="Parser.php" hash="5b6dd20e89f0aa8cda3c24a73df316bb"/></dir></dir><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><file name="config.ini" hash="a52ba98e71ab19de387b3af1a04c6102"/><file name=".htaccess" hash="520cc012c84739584526b8a9ff098e23"/><file name="mage.php" hash="58571168f6ac531be694577b5c106823"/><file name="favicon.ico" hash="88733ee53676a47fc354a61c32516e82"/><file name="target.xml" hash="9037fc86de8dd2aea215ca3c3714e03b"/></dir><dir name="."><file name=".htaccess" hash="242b96ab8c820ff12b9e610a8f4352ec"/><file name="index.php" hash="1cdcc86d7ba78d75ac5a2169301e5f72"/><file name="mage" hash="30b755910b5f0149b0dc14e86475b875"/></dir></target></contents>
16
  <compatible/>
17
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
18
  </package>