ここの情報は古いです。ご理解頂いた上でお取り扱いください。

source: OpenPNE/trunk/webapp/lib/OpenPNE/Auth.php @ 4917

Last change on this file since 4917 was 4917, checked in by ogawa, 15 years ago

#1766:OpenPNE_Authインスタンス作成処理の共通化

File size: 5.4 KB
Line 
1<?php
2/**
3 * @copyright 2005-2007 OpenPNE Project
4 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
5 */
6
7// PEAR::Auth
8require_once 'Auth.php';
9
10
11class OpenPNE_Auth
12{
13    /**
14     * @var Auth
15     */
16    var $auth;
17
18    var $storage = 'DB';
19    var $options = '';
20    var $is_ktai = false;
21    var $is_encrypt_username = false;
22
23    var $expire = 0;
24    var $idle = 0;
25    var $uid = 0;
26    var $sess_id = '';
27    var $cookie_path = '/';
28
29    function OpenPNE_Auth($config = array())
30    {
31        ini_set('session.use_cookies', 0);
32        if (isset($config['is_ktai'])) {
33            $this->is_ktai = (bool)$config['is_ktai'];
34        }
35        if (isset($config['storage'])) {
36            $this->storage = $config['storage'];
37        }
38        if (isset($config['options'])) {
39            $this->options = $config['options'];
40        }
41        if (isset($config['is_encrypt_username'])) {
42            $this->is_encrypt_username = $config['is_encrypt_username'];
43        }
44
45        if ($this->is_ktai) {
46            if (!empty($_REQUEST['ksid'])) {
47                $this->sess_id = $_REQUEST['ksid'];
48                session_id($this->sess_id);
49            }
50            $this->options['advancedsecurity'] = false;
51        } else {
52            if (!empty($_COOKIE[session_name()])) {
53                $this->sess_id = $_COOKIE[session_name()];
54                session_id($this->sess_id);
55            }
56        }
57        $this->set_cookie_params();
58    }
59
60    function set_cookie_params()
61    {
62        $url = parse_url(OPENPNE_URL);
63        if (substr($url['path'], -1) != '/') {
64            $url['path'] .= '/';
65        }
66        $this->cookie_path = $url['path'];
67    }
68
69    function &factory($login = false)
70    {
71        @session_start();
72        if ($login) {
73            $auth = new Auth($this->storage, $this->options, '', false);
74            $auth->setAllowLogin(true);
75        } else {
76            $auth = new Auth('null');
77            $auth->setAllowLogin(false);
78        }
79        $auth->setExpire($this->expire);
80        $auth->setIdle($this->idle);
81        return $auth;
82    }
83
84    function login($is_save_cookie = false)
85    {
86        $this->auth =& $this->factory(true);
87        if ($this->is_encrypt_username) {
88            $this->auth->post[$this->auth->_postUsername] =
89                t_encrypt($this->auth->post[$this->auth->_postUsername]);
90        }
91
92        $this->auth->start();
93        if ($this->auth->getAuth()) {
94            if (OPENPNE_SESSION_CHECK_URL) {
95                $this->auth->setAuthData('OPENPNE_URL', OPENPNE_URL);
96            }
97
98            $this->sess_id = session_id();
99            if ($is_save_cookie) {
100                $expire = time() + 2592000; // 30 days
101            } else {
102                $expire = 0;
103            }
104            if (!$this->is_ktai) {
105                setcookie(session_name(), session_id(), $expire, $this->cookie_path);
106            }
107            return true;
108        } else {
109            return false;
110        }
111    }
112
113    function auth()
114    {
115        if (!$this->sess_id) {
116            return false;
117        }
118        $this->auth =& $this->factory();
119        return $this->checkAuth();
120    }
121
122    function logout()
123    {
124        if (!$this->auth) {
125            if (!$this->sess_id) {
126                return true;
127            }
128            $this->auth =& $this->factory();
129        }
130
131        if (isset($_COOKIE[session_name()])) {
132            if (!$this->is_ktai) {
133                setcookie(session_name(), '', time() - 3600, $this->cookie_path);
134            }
135        }
136        $_SESSION = array();
137        session_destroy();
138        unset($this->auth);
139
140        $this->set_session_save_handler();
141    }
142
143    function setExpire($expiretime)
144    {
145        $this->expire = $expiretime;
146    }
147
148    function setIdle($idletime)
149    {
150        $this->idle = $idletime;
151    }
152
153    function uid($uid = '')
154    {
155        if ($uid) {
156            $this->uid = $uid;
157        }
158        return $this->uid;
159    }
160
161    function getUsername()
162    {
163        return $this->auth->getUsername();
164    }
165
166    /**
167     * static set_session_save_handler()
168     */
169    function set_session_save_handler()
170    {
171        static $sess_storage;
172        if (is_null($sess_storage)) {
173            switch (SESSION_STORAGE) {
174            case 1:
175                include_once 'OpenPNE/DBSession.php';
176                $sess_storage = new OpenPNE_DBSession(db_get_dsn('session'));
177                break;
178            case 2:
179                include_once 'OpenPNE/MemcacheSession.php';
180                $sess_storage = new OpenPNE_MemcacheSession($GLOBALS['_OPENPNE_MEMCACHE_LIST']['session']['dsn']);
181                break;
182            default:
183                return;
184            }
185            session_set_save_handler(array(&$sess_storage, 'open'),
186                                 array(&$sess_storage, 'close'),
187                                 array(&$sess_storage, 'read'),
188                                 array(&$sess_storage, 'write'),
189                                 array(&$sess_storage, 'destroy'),
190                                 array(&$sess_storage, 'gc'));
191        }
192    }
193
194    function checkAuth()
195    {
196        if ($this->auth->checkAuth()) {
197            if (OPENPNE_SESSION_CHECK_URL) {
198                $openpne_url = $this->auth->getAuthData('OPENPNE_URL');
199                if ($openpne_url == OPENPNE_URL) {
200                    return true;
201                }
202            } else {
203                return true;
204            }
205        }
206        return false;
207    }
208}
209
210?>
Note: See TracBrowser for help on using the repository browser.