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']); }
/** * ファイル一覧 */ 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; }
function decode($str) { return Utility::decode($str); }
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; }
/** * ファイル一覧を取得 * @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; }
/** * ディレクトリ内のファイルの一覧を作成 * @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]; }
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(); }