Changeset 11993

Show
Ignore:
Timestamp:
05/19/08 22:09:06 (6 months ago)
Author:
ha1t
Message:

認証周りにHaste利用

Location:
websites/events.php.gr.jp/trunk
Files:
5 added
7 modified

Legend:

Unmodified
Added
Removed
  • websites/events.php.gr.jp/trunk/app/Ethna_AuthActionClass.php

    r9806 r11993  
    55 *  @author     halt feits <halt.feits@gmail.com> 
    66 *  @package    Anubis 
    7  *  @version    $Id: Ethna_AuthActionClass.php 136 2006-08-17 05:17:17Z ha1t $ 
     7 *  @version    $Id$ 
    88 */ 
    99 
     
    1717 *  @package    Anubis 
    1818 * 
    19  * $config = array( 
    20  *     'base_url' => 'http://example.com/index.php', 
    21  *     'typekey_token' => 'typekey_token', 
    22  * );     
    2319 */ 
    2420class Ethna_AuthActionClass extends Ethna_ActionClass 
    2521{ 
    2622 
    27     /** 
    28      * Typekey Object 
    29      * @var     object 
    30      * @access  protected 
    31      */ 
    32     var $TypeKey; 
    33  
    34     var $typekey_token; 
    35     var $signin_url; 
    36     var $signout_url; 
    37      
    3823    //{{{ authenticate() 
    3924    /** 
     
    4328    function authenticate() 
    4429    { 
    45         $this->user = $this->backend->getManager('User'); 
    46         $this->logger = $this->backend->getLogger(); 
    47  
    48         if ($this->session->isStart()) { 
    49             $this->logger->log(LOG_DEBUG, 'Session started'); 
    50             return null; 
    51         } 
    52          
    53         $typekey_url = "http://".$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 
    54         $base_url = $this->config->get('base_url'); 
    55          
    56         //set typekey token from config 
    57         $this->typekey_token = $this->config->get('typekey_token'); 
    58         
    59         $this->TypeKey = new Auth_TypeKey(); 
    60         $this->TypeKey->site_token($this->typekey_token); 
    61         $this->TypeKey->version('1.1'); 
    62          
    63         $this->signin_url = $this->TypeKey->urlSignIn($typekey_url); 
    64         $this->signout_url = $this->TypeKey->urlSignOut($base_url); 
    65          
    66         $this->af->setApp('signin_url', $this->signin_url); 
    67         $this->af->setApp('signout_url', $this->signout_url); 
    68          
    69         if ( is_null($this->session->get('name')) ) { 
    70          
    71             if( $this->authTypeKey($_GET) === TRUE ){ 
    72                  
    73                 //success 
    74                 $this->logger->log(LOG_DEBUG, 'Authenticate OK!'); 
    75                 $this->session->start(); 
    76                 $this->session->set('name', $_GET['name']); 
    77                 $this->session->set('nick', $_GET['nick']); 
    78                 $this->session->set('is_admin', $this->user->isAdmin($_GET['name'])); 
    79              
    80             } else { 
    81  
    82                 $this->session->destroy(); 
    83                 print("fail auth typekey"); 
    84                 Aero_Util::move($this->signout_url, "5"); 
    85                 exit; 
    86              
     30        if (!$this->session->isStart()) { 
     31            $config = $this->config->get('auth'); 
     32            if (isset($config['type']) && $config['type'] != 'none') { 
     33                $this->redirect('/login'); 
    8734            } 
    88          
    8935        } 
    9036 
    91         return null; 
    92         
     37        return parent::authenticate(); 
    9338    } 
    9439    //}}} 
    9540 
    96     //{{{ authTypeKey() 
     41    //{{{ redirect 
    9742    /** 
    98      * authTypeKey 
     43     * redirect 
    9944     * 
    100      * $query = array( 
    101      *  'ts' => '', 
    102      *  'email' => '', 
    103      *  'name' => '', 
    104      *  'nick' => '', 
    105      *  'sig' => '', 
    106      * ) 
    107      * 
    108      * @access protected 
     45     * @access public 
    10946     */ 
    110     function authTypeKey($query){ 
    111      
    112         $result = isset($query['ts']) 
    113             && isset($query['email']) 
    114             && isset($query['name']) 
    115             && isset($query['nick']) 
    116             && isset($query['sig']); 
    117          
    118         if($result){ 
    119          
    120             $result = $this->TypeKey->verifyTypeKey($query); 
    121  
    122             if (PEAR::isError($result)) { 
    123                  
    124                 if($result->getMessage() == 'Timestamp from TypeKey is too old'){ 
    125                     header('Location: ' . $this->signout_url); 
    126                     exit(); 
    127                      
    128                 } 
    129  
    130                 if($result->getMessage() == 'Invalid signature'){ 
    131                     Ethna::raiseNotice('TypeKey Invalid signature'); 
    132                     return true; 
    133                 } 
    134                  
    135                 Ethna::raiseError($result->getMessage()); 
    136                 return false; 
    137                  
    138             } else { 
    139                  
    140                 return true; 
    141              
    142             } 
    143              
    144         } else { 
    145              
    146             header("Location: {$this->signin_url}"); 
    147             exit; 
    148          
    149         } 
     47    function redirect($action = "") 
     48    { 
     49        $url = $this->config->get('base_url') . $action; 
     50        $html = <<<EOD 
     51<html> 
     52<head> 
     53<meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> 
     54<meta http-equiv="refresh" CONTENT="0;URL={$url}"> 
     55<meta name="robots" content="INDEX,NOFOLLOW"> 
     56<title>Redirecting to {$url}</title> 
     57</head> 
     58<body> 
     59<p>if not start redirect, click <a href="{$url}">this link</a></p> 
     60</body> 
     61</html> 
     62EOD; 
     63        print($html); 
     64        exit(); 
    15065    } 
    15166    //}}} 
  • websites/events.php.gr.jp/trunk/app/Ethna_AuthAdminActionClass.php

    r9806 r11993  
    88 */ 
    99 
    10 require_once 'Auth_TypeKey.php'; 
     10require_once 'Ethna_AuthActionClass.php'; 
    1111 
    1212/** 
     
    2222 * );     
    2323 */ 
    24 class Ethna_AuthAdminActionClass extends Ethna_ActionClass 
     24class Ethna_AuthAdminActionClass extends Ethna_AuthActionClass 
    2525{ 
    2626 
    27     //{{{ authenticate() 
    2827    /** 
    2928     * authentication 
     
    3231    function authenticate() 
    3332    { 
    34         if ($this->session->isStart()) { 
    35             return null; 
    36         } 
    37  
    38         $typekey_url = "http://".$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 
    39         $base_url = $this->config->get('base_url'); 
    40  
    41         //set typekey token from config 
    42         $this->typekey_token = $this->config->get('typekey_token'); 
    43  
    44         $this->TypeKey = new Auth_TypeKey(); 
    45         $this->TypeKey->site_token($this->typekey_token); 
    46         $this->TypeKey->version('1.1'); 
    47  
    48         $this->signin_url = $this->TypeKey->urlSignIn($typekey_url); 
    49         $this->signout_url = $this->TypeKey->urlSignOut($base_url); 
    50  
    51         $this->af->setApp('signout_url', $this->signout_url); 
    52  
    53         if ( !isset($_SESSION['name']) ) { 
    54  
    55             if( $this->authTypeKey($_GET) === TRUE ){ 
    56  
    57                 //success 
    58                 //$this->session->start(); 
    59                 session_start(); 
    60                 $_SESSION['name'] = $_GET['name']; 
    61                 $_SESSION['nick'] = $_GET['nick']; 
    62  
    63             } else { 
    64  
    65                 //$this->session->destroy(); 
    66                 print("Fail auth typekey"); 
    67                 Event_Util::redirect($this->signout_url, 5); 
    68                 exit; 
    69  
    70             } 
    71         } 
    72  
    7333        $this->user = $this->backend->getManager('User'); 
    74         if ($this->user->isAdmin($_SESSION['name'])) { 
    75             return null; 
    76         } else { 
     34        if (!$this->user->isAdmin($_SESSION['name'])) { 
    7735            Event_Util::redirect($this->config->get('base_url') , 2, "You don't have a permission"); 
    7836        } 
    79  
     37         
     38        return parent::authenticate(); 
    8039    } 
    81     //}}} 
    82  
    83     //{{{ authTypeKey() 
    84     /** 
    85      * authTypeKey 
    86      * 
    87      * $query = array( 
    88      *  'ts' => '', 
    89      *  'email' => '', 
    90      *  'name' => '', 
    91      *  'nick' => '', 
    92      *  'sig' => '', 
    93      * ) 
    94      * 
    95      * @access protected 
    96      */ 
    97     function authTypeKey($query){ 
    98      
    99         $result = isset($query['ts']) 
    100             && isset($query['email']) 
    101             && isset($query['name']) 
    102             && isset($query['nick']) 
    103             && isset($query['sig']); 
    104          
    105         if($result){ 
    106          
    107             $result = $this->TypeKey->verifyTypeKey($query); 
    108  
    109             if (PEAR::isError($result)) { 
    110                  
    111                 if($result->getMessage() == 'Timestamp from TypeKey is too old'){ 
    112                     header('Location: ' . $this->signout_url); 
    113                     exit(); 
    114                      
    115                 } 
    116  
    117                 if($result->getMessage() == 'Invalid signature'){ 
    118                     Ethna::raiseNotice('TypeKey Invalid signature'); 
    119                     return true; 
    120                 } 
    121                  
    122                 Ethna::raiseError($result->getMessage()); 
    123                 return false; 
    124                  
    125             } else { 
    126                  
    127                 return true; 
    128              
    129             } 
    130              
    131         } else { 
    132              
    133             header("Location: {$this->signin_url}"); 
    134             exit; 
    135          
    136         } 
    137     } 
    138     //}}} 
    13940 
    14041} 
  • websites/events.php.gr.jp/trunk/app/Event_Controller.php

    r11373 r11993  
    1515// include_path������ץꥱ�������ǥ��쥯�ȥ���� 
    1616$include_paths = array( 
    17     //'system' => ini_get('include_path'), //lib��pp�����ߤʤ� 
     17    'system' => ini_get('include_path'), //lib��pp�����ߤʤ� 
    1818    'app' => BASE . "/app", 
    1919    'lib' => BASE . "/lib", 
     
    146146 
    147147    /** 
     148     *  @var    array       ����ݤȤʤ��饰������ץꥱ������ID�Υꥹ��     */ 
     149    var $plugin_search_appids = array( 
     150        /* 
     151         *  �ץ饰���󸡺�˸���ݤȤʤ륢�ץꥱ������ID�Υꥹ�Ȥ򵭽Ҥ��ޤ��� 
     152         * 
     153         *  ����㡧 
     154         *  Common_Plugin_Foo_Bar �Τ褦���̾�Υץ饰���󤬥��ץꥱ��������         *  �ץ饰������쥯�ȥ�¸�ߤ����硢�ʲ��Τ褦�˻�ꤹ�� 
     155         *  Common_Plugin_Foo_Bar, EthnaWiki_Plugin_Foo_Bar, Ethna_Plugin_Foo_Bar 
     156         *  �ν��ץ饰���󤬸��������  
     157         * 
     158         *  'Common', 'EthnaWiki', 'Ethna', 
     159         */ 
     160        'Event', 'Haste', 'Ethna', 
     161    ); 
     162 
     163    /** 
    148164     *  @var    array       �ե��륿�� 
    149165     */ 
     
    248264    } 
    249265     
    250     //{{{ _getActionName_Form 
    251266    /** 
    252267     *  �ե���������ᤵ�줿��������̾��� 
     
    263278        return $arr[1]; 
    264279    } 
    265     //}}} 
    266280 
    267281    function getTemplateDir() 
     
    276290        } 
    277291    } 
     292 
     293    /** 
     294     * _activateEthnaManager 
     295     * 
     296     */ 
     297    function _activateEthnaManager() 
     298    { 
     299        if ($this->config->get('debug') == false) { 
     300            return; 
     301        } 
     302 
     303        parent::_activateEthnaManager(); 
     304 
     305        // action�� 
     306        $this->action['__ethna_gettext__'] = array( 
     307            'form_name' =>  'Ethna_Form_Gettext', 
     308            'form_path' =>  sprintf('%s/class/Action/Ethna_Action_Gettext.php', ETHNA_BASE), 
     309            'class_name' => 'Ethna_Action_Gettext', 
     310            'class_path' => sprintf('%s/class/Action/Ethna_Action_Gettext.php', ETHNA_BASE), 
     311        ); 
     312 
     313        // forward�� 
     314        $this->forward['__ethna_gettext__'] = array( 
     315            'forward_path'  => sprintf('%s/tpl/gettext.tpl', ETHNA_BASE), 
     316            //'view_name'     => 'Ethna_View_Gettext', 
     317            //'view_path'     => sprintf('%s/class/View/Ethna_View_Gettext.php', ETHNA_BASE), 
     318        ); 
     319 
     320    } 
    278321} 
    279322?> 
  • websites/events.php.gr.jp/trunk/app/action/Event/Join.php

    r11988 r11993  
    6767    function prepare() 
    6868    { 
    69         if ($this->af->validate() > 0) { 
    70             return 'error'; 
    71         } 
    72  
    7369        $this->db = $this->backend->getDB(); 
    7470 
     
    8076            } 
    8177        } 
     78 
    8279        if (($event['max_register'] - $attendee_count) <= 0) { 
     80            $this->ae->add('over_quota', '���򥪡��С����Ƥ��ޤ�'); 
     81        } 
     82 
     83        if ($this->af->validate() > 0) { 
    8384            return 'error'; 
    8485        } 
  • websites/events.php.gr.jp/trunk/app/action/Login.php

    r9806 r11993  
    4848{ 
    4949    /** 
     50     * authenticate 
     51     * 
     52     * @access public 
     53     */ 
     54    function authenticate() 
     55    { 
     56        //disable authenticate 
     57        return null; 
     58    } 
     59 
     60    /** 
    5061     *  Loginアクションの前処理 
    5162     * 
     
    5566    function prepare() 
    5667    { 
     68        $config = $this->config->get('auth'); 
     69        $controller =& $this->backend->getController(); 
     70        $plugin     =& $controller->getPlugin(); 
     71        $this->auth =& $plugin->getPlugin('Auth', ucfirst($config['type'])); 
     72 
     73        $this->af->setApp('login_url', $this->auth->getLoginUrl()); 
     74 
     75        if (!isset($_GET['name'])) { 
     76            header('Location: ' . $this->auth->getLoginUrl()); 
     77        } 
     78 
    5779        return null; 
    5880    } 
     
    6688    function perform() 
    6789    { 
    68         Event_Util::redirect($this->config->get('base_url'), 2, 'ログインに成功しました。'); 
     90        $result = $this->auth->login(); 
     91        if (!Ethna::isError($result) && $result !== false) { 
     92            $this->user = $this->backend->getManager('User'); 
     93            $this->session->set('name', $_GET['name']); 
     94            $this->session->set('nick', $_GET['nick']); 
     95            $this->session->set('is_admin', $this->user->isAdmin($_GET['name'])); 
     96            $this->redirect(); 
     97        } 
     98 
     99        return 'login'; 
    69100    } 
    70101} 
  • websites/events.php.gr.jp/trunk/etc

    • Property svn:ignore set to
      event-ini.php
  • websites/events.php.gr.jp/trunk/etc/event-ini.php.default

    r9806 r11993  
    1212    'theme' => 'phpgrjp', 
    1313 
    14     'typekey_token' => '', 
     14    'typekey_admin' => 'your name', 
     15 
     16    'auth' => array( 
     17        'type' => 'typekey', 
     18        'typekey_token' => 'your token', 
     19        'author' => 'any', //do not edit 
     20    ), 
    1521 
    1622    'debug' => false,