/** * Page のプロセス. * * @return void */ function process($mode) { $objLog = new LC_Upgrade_Helper_Log(); $objJson = new LC_Upgrade_Helper_Json(); $objLog->start($mode); // 管理画面ログインチェック $objLog->log('* admin auth start'); if ($this->isLoggedInAdminPage() !== true) { $objJson->setError(OSTORE_E_C_ADMIN_AUTH); $objJson->display(); $objLog->error(OSTORE_E_C_ADMIN_AUTH); return; } // 認証キーの取得 $public_key = $this->getPublicKey(); $sha1_key = $this->createSeed(); $objLog->log('* public key check start'); if (empty($public_key)) { $objJson->setError(OSTORE_E_C_NO_KEY); $objJson->display(); $objLog->error(OSTORE_E_C_NO_KEY); return; } // リクエストを開始 $objLog->log('* http request start'); $arrPostData = array('eccube_url' => SITE_URL, 'public_key' => sha1($public_key . $sha1_key), 'sha1_key' => $sha1_key); $objReq = $this->request('products_list', $arrPostData); // リクエストチェック $objLog->log('* http request check start'); if (PEAR::isError($objReq)) { $objJson->setError(OSTORE_E_C_HTTP_REQ); $objJson->display(); $objLog->error(OSTORE_E_C_HTTP_REQ, $objReq); return; } // レスポンスチェック $objLog->log('* http response check start'); if ($objReq->getResponseCode() !== 200) { $objJson->setError(OSTORE_E_C_HTTP_RESP); $objJson->display(); $objLog->error(OSTORE_E_C_HTTP_RESP, $objReq); return; } $body = $objReq->getResponseBody(); $objRet = $objJson->decode($body); // JSONデータのチェック $objLog->log('* json deta check start'); if (empty($objRet)) { $objJson->setError(OSTORE_E_C_FAILED_JSON_PARSE); $objJson->display(); $objLog->error(OSTORE_E_C_FAILED_JSON_PARSE, $objReq); return; } // ステータスチェック $objLog->log('* json status check start'); if ($objRet->status === OSTORE_STATUS_SUCCESS) { $objLog->log('* get products list ok'); $arrProducts = array(); foreach ($objRet->data as $product) { $arrProducts[] = get_object_vars($product); } $objView = new SC_AdminView(); $objView->assign('arrProducts', $arrProducts); $template = 'ownersstore/products_list.tpl'; if (!$objView->_smarty->template_exists($template)) { $objLog->log('* template not exist, use default template'); // デフォルトテンプレートを使用 $template = DATA_PATH . 'Smarty/templates/default/admin/' . $template; } $html = $objView->fetch('ownersstore/products_list.tpl'); $objJson->setSuccess(array(), $html); $objJson->display(); $objLog->end(); return; } else { // 配信サーバ側でエラーを補足 echo $body; $objLog->error($objRet->errcode, $objReq); return; } }
/** * Page のプロセス. * * @return void */ public function process($mode) { $objLog = new LC_Upgrade_Helper_Log(); $objLog->start($mode); $objJson = new LC_Upgrade_Helper_Json(); // アクセスチェック $objLog->log('* auth start'); if ($this->isValidAccess($mode) !== true) { // TODO $objJson->setError(OSTORE_E_C_INVALID_ACCESS); $objJson->display(); $objLog->error(OSTORE_E_C_INVALID_ACCESS); return; } // パラメーチェック $this->initParam(); $objLog->log('* post param check start'); $arrErr = $this->objForm->checkError(); if ($arrErr) { $objJson->setError(OSTORE_E_C_INVALID_PARAM); $objJson->display(); $objLog->error(OSTORE_E_C_INVALID_PARAM, $_POST); $objLog->log('* post param check error ' . print_r($arrErr, true)); return; } $objLog->log('* auto update check start'); if ($mode == 'auto_update' && $this->autoUpdateEnable($this->objForm->getValue('product_id')) !== true) { $objJson->setError(OSTORE_E_C_AUTOUP_DISABLE); $objJson->display(); $objLog->error(OSTORE_E_C_AUTOUP_DISABLE, $_POST); return; } // TODO CSRF対策 // 認証キーの取得 $public_key = $this->getPublicKey(); $sha1_key = $this->createSeed(); // 認証キーチェック $objLog->log('* public key check start'); if (empty($public_key)) { $objJson->setError(OSTORE_E_C_NO_KEY); $objJson->display(); $objLog->error(OSTORE_E_C_NO_KEY); return; } // リクエストを開始 $objLog->log('* http request start'); switch ($mode) { case 'patch_download': $arrPostData = array('eccube_url' => HTTP_URL, 'public_key' => sha1($public_key . $sha1_key), 'sha1_key' => $sha1_key, 'patch_code' => 'latest'); break; default: $arrPostData = array('eccube_url' => HTTP_URL, 'public_key' => sha1($public_key . $sha1_key), 'sha1_key' => $sha1_key, 'product_id' => $this->objForm->getValue('product_id')); break; } $objReq = $this->request($mode, $arrPostData); // リクエストチェック $objLog->log('* http request check start'); if (PEAR::isError($objReq)) { $objJson->setError(OSTORE_E_C_HTTP_REQ); $objJson->display(); $objLog->error(OSTORE_E_C_HTTP_REQ, $objReq); return; } // レスポンスチェック $objLog->log('* http response check start'); if ($objReq->getResponseCode() !== 200) { $objJson->setError(OSTORE_E_C_HTTP_RESP); $objJson->display(); $objLog->error(OSTORE_E_C_HTTP_RESP, $objReq); return; } $body = $objReq->getResponseBody(); $objRet = $objJson->decode($body); // JSONデータのチェック $objLog->log('* json data check start'); if (empty($objRet)) { $objJson->setError(OSTORE_E_C_FAILED_JSON_PARSE); $objJson->display(); $objLog->error(OSTORE_E_C_FAILED_JSON_PARSE, $objReq); return; } // ダウンロードデータの保存 if ($objRet->status === OSTORE_STATUS_SUCCESS) { $objLog->log('* save file start'); $time = time(); $dir = DATA_REALDIR . 'downloads/tmp/'; $filename = $time . '.tar.gz'; $data = base64_decode($objRet->data->dl_file); $objLog->log("* open {$filename} start"); if ($fp = @fopen($dir . $filename, 'w')) { @fwrite($fp, $data); @fclose($fp); } else { $objJson->setError(OSTORE_E_C_PERMISSION); $objJson->display(); $objLog->error(OSTORE_E_C_PERMISSION, $dir . $filename); return; } // ダウンロードアーカイブを展開する $exract_dir = $dir . $time; $objLog->log("* mkdir {$exract_dir} start"); if (!@mkdir($exract_dir)) { $objJson->setError(OSTORE_E_C_PERMISSION); $objJson->display(); $objLog->error(OSTORE_E_C_PERMISSION, $exract_dir); return; } $objLog->log("* extract {$dir}{$filename} start"); $tar = new Archive_Tar($dir . $filename); $tar->extract($exract_dir); $objLog->log('* copy batch start'); @(include_once CLASS_REALDIR . 'batch/SC_Batch_Update.php'); $objBatch = new SC_Batch_Update(); $arrCopyLog = $objBatch->execute($exract_dir); $objLog->log('* copy batch check start'); if (count($arrCopyLog['err']) > 0) { $objJson->setError(OSTORE_E_C_BATCH_ERR); $objJson->display(); $objLog->error(OSTORE_E_C_BATCH_ERR, $arrCopyLog); $this->registerUpdateLog($arrCopyLog, $objRet->data); $this->updateMdlTable($objRet->data); return; } // dtb_module_update_logの更新 $objLog->log('* insert dtb_module_update start'); $this->registerUpdateLog($arrCopyLog, $objRet->data); // dtb_moduleの更新 $objLog->log('* insert/update dtb_module start'); $this->updateMdlTable($objRet->data); // DB更新ファイルの読み込み、実行 $objLog->log('* file execute start'); $this->fileExecute($objRet->data->product_code); // 配信サーバーへ通知 $objLog->log('* notify to lockon server start'); $objReq = $this->notifyDownload($mode, $objReq->getResponseCookies()); $objLog->log('* dl commit result:' . serialize($objReq)); $productData = $objRet->data; $productData->dl_file = ''; $objJson->setSUCCESS($productData, 'インストール/アップデートに成功しました。'); $objJson->display(); $objLog->end(); return; } else { // 配信サーバー側でエラーを補足 echo $body; $objLog->error($objRet->errcode, $objReq); return; } }