Changeset 16839


Ignore:
Timestamp:
2007/11/28 22:53:02 (15 years ago)
Author:
adachi
Message:

認証処理修正

Location:
branches/feature-module-update/data/class/pages/upgrade
Files:
4 added
2 edited

Legend:

Unmodified
Added
Removed
  • branches/feature-module-update/data/class/pages/upgrade/LC_Page_Upgrade_Download.php

    r16759 r16839  
    2323 
    2424// {{{ requires 
    25 require_once CLASS_PATH . 'pages/LC_Page.php'; 
    26 require_once 'utils/LC_Utils_Upgrade.php'; 
    27 require_once 'utils/LC_Utils_Upgrade_Log.php'; 
     25require_once CLASS_PATH . 'pages/upgrade/LC_Page_Upgrade_Base.php'; 
     26require_once DATA_PATH . 'module/Tar.php'; 
    2827 
    2928/** 
     
    3635 * @version $Id$ 
    3736 */ 
    38 class LC_Page_Upgrade_Download extends LC_Page { 
     37class LC_Page_Upgrade_Download extends LC_Page_Upgrade_Base { 
    3938 
    4039    // }}} 
     
    4746     */ 
    4847    function init() { 
    49         $this->objJson = new Services_Json(); 
    50         $this->objLog = new LC_Utils_Upgrade_Log('Download'); 
    51  
    52         $this->objForm = new SC_FormParam(); 
    53         $this->objForm->addParam( 
    54             'product_id', 'product_id', INT_LEN, '', 
    55             array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK') 
     48        parent::init(); 
     49    } 
     50 
     51    /** 
     52     * Page のプロセス. 
     53     * 
     54     * @return void 
     55     */ 
     56    function process($mode) { 
     57        $objLog  = new LC_Upgrade_Helper_Log; 
     58        $objLog->start($mode); 
     59 
     60        $objJson = new LC_Upgrade_Helper_Json; 
     61 
     62        // アクセスチェック 
     63        $objLog->log('* auth start'); 
     64        if ($this->isValidAccess($mode) !== true) { 
     65            // TODO 
     66            $objJson->setError(OSTORE_E_C_INVALID_ACCESS); 
     67            $objJson->display(); 
     68            $objLog->error(OSTORE_E_C_INVALID_ACCESS); 
     69            return; 
     70        } 
     71 
     72        // パラメーチェック 
     73        $this->initParam(); 
     74        $objLog->log('* post param check start'); 
     75        if ($this->objForm->checkError()) { 
     76            // TODO 
     77            $objJson->setError(OSTORE_E_C_INVALID_PARAM); 
     78            $objJson->display(); 
     79            $objLog->error(OSTORE_E_C_INVALID_PARAM, $_POST); 
     80            return; 
     81        } 
     82 
     83        if ($mode == 'auto_update' 
     84        && $this->autoUpdateEnable($this->objForm->getValue('product_id')) !== true) { 
     85            // TODO 
     86            $objJson->setError(OSTORE_E_C_AUTOUP_DISABLE); 
     87            $objJson->display(); 
     88            $objLog->error(OSTORE_E_C_INVALID_PARAM, $_POST); 
     89            return; 
     90        } 
     91 
     92        // TODO CSRF対策 
     93 
     94        // 認証キーの取得 
     95        $public_key = $this->getPublicKey(); 
     96        $sha1_key = $this->createSeed(); 
     97 
     98        // 認証キーチェック 
     99        $objLog->log('* public key check start'); 
     100        if (empty($public_key)) { 
     101            $objJson->setError(OSTORE_E_C_NO_KEY); 
     102            $objJson->display(); 
     103            $objLog->error(OSTORE_E_C_NO_KEY); 
     104            return; 
     105        } 
     106 
     107        // リクエストを開始 
     108        $objLog->log('* http request start'); 
     109        $arrPostData = array( 
     110            'eccube_url' => SITE_URL, 
     111            'public_key' => sha1($public_key . $sha1_key), 
     112            'sha1_key'   => $sha1_key, 
     113            'product_id' => $this->objForm->getValue('product_id') 
    56114        ); 
    57         $this->objForm->setParam($_POST); 
    58  
    59     } 
    60  
    61     /** 
    62      * Page のプロセス. 
    63      * 
    64      * @return void 
    65      */ 
    66     function process() { 
    67         $this->objLog->start(); 
    68  
    69         // 管理画面ログインチェック 
    70         $this->objLog->log('* admin auth start'); 
    71         if (LC_Utils_Upgrade::isLoggedInAdminPage() !== true) { 
    72             $arrErr = array( 
    73                 'status'  => OWNERSSTORE_STATUS_ERROR, 
    74                 'errcode' => OWNERSSTORE_ERR_DL_ADMIN_AUTH, 
    75                 'body' => LC_Utils_Upgrade::getErrMessage(OWNERSSTORE_ERR_DL_ADMIN_AUTH) 
    76             ); 
    77             echo $this->objJson->encode($arrErr); 
    78             $this->objLog->errLog($arrErr['errcode']); 
    79             exit; 
    80         } 
    81  
    82         // パラメーチェック 
    83         $this->objLog->log('* post parameter check start'); 
    84         if ($this->objForm->checkError()) { 
    85             $arrErr = array( 
    86                 'status'  => OWNERSSTORE_STATUS_ERROER, 
    87                 'errcode' => OWNERSSTORE_ERR_DL_POST_PARAM, 
    88                 'body' => LC_Utils_Upgrade::getErrMessage(OWNERSSTORE_ERR_DL_POST_PARAM) 
    89             ); 
    90             echo $this->objJson->encode($arrErr); 
    91             $this->objLog->errLog($arrErr['errcode'], $_POST); 
    92             exit; 
    93         } 
    94  
    95         // TODO CSRF対策が必須 
    96  
    97         // ダウンロードリクエストを開始 
    98         $this->objLog->log('* http request start'); 
    99         $objReq = LC_Utils_Upgrade::request( 
    100             'download', 
    101             array('product_id' => $this->objForm->getValue('product_id')) 
    102         ); 
    103  
    104         // リクエストの懸賞 
    105         $this->objLog->log('* http request check start'); 
     115        $objReq = $this->request('download', $arrPostData); 
     116 
     117        // リクエストチェック 
     118        $objLog->log('* http request check start'); 
    106119        if (PEAR::isError($objReq)) { 
    107             $arrErr = array( 
    108                 'status'  => OWNERSSTORE_STATUS_ERROR, 
    109                 'errcode' => OWNERSSTORE_ERR_DL_HTTP_REQ, 
    110                 'body' => LC_Utils_Upgrade::getErrMessage(OWNERSSTORE_ERR_DL_HTTP_REQ) 
    111             ); 
    112             echo $this->objJson->encode($arrErr); 
    113             $this->objLog->errLog($arrErr['errcode'], $objReq); 
    114             exit; 
    115         } 
    116  
    117         // レスポンスの検証 
    118         $this->objLog->log('* http response check start'); 
     120            $objJson->setError(OSTORE_E_C_HTTP_REQ); 
     121            $objJson->display(); 
     122            $objLogerr(OSTORE_E_C_HTTP_REQ, $objReq); 
     123            return; 
     124        } 
     125 
     126        // レスポンスチェック 
     127        $objLog->log('* http response check start'); 
    119128        if ($objReq->getResponseCode() !== 200) { 
    120             $arrErr = array( 
    121                 'status'  => OWNERSSTORE_STATUS_ERROR, 
    122                 'errcode' => OWNERSSTORE_ERR_DL_HTTP_RESP_CODE, 
    123                 'body' => LC_Utils_Upgrade::getErrMessage(OWNERSSTORE_ERR_DL_HTTP_RESP_CODE) 
    124             ); 
    125             echo $this->objJson->encode($arrErr); 
    126             $this->objLog->errLog($arrErr['errcode'], $objReq); 
    127             exit; 
    128         } 
    129  
    130         // JSONデータの検証 
     129            $objJson->setError(OSTORE_E_C_HTTP_RESP); 
     130            $objJson->display(); 
     131            $objLog->error(OSTORE_E_C_HTTP_RESP, $objReq); 
     132            return; 
     133        } 
     134 
    131135        $body = $objReq->getResponseBody(); 
    132         $objRet = $this->objJson->decode($body); 
    133  
    134         $this->objLog->log('* json data check start'); 
     136        $objRet = $objJson->decode($body); 
     137 
     138        // JSONデータのチェック 
     139        $objLog->log('* json deta check start'); 
    135140        if (empty($objRet)) { 
    136             $arrErr = array( 
    137                 'status'  => OWNERSSTORE_STATUS_ERROR, 
    138                 'errcode' => OWNERSSTORE_ERR_DL_INVALID_JSON_DATA, 
    139                 'body' => LC_Utils_Upgrade::getErrMessage(OWNERSSTORE_ERR_DL_INVALID_JSON_DATA) 
    140             ); 
    141             echo $this->objJson->encode($arrErr); 
    142             $this->objLog->errLog($arrErr['errcode'], $objReq); 
    143             exit; 
    144         } 
     141            $objJson->setError(OSTORE_E_C_FAILED_JSON_PARSE); 
     142            $objJson->display(); 
     143            $objLog->error(OSTORE_E_C_FAILED_JSON_PARSE, $objReq); 
     144            return; 
     145        } 
     146 
    145147        // ダウンロードデータの保存 
    146         if ($objRet->status === OWNERSSTORE_STATUS_SUCCESS) { 
    147             $this->objLog->log('* save file start'); 
     148        if ($objRet->status === OSTORE_STATUS_SUCCESS) { 
     149            $objLog->log('* save file start'); 
    148150            $time = time(); 
    149151            $dir  = DATA_PATH . 'downloads/tmp/'; 
    150152            $filename = $time . '.tar.gz'; 
    151153 
    152             $data = base64_decode($objRet->body); 
    153  
    154             $this->objLog->log("* open ${filename} start"); 
     154            $data = base64_decode($objRet->dl_file); 
     155 
     156            $objLog->log("* open ${filename} start"); 
    155157            if ($fp = fopen($dir . $filename, "w")) { 
    156158                fwrite($fp, $data); 
    157159                fclose($fp); 
    158160            } else { 
    159                 $arrErr = array( 
    160                     'status'  => OWNERSSTORE_STATUS_ERROR, 
    161                     'errcode' => OWNERSSTORE_ERR_DL_FILE_WRITE, 
    162                     'body' => LC_Utils_Upgrade::getErrMessage(OWNERSSTORE_ERR_DL_FILE_WRITE) 
    163                 ); 
    164                 echo $this->objJson->encode($arrErr); 
    165                 $this->objLog->errLog($arrErr['errcode'], $dir . $filename); 
    166                 exit; 
     161                $objJson->setError(OSTORE_E_C_FILE_WRITE); 
     162                $objJson->display(); 
     163                $objLog->error(OSTORE_E_C_FILE_WRITE, $objReq); 
     164                return; 
    167165            } 
    168166 
    169167            // ダウンロードアーカイブを展開する 
    170168            $exract_dir = $dir . $time; 
    171             $this->objLog->log("* mkdir ${exract_dir} start"); 
     169            $objLog->log("* mkdir ${exract_dir} start"); 
    172170            if (!@mkdir($exract_dir)) { 
    173                 $arrErr = array( 
    174                     'status'  => OWNERSSTORE_STATUS_ERROR, 
    175                     'errcode' => OWNERSSTORE_ERR_DL_MKDIR, 
    176                     'body' => LC_Utils_Upgrade::getErrMessage(OWNERSSTORE_ERR_DL_MKDIR) 
    177                 ); 
    178                 echo $this->objJson->encode($arrErr); 
    179                 $this->objLog->errLog($arrErr['errcode'], $exract_dir); 
    180                 exit; 
    181             } 
    182  
    183             $this->objLog->log("* extract ${dir}${filename} start"); 
     171                $objJson->setError(OSTORE_E_C_MKDIR); 
     172                $objJson->display(); 
     173                $objLog->error(OSTORE_E_C_MKDIR, $objReq); 
     174                return; 
     175            } 
     176 
     177            $objLog->log("* extract ${dir}${filename} start"); 
    184178            $tar = new Archive_Tar($dir . $filename); 
    185179            $tar->extract($exract_dir); 
    186180 
    187             $this->objLog->log("* copy batch start"); 
    188             include_once CLASS_PATH . 'batch/SC_Batch_Update.php'; 
     181            $objLog->log("* copy batch start"); 
     182            @include_once CLASS_PATH . 'batch/SC_Batch_Update.php'; 
    189183            $objBatch = new SC_Batch_Update(); 
    190184            $arrCopyLog = $objBatch->execute($exract_dir); 
    191185 
    192186            // テーブルの更新 
    193             $this->objLog->log("* insert/update dtb_module start"); 
    194             $this->updateMdlTable($objRet->product_data); 
     187            $objLog->log("* insert/update dtb_module start"); 
     188            $this->updateMdlTable($objRet->data); 
    195189 
    196190            // 配信サーバへ通知 
    197             $this->objLog->log("* notify to lockon server start"); 
    198             $this->notifyDownload($objReq->getResponseCookies()); 
    199  
    200             $arrParam = array( 
    201                 'status'  => OWNERSSTORE_STATUS_SUCCESS, 
    202                 'body' => 'インストール/アップデートに成功しました!' 
    203             ); 
    204             echo $this->objJson->encode($arrParam); 
    205             $this->objLog->log('* file save ok'); 
    206             exit; 
     191            //$objLog->log("* notify to lockon server start"); 
     192            //$this->notifyDownload($objReq->getResponseCookies()); 
     193 
     194            $objJson->setSUCCESS(array(), 'インストール/アップデートに成功しました。'); 
     195            $objJson->display(); 
     196            $objLog->end(); 
     197            return; 
    207198        } else { 
     199            // 配信サーバ側でエラーを補足 
    208200            echo $body; 
    209             $this->objLog->errLog($arrErr['errcode'], array($objRet, $objReq)); 
    210             exit; 
     201            $objLog->error($objRet->errcode, $objReq); 
     202            return; 
    211203        } 
    212204    } 
     
    218210     */ 
    219211    function destroy() { 
    220         $this->objLog->end(); 
     212        parent::destroy(); 
     213    } 
     214 
     215    function initParam() { 
     216        $this->objForm = new SC_FormParam(); 
     217        $this->objForm->addParam( 
     218            'product_id', 'product_id', INT_LEN, '', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK') 
     219        ); 
     220        $this->objForm->setParam($_POST); 
    221221    } 
    222222 
     
    242242                'module_id' => $objRet->product_id, 
    243243                'module_name' => $objRet->product_code, 
     244                //'sub_data' => $objRet->sub_data, 
    244245                'auto_update_flg' => '0', 
    245246                'create_date'     => 'NOW()', 
     
    258259     */ 
    259260    function notifyDownload($arrCookies) { 
    260         $objReq = LC_Utils_Upgrade::request('download_log', array(), $arrCookies); 
    261  
     261        $objReq = $this->request('download_log', array(), $arrCookies); 
    262262        return true; 
     263    } 
     264 
     265    /** 
     266     * アクセスチェック 
     267     * 
     268     * @return boolean 
     269     */ 
     270    function isValidAccess($mode) { 
     271        $objLog = new LC_Upgrade_Helper_Log; 
     272        switch ($mode) { 
     273        case 'download': 
     274            if ($this->isLoggedInAdminPage() === true) { 
     275                $objLog->log('* admin login ok'); 
     276                return true; 
     277            } 
     278            break; 
     279        case 'auto_update': 
     280            $objForm = new SC_FormParam; 
     281            $objForm->addParam('public_key', 'public_key', MTEXT_LEN, '', array('EXIST_CHECK', 'ALNUM_CHECK', 'MAX_LENGTH_CHECK')); 
     282            $objForm->addParam('sha1_key', 'sha1_key', MTEXT_LEN, '', array('EXIST_CHECK', 'ALNUM_CHECK', 'MAX_LENGTH_CHECK')); 
     283            $objForm->setParam($_POST); 
     284 
     285            if ($objForm->CheckError()) { 
     286                $objLog->log('* invalid param'); 
     287                return false; 
     288            } 
     289 
     290            $public_key = $this->getPublicKey(); 
     291            if (empty($public_key)) { 
     292                $objLog->log('* public_key not found'); 
     293                return false; 
     294            } 
     295 
     296            $sha1_key = $objForm->getValue('sha1_key'); 
     297            $public_key_sha1 = $objForm->getValue('public_key'); 
     298 
     299            if ($this->isValidIP() 
     300            && $public_key_sha1 === sha1($public_key . $sha1_key)) { 
     301                $objLog->log('* auto update login ok'); 
     302                return true; 
     303            } 
     304            break; 
     305        default: 
     306            $objLog->log('* mode invalid ' . $mode); 
     307            return false; 
     308        } 
     309        return false; 
    263310    } 
    264311} 
  • branches/feature-module-update/data/class/pages/upgrade/LC_Page_Upgrade_ProductsList.php

    r16620 r16839  
    2323 
    2424// {{{ requires 
    25 require_once CLASS_PATH . 'pages/LC_Page.php'; 
    26 require_once 'utils/LC_Utils_Upgrade.php'; 
    27 require_once 'utils/LC_Utils_Upgrade_Log.php'; 
     25require_once 'LC_Page_Upgrade_Base.php'; 
    2826 
    2927/** 
     
    3432 * @version $Id$ 
    3533 */ 
    36 class LC_Page_Upgrade_ProductsList extends LC_Page { 
     34class LC_Page_Upgrade_ProductsList extends LC_Page_Upgrade_Base { 
    3735 
    3836    // }}} 
     
    4543     */ 
    4644    function init() { 
    47         $this->objJson = new Services_Json(); 
    48         $this->objLog  = new LC_Utils_Upgrade_Log('Products List'); 
     45        parent::init(); 
    4946    } 
    5047 
     
    5451     * @return void 
    5552     */ 
    56     function process() { 
    57         $this->objLog->start(); 
     53    function process($mode) { 
     54        $objLog  = new LC_Upgrade_Helper_Log; 
     55        $objJson = new LC_Upgrade_Helper_Json; 
     56 
     57        $objLog->start($mode); 
    5858 
    5959        // 管理画面ログインチェック 
    60         $this->objLog->log('* admin auth start'); 
    61         if (LC_Utils_Upgrade::isLoggedInAdminPage() !== true) { 
    62             $arrErr = array( 
    63                 'status'  => OWNERSSTORE_STATUS_ERROR, 
    64                 'errcode' => OWNERSSTORE_ERR_PL_ADMIN_AUTH, 
    65                 'body' => LC_Utils_Upgrade::getErrMessage(OWNERSSTORE_ERR_PL_ADMIN_AUTH) 
    66             ); 
    67             echo $this->objJson->encode($arrErr); 
    68             $this->objLog->errLog($arrErr['errcode']); 
    69             exit; 
     60        $objLog->log('* admin auth start'); 
     61        if ($this->isLoggedInAdminPage() !== true) { 
     62            $objJson->setError(OSTORE_E_C_ADMIN_AUTH); 
     63            $objJson->display(); 
     64            $objLog->error(OSTORE_E_C_ADMIN_AUTH); 
     65            return; 
     66        } 
     67 
     68        // 認証キーの取得 
     69        $public_key = $this->getPublicKey(); 
     70        $sha1_key = $this->createSeed(); 
     71 
     72        $objLog->log('* public key check start'); 
     73        if (empty($public_key)) { 
     74            $objJson->setError(OSTORE_E_C_NO_KEY); 
     75            $objJson->display(); 
     76            $objLog->error(OSTORE_E_C_NO_KEY); 
     77            return; 
    7078        } 
    7179 
    7280        // リクエストを開始 
    73         $this->objLog->log('* http request start'); 
    74         $objReq = LC_Utils_Upgrade::request('products_list'); 
     81        $objLog->log('* http request start'); 
     82        $arrPostData = array( 
     83            'eccube_url' => SITE_URL, 
     84            'public_key' => sha1($public_key . $sha1_key), 
     85            'sha1_key'   => $sha1_key 
     86        ); 
     87        $objReq = $this->request('products_list', $arrPostData); 
    7588 
    7689        // リクエストチェック 
    77         $this->objLog->log('* http request check start'); 
     90        $objLog->log('* http request check start'); 
    7891        if (PEAR::isError($objReq)) { 
    79             $arrErr = array( 
    80                 'status'  => OWNERSSTORE_STATUS_ERROR, 
    81                 'errcode' => OWNERSSTORE_ERR_PL_HTTP_REQ, 
    82                 'body' => LC_Utils_Upgrade::getErrMessage(OWNERSSTORE_ERR_PL_HTTP_REQ) 
    83             ); 
    84             echo $this->objJson->encode($arrErr); 
    85             $this->objLog->errLog($arrErr['errcode'], $objReq); 
    86             exit; 
     92            $objJson->setError(OSTORE_E_C_HTTP_REQ); 
     93            $objJson->display(); 
     94            $objLogerr(OSTORE_E_C_HTTP_REQ, $objReq); 
     95            return; 
    8796        } 
    8897 
    8998        // レスポンスチェック 
    90         $this->objLog->log('* http response check start'); 
     99        $objLog->log('* http response check start'); 
    91100        if ($objReq->getResponseCode() !== 200) { 
    92             $arrErr = array( 
    93                 'status'  => OWNERSSTORE_STATUS_ERROR, 
    94                 'errcode' => OWNERSSTORE_ERR_PL_HTTP_RESP_CODE, 
    95                 'body' => LC_Utils_Upgrade::getErrMessage(OWNERSSTORE_ERR_PL_HTTP_RESP_CODE) 
    96             ); 
    97             echo $this->objJson->encode($arrErr); 
    98             $this->objLog->errLog($arrErr['errcode'], $objReq); 
    99             exit; 
     101            $objJson->setError(OSTORE_E_C_HTTP_RESP); 
     102            $objJson->display(); 
     103            $objLog->error(OSTORE_E_C_HTTP_RESP, $objReq); 
     104            return; 
    100105        } 
    101106 
    102107        $body = $objReq->getResponseBody(); 
    103         $objRet = $this->objJson->decode($body); 
     108        $objRet = $objJson->decode($body); 
    104109 
    105110        // JSONデータのチェック 
    106         $this->objLog->log('* json deta check start'); 
     111        $objLog->log('* json deta check start'); 
    107112        if (empty($objRet)) { 
    108             $arrErr = array( 
    109                 'status'  => OWNERSSTORE_STATUS_ERROR, 
    110                 'errcode' => OWNERSSTORE_ERR_PL_INVALID_JSON_DATA, 
    111                 'body' => LC_Utils_Upgrade::getErrMessage(OWNERSSTORE_ERR_PL_INVALID_JSON_DATA) 
    112             ); 
    113             echo $this->objJson->encode($arrErr); 
    114             $this->objLog->errLog($arrErr['errcode'], $body); 
    115             exit; 
     113            $objJson->setError(OSTORE_E_C_FAILED_JSON_PARSE); 
     114            $objJson->display(); 
     115            $objLog->error(OSTORE_E_C_FAILED_JSON_PARSE, $objReq); 
     116            return; 
    116117        } 
    117118 
    118119        // ステータスチェック 
    119         $this->objLog->log('* json status check start'); 
    120         if ($objRet->status === OWNERSSTORE_STATUS_SUCCESS) { 
    121             $this->objLog->log('* get products list ok'); 
     120        $objLog->log('* json status check start'); 
     121        if ($objRet->status === OSTORE_STATUS_SUCCESS) { 
     122            $objLog->log('* get products list ok'); 
     123 
     124            $arrProducts = array(); 
     125 
     126            foreach ($objRet->data as $product) { 
     127                $arrProducts[] = get_object_vars($product); 
     128            } 
     129            $objView = new SC_AdminView(); 
     130            $objView->assign('arrProducts', $arrProducts); 
     131            //print_r($arrProducts); 
     132            $html = $objView->fetch('ownersstore/products_list.tpl'); 
     133 
     134            $objJson->setSuccess(array(), $html); 
     135            $objJson->display(); 
     136            $objLog->end(); 
     137            return; 
     138        } else { 
     139            // 配信サーバ側でエラーを補足 
    122140            echo $body; 
    123             exit; 
    124         } else { 
    125             echo $body; 
    126             $this->objLog->errLog($objRet->errcode, $objReq); 
    127             exit; 
     141            $objLog->error($objRet->errcode, $objReq); 
     142            return; 
    128143        } 
    129144    } 
     
    135150     */ 
    136151    function destroy() { 
    137         $this->objLog->end(); 
     152        parent::destroy(); 
    138153    } 
    139154} 
Note: See TracChangeset for help on using the changeset viewer.