Improved error handling of package update servers
authorAlexander Ebert <ebert@woltlab.com>
Mon, 25 Nov 2013 14:30:47 +0000 (15:30 +0100)
committerAlexander Ebert <ebert@woltlab.com>
Mon, 25 Nov 2013 14:30:47 +0000 (15:30 +0100)
wcfsetup/install/files/lib/system/package/PackageUpdateDispatcher.class.php

index ae1ea229ba7c0fa0fa8469512967a88ef41e70ed..6a0ae154f14ed399f1e0415c37ffd56862d96da9 100644 (file)
@@ -42,16 +42,35 @@ class PackageUpdateDispatcher extends SingletonFactory {
                $refreshedPackageLists = false;
                foreach ($updateServers as $updateServer) {
                        if ($updateServer->lastUpdateTime < TIME_NOW - 600) {
+                               $errorMessage = '';
+                               
                                try {
                                        $this->getPackageUpdateXML($updateServer);
                                        $refreshedPackageLists = true;
                                }
                                catch (SystemException $e) {
+                                       $errorMessage = $e->getMessage();
+                               }
+                               catch (PackageUpdateUnauthorizedException $e) {
+                                       $reply = $e->getRequest()->getReply();
+                                       foreach ($reply['headers'] as $header) {
+                                               if (preg_match('~^HTTP~', $header)) {
+                                                       $errorMessage = $header;
+                                                       break;
+                                               }
+                                       }
+                                       
+                                       if (!$errorMessage) {
+                                               $errorMessage = 'Unknown (HTTP status ' . (is_array($reply['statusCode']) ? reset($reply['statusCode']) : $reply['statusCode']) . ')';
+                                       }
+                               }
+                               
+                               if ($errorMessage) {
                                        // save error status
                                        $updateServerEditor = new PackageUpdateServerEditor($updateServer);
                                        $updateServerEditor->update(array(
                                                'status' => 'offline',
-                                               'errorMessage' => $e->getMessage()
+                                               'errorMessage' => $errorMessage
                                        ));
                                }
                        }