mecanisme d'upgrade
[mtweb] / mw / app / data / modules / share / mw_data_users_sessions.php
1 <?php
2
3   class mw_data_users_sessions extends mw_data{
4
5     var $user;
6
7     function login($login, $password, $reference_user = null){
8       if(($user = isset($reference_user) ? $reference_user : $this->user($login)) !== false){
9         if(isset($reference_user) && $login != $reference_user["login"]){
10           $this->clear_session();
11           return array();
12         }
13         if($this->password_ok($user, $password)){
14           if(!$this->set_session($user)) $user = false;
15         }
16         else{
17           $this->clear_session();
18           $user = array();
19         }
20       }
21       return $user;
22     }
23
24     function logout(){
25       return $this->clear_session();
26     }
27
28     function user_ok($user){
29       return
30           (isset($_SESSION[$this->app_session_key()]["id"]))
31       &&  (isset($_SESSION[$this->app_session_key()]["pass"]))
32       &&  (isset($_SESSION[$this->app_session_key()]["ip"]))
33       &&  (strcmp(md5($user["password"].$_SESSION[$this->app_session_key()]["id"]), $_SESSION[$this->app_session_key()]["pass"]) == 0)
34       &&  ($_SESSION[$this->app_session_key()]["ip"] == $_SERVER["REMOTE_ADDR"]);
35     }
36
37     function password_ok($user, $password){
38       if(!$user) return false;
39       $OK =
40           (isset($_SESSION[$this->app_session_key()]["id"]))
41       &&  (isset($_SESSION[$this->app_session_key()]["ip"]))
42       &&  (strcmp(md5($user["password"].$_SESSION[$this->app_session_key()]["id"]), $password) == 0)
43       &&  ($_SESSION[$this->app_session_key()]["ip"] == $_SERVER["REMOTE_ADDR"])
44       ;
45       return $OK;
46     }
47
48     # ----------------------------------------------------------------------------------------
49     #                                                                                  session
50     #
51
52     function app_session_key(){
53       $env = $this->env();
54       return "mw_".str_replace("/", "_", $env->path("web"));
55     }
56
57     function load_session($reference_user = null){
58       @session_start();
59       if(!isset($_SESSION[$this->app_session_key()]["id"])) $this->clear_session();
60       $user = array();
61       if(isset($_SESSION[$this->app_session_key()]["user"])){
62         $user = isset($reference_user) ? $reference_user : $this->user($_SESSION[$this->app_session_key()]["user"]);
63       }
64       elseif(isset($_COOKIE[$this->app_session_key()."_user"]) && isset($_COOKIE[$this->app_session_key()."_pass"])){
65         if($user = $this->user($_COOKIE[$this->app_session_key()."_user"])){
66           $user["password"] = $_COOKIE[$this->app_session_key()."_pass"];
67           $this->set_session($user);
68         }
69       }
70       if($user){
71         if(!$this->user_ok($user)){
72           $this->clear_session();
73           $user = array();
74         }
75       }
76       else $user = array();
77       $this->user = $user;
78       return $user;
79     }
80
81     function set_session($user){
82       if(!isset($_SESSION[$this->app_session_key()])) $this->clear_session();
83       $_SESSION[$this->app_session_key()]["user"] = $user["login"];
84       $_SESSION[$this->app_session_key()]["pass"] = md5($user["password"].$_SESSION[$this->app_session_key()]["id"]);
85       $env = $this->env();
86       return
87           @setcookie($this->app_session_key()."_user", $user["login"], time() + (60 * 60 * 24 * 7), "/")
88       &&  @setcookie($this->app_session_key()."_pass", $user["password"], time() + (60 * 60 * 24 * 7), "/");
89     }
90
91     function clear_session(){
92       unset($_SESSION[$this->app_session_key()]);
93       $_SESSION[$this->app_session_key()] = array(
94         "ip" => $_SERVER["REMOTE_ADDR"],
95         "id" => md5(rand())
96       );
97       return
98           @setcookie($this->app_session_key()."_user", "", 0, "/")
99       &&  @setcookie($this->app_session_key()."_pass", "", 0, "/");
100     }
101
102     function set_session_user($user){
103       $this->set_session($user);
104       $this->user =& $user;
105     }
106
107     function get_session_user(){
108       return $this->user;
109     }
110
111   }
112
113 ?>