public static function login(Request &$request) { Pea::begin_loose_syntax(); require_once 'Auth/OpenID/Consumer.php'; require_once 'Auth/OpenID/FileStore.php'; require_once 'Auth/OpenID/SReg.php'; require_once 'Auth/OpenID/PAPE.php'; if ($request->in_vars('openid_url') != "" || $request->in_vars('openid_verify')) { Log::debug("begin openid auth: " . $request->in_vars('openid_url')); // OpenID Auth $consumer = new Auth_OpenID_Consumer(new Auth_OpenID_FileStore(work_path('openid'))); if ($request->is_vars('openid_verify')) { $response = $consumer->complete($request->request_url()); if ($response->status == Auth_OpenID_SUCCESS) { return $response->getDisplayIdentifier(); } } else { $auth_request = $consumer->begin($request->in_vars('openid_url')); if (!$auth_request) { throw new RuntimeException('invalid openid url'); } $sreg_request = Auth_OpenID_SRegRequest::build(array('nickname'), array('fullname', 'email')); if ($sreg_request) { $auth_request->addExtension($sreg_request); } if ($auth_request->shouldSendRedirect()) { $redirect_url = $auth_request->redirectURL(url(), $request->request_url(false) . '?openid_verify=true'); if (Auth_OpenID::isFailure($redirect_url)) { throw new RuntimeException("Could not redirect to server: {$redirect_url->message}"); } else { $request->redirect($redirect_url); } } else { $form_html = $auth_request->htmlMarkup(url(), $request->request_url(false) . '?openid_verify=true', false, array('id' => 'openid_message')); if (Auth_OpenID::isFailure($form_html)) { throw new RuntimeException("Could not redirect to server: {$form_html->message}"); } else { echo $form_html; exit; } } } } Pea::end_loose_syntax(); return null; }
/** * 既存のDBからモデルファイルを自動生成する **/ public static function __setup_generate_model__(Request $request, $value) { if (!$request->is_vars('tables')) { throw new RuntimeException('tables required'); } $model_path = $request->is_vars('model_path') ? $request->in_vars('model_path') : path('libs/model'); $tables = $request->in_vars('tables'); $tables = strpos(',', $tables) === false ? array($tables) : explode(',', $tables); foreach ($tables as $table) { $dao = Dao::instant($table, $value); $props = $dao->get_columns(); $properties = array(); foreach ($props as $prop_name) { $property = new ModelProperty(); $property->name($prop_name); foreach (self::$anons as $a) { $anon = $dao->a($prop_name, $a); if (isset(self::$defaults[$prop_name]) && self::$defaults[$prop_name] == $anon) { continue; } if (!is_null($anon)) { $property->annotation($a, $anon); } } $properties[] = $property; } $class_name = preg_replace('/_(.)/e', 'ucfirst("\\1")', ucfirst(strtolower($table))); $template = new Template(); $template->vars('properties', $properties); $template->vars('class_name', $class_name); $filename = File::path($model_path, $class_name . '.php'); $src = "<?php\n" . $template->read(module_templates('model.php')); File::write($filename, $src); // unset $dao = $template = $properties = $property = null; unset($dao); unset($template); unset($properties); unset($property); } }
public function login_condition(Request $request) { if ($request->user() instanceof OpenpearMaintainer) { return true; } if ($request->is_post() && $request->is_vars('login') && $request->is_vars('password')) { try { $user = C(OpenpearMaintainer)->find_get(Q::ob(Q::b(Q::eq('name', $request->in_vars('login'))), Q::b(Q::eq('mail', $request->in_vars('login'))))); if ($user instanceof OpenpearMaintainer) { if ($user->certify($request->in_vars('password'))) { $request->user($user); return true; } else { Exceptions::add(new Exception('password is incorrect'), 'password'); } } } catch (Exception $e) { Log::debug($e); } } return false; }
/** * クラスモジュールを設定する * ex. * -add_module Log -module org.rhaco.io.log.LogFile * * @param Request $req * @param string $value 設定するクラス */ public static function __setup_add_module__(Request $req, $value) { $module = $req->in_vars("module"); if (empty($module) || empty($value)) { self::cmd_info("add_module"); } $src = File::read(App::path("__settings__.php")); Lib::import($value); Lib::import($module); if (preg_match("/C(R([\"']" . $value . "[\"']))->add_module(R([\"']" . $module . "[\"']))/", $src, $match)) { $src = str_replace($match[0], sprintf('C(R("%s"))->add_module(R("%s"));', $value, $module), $src); } else { $src .= "\n" . sprintf('C(R("%s"))->add_module(R("%s"));', $value, $module); } self::update_settings($src); }
/** * Subversion リポジトリの基本ディレクトリ構成を生成する */ public static function __setup_generate_skeleton__(Request $req) { $base_dir = $req->in_vars('path', OpenpearConfig::svn_skeleton(work_path('skeleton'))); File::mkdir($base_dir); File::mkdir(File::path($base_dir, 'doc')); File::mkdir(File::path($base_dir, 'doc/en')); File::mkdir(File::path($base_dir, 'doc/ja')); File::mkdir(File::path($base_dir, 'trunk')); File::mkdir(File::path($base_dir, 'tags')); File::mkdir(File::path($base_dir, 'branches')); File::write(File::path($base_dir, 'doc/ja/README'), text(' * Documentation このパッケージにはまだドキュメントが存在しません ')); File::write(File::path($base_dir, 'doc/en/README'), text(' * Documentation This package does not have any documents. ')); }
/** * リポジトリサーバの実行 */ public static function handler() { Log::disable_display(); $request = new Request("_inc_session_=false"); if (strpos($request->args(), "/check") === 0) { exit; } $repository = new Repository(); self::lib($repository); self::app($repository); Object::C(__CLASS__)->call_module("repository", $repository); foreach ($repository->names as $type) { if (preg_match("/^\\/" . $type . "\\/download\\/(.+)\$/", $request->args(), $match)) { if (self::is_tgz($type, $match[1], $filename)) { self::dl($filename); } } if (preg_match("/^\\/" . $type . "\\/state\\/(.+)\$/", $request->args(), $match)) { if (self::is_tgz($type, $match[1], $filename)) { exit; } } if (preg_match("/^\\/" . $type . "\\/list\$/", $request->args(), $match)) { print self::read_xml($type); exit; } if (preg_match("/^\\/" . $type . "\\/list\\/json\$/", $request->args(), $match)) { if (Tag::setof($tag, self::read_xml($type))) { Text::output_jsonp($tag, $request->in_vars("callback")); } } } Http::status_header(403); exit; }