示例#1
0
 function auth($vars)
 {
     if (!isset($vars['sig'])) {
         return array('has_error' => 'true', 'message' => 'Signature is not found.');
     }
     if (!isset($vars['token'])) {
         return array('has_error' => 'true', 'message' => 'Token is not found.');
     }
     if (isset($vars['userdata'])) {
         $this->response['userdata'] = Utility::decode($vars['userdata']);
     }
     $query = array();
     static $keys = array('app_key', 'userhash', 'token', 't', 'v', 'userdata');
     foreach ($keys as $key) {
         if (!isset($vars[$key])) {
             continue;
         }
         $query[$key] = $vars[$key];
     }
     $api_sig = $this->make_hash($query);
     if ($api_sig !== $vars['sig']) {
         return array('has_error' => 'true', 'message' => 'Comparison error of signature.');
     }
     // ログオンしてから 10分経過している場合には、タイムアウトとする
     $time_out = UTIME - self::LIVEDOOR_TIMEOUT;
     if ($vars['t'] < $time_out) {
         return array('has_error' => 'true', 'message' => 'The time-out was done.');
     }
     if (LIVEDOOR_PERMS !== 'id') {
         return array('has_error' => 'false', 'message' => '');
     }
     $post = array('app_key' => $this->app_key, 'format' => 'xml', 'token' => $vars['token'], 't' => UTIME, 'v' => self::LIVEDOOR_VERSION);
     $post['sig'] = $this->make_hash($post);
     $data = http_request(self::LIVEDOOR_URL_GETID, 'POST', '', $post);
     if ($data['rc'] != 200) {
         return array('has_error' => 'true', 'message' => $data['rc']);
     }
     $this->responce_xml_parser($data['data']);
     $has_error = $this->response['error'] == 0 ? 'false' : 'true';
     return array('has_error' => $has_error, 'message' => $this->response['message']);
 }
示例#2
0
 /**
  * ファイル一覧
  */
 public static function getPages($pattern = '')
 {
     $ret = array();
     // 継承元のクラス名を取得(PHPは、__CLASS__で派生元のクラス名が取得できない)
     $class = get_called_class();
     // クラスでディレクトリが定義されていないときは処理しない。(AuthFile.phpなど)
     if (empty($class::$dir)) {
         return array();
     }
     foreach (self::exists() as $file) {
         $matches = array();
         if (preg_match(self::$pattern, $file, $matches)) {
             if (!isset($matches[3])) {
                 $matches[3] = 0;
             }
             if ($matches[3] === 'log') {
                 continue;
             }
             $ret[Utility::decode($matches[1])][][$matches[3]] = Utility::decode($matches[2]);
         }
     }
     return $ret;
 }
示例#3
0
function decode($str)
{
    return Utility::decode($str);
}
示例#4
0
function plugin_rename_phase3($pages)
{
    global $_rename_messages, $vars;
    $msg = $input = '';
    $files = plugin_rename_get_files($pages);
    $exists = array();
    foreach ($files as $_page => $arr) {
        foreach ($arr as $old => $new) {
            if (file_exists($new)) {
                $exists[$_page][$old] = $new;
            }
        }
    }
    if (isset($vars['menu']) && !Auth::check_role('role_contents_admin')) {
        return plugin_rename_phase4($pages, $files, $exists);
    }
    $pass = plugin_rename_getvar('pass');
    if ($pass != '' && pkwk_login($pass)) {
        return plugin_rename_phase4($pages, $files, $exists);
    } else {
        if ($pass != '') {
            $msg = plugin_rename_err('adminpass');
        }
    }
    $method = plugin_rename_getvar('method');
    if ($method == 'regex') {
        $s_src = htmlsc(plugin_rename_getvar('src'));
        $s_dst = htmlsc(plugin_rename_getvar('dst'));
        $msg .= $_rename_messages['msg_regex'] . '<br />';
        $input .= '<input type="hidden" name="method" value="regex" />';
        $input .= '<input type="hidden" name="src"    value="' . $s_src . '" />';
        $input .= '<input type="hidden" name="dst"    value="' . $s_dst . '" />';
    } else {
        $s_refer = htmlsc(plugin_rename_getvar('refer'));
        $s_page = htmlsc(plugin_rename_getvar('page'));
        $s_related = htmlsc(plugin_rename_getvar('related'));
        $msg .= $_rename_messages['msg_page'] . '<br />';
        $input .= '<input type="hidden" name="method"  value="page" />';
        $input .= '<input type="hidden" name="refer"   value="' . $s_refer . '" />';
        $input .= '<input type="hidden" name="page"    value="' . $s_page . '" />';
        $input .= '<input type="hidden" name="related" value="' . $s_related . '" />';
    }
    if (!empty($exists)) {
        $msg .= $_rename_messages['err_already_below'] . '<ul>';
        foreach ($exists as $page => $arr) {
            $msg .= '<li>' . make_pagelink(decode($page));
            $msg .= $_rename_messages['msg_arrow'];
            $msg .= htmlsc(decode($pages[$page]));
            if (!empty($arr)) {
                $msg .= '<ul>' . "\n";
                foreach ($arr as $ofile => $nfile) {
                    $msg .= '<li>' . $ofile . $_rename_messages['msg_arrow'] . $nfile . '</li>' . "\n";
                }
                $msg .= '</ul>';
            }
            $msg .= '</li>' . "\n";
        }
        $msg .= '</ul><hr />' . "\n";
        $input .= '<input type="radio" name="exist" value="0" checked="checked" />' . $_rename_messages['msg_exist_none'] . '<br />' . "\n";
        $input .= '<input type="radio" name="exist" value="1" />' . $_rename_messages['msg_exist_overwrite'] . '<br />' . "\n";
    }
    $ret = array();
    $auth = '';
    if (Auth::check_role('role_contents_admin')) {
        $auth = <<<EOD
<div class="form-group">
  <label for="_p_rename_adminpass">{$_rename_messages['msg_adminpass']}</label>
  <input type="password" name="pass" id="_p_rename_adminpass" value="" class="form-control" />
</div>
EOD;
    }
    $ret['msg'] = $_rename_messages['msg_title'];
    $script = get_script_uri();
    $ret['body'] = <<<EOD
{$msg}
\t<form action="{$script}" method="post" class="plugin-rename-form">
\t\t<input type="hidden" name="cmd" value="rename" />
\t\t<input type="hidden" name="menu"   value="1" />
\t\t{$input}
\t\t{$auth}
\t\t<input type="submit" class="btn btn-warning" value="{$_rename_messages['btn_submit']}" />
\t</form>
\t<p>{$_rename_messages['msg_confirm']}</p>
EOD;
    ksort($pages, SORT_STRING);
    $ret['body'] .= '<ul>' . "\n";
    foreach ($pages as $old => $new) {
        $ret['body'] .= '<li>' . make_pagelink(decode($old)) . $_rename_messages['msg_arrow'] . Utility::htmlsc(Utility::decode($new)) . '</li>' . "\n";
    }
    $ret['body'] .= '</ul>' . "\n";
    return $ret;
}
示例#5
0
 /**
  * ファイル一覧を取得
  * @param string $pattern ファイルのマッチパターン
  * @return array
  */
 public static function getPages($pattern = '')
 {
     $ret = array();
     // 継承元のクラス名を取得(PHPは、__CLASS__で派生元のクラス名が取得できない)
     $class = get_called_class();
     // パターンが指定されていない場合は、クラスで定義されているデフォルトのパターンを使用
     if (empty($pattern)) {
         $pattern = $class::$pattern;
     }
     // クラスでディレクトリが定義されていないときは処理しない。(AuthFile.phpなど)
     if (empty($class::$dir)) {
         return array();
     }
     foreach (self::exists() as $file) {
         $matches = array();
         if (preg_match($pattern, $file, $matches)) {
             $ret[] = Utility::decode($matches[1]);
         }
     }
     return $ret;
 }
示例#6
0
 /**
  * ディレクトリ内のファイルの一覧を作成
  * @param string $dir ディレクトリ
  * @param boolean $force キャッシュを再生成
  * @return array
  */
 public static function getExists($dir = DATA_DIR, $force = false)
 {
     global $cache;
     static $aryret;
     $func = self::getCacheName($dir);
     $cache_name = self::EXSISTS_CACHE_PREFIX . $func;
     if ($force || empty($dir)) {
         // キャッシュ再生成
         unset($aryret[$func]);
         $cache['wiki']->removeItem($cache_name);
         if (empty($dir)) {
             return;
         }
         // ディレクトリが指定されていない場合、キャッシュを削除して終わり
     } else {
         if (isset($aryret[$func])) {
             // メモリにキャッシュがある場合
             return $aryret[$func];
         } else {
             if ($cache['wiki']->hasItem($cache_name)) {
                 // キャッシュから最終更新を読み込む
                 $aryret[$func] = $cache['wiki']->getItem($cache_name);
                 return $aryret[$func];
             }
         }
     }
     $pattern = '/^((?:[0-9A-F]{2})+)\\.txt$/';
     switch ($dir) {
         case DATA_DIR:
             $pattern = '/^((?:[0-9A-F]{2})+)\\.txt$/';
             break;
         case COUNTER_DIR:
             $pattern = '/^((?:[0-9A-F]{2})+)\\.count$/';
             break;
         case BACKUP_DIR:
             $pattern = '/^((?:[0-9A-F]{2})+)\\.(txt|gz|bz2|lzf)$/';
             break;
         case UPLOAD_DIR:
             $pattern = '/^((?:[0-9A-F]{2})+)_((?:[0-9A-F]{2})+)(?:\\.([0-9]+|log))?$/';
             break;
         default:
             $func = md5($dir);
     }
     // キャッシュを再生成
     foreach (new DirectoryIterator($dir) as $fileinfo) {
         $filename = $fileinfo->getFilename();
         if ($fileinfo->isFile() && preg_match($pattern, $filename, $matches)) {
             $page = Utility::decode($matches[1]);
             if ($dir !== UPLOAD_DIR) {
                 $aryret[$func][$page] = $filename;
                 continue;
             }
             $aryret[$func][$page][Utility::decode($matches[2])][isset($matches[3]) ? $matches[3] : 0] = $filename;
         }
     }
     $cache['wiki']->setItem($cache_name, $aryret[$func]);
     return $aryret[$func];
 }
示例#7
0
function plugin_hatena_action()
{
    global $vars, $auth_api;
    if (!$auth_api['hatena']['use']) {
        return '';
    }
    $page = empty($vars['page']) ? '' : Utility::decode($vars['page']);
    $obj = new AuthHatena();
    // LOGIN
    if (isset($vars['login'])) {
        Utility::redirect($obj->make_login_link());
    }
    // LOGOUT
    if (isset($vars['logout'])) {
        $obj->unsetSession();
        Utility::redirect();
    }
    // AUTH
    $rc = $obj->auth($vars['cert']);
    if (!isset($rc['has_error']) || $rc['has_error'] == 'true') {
        // ERROR
        $body = isset($rc['message']) ? $rc['message'] : 'unknown error.';
        Utility::dieMessage($body);
    }
    $obj->setSession();
    Utility::redirect();
}