module cli pour appels en ligne de commande
[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){
8       if(($user = $this->user($login)) !== false){
9         if($this->password_ok($user, $password)){
10           if(!$this->set_session($user)) $user = false;
11         }
12         else{
13           $this->clear_session();
14           $user = array();
15         }
16       }
17       return $user;
18     }
19
20     function logout(){
21       return $this->clear_session();
22     }
23
24     function user_ok($user){
25       return
26           (isset($_SESSION[$this->app_session_key()]["id"]))
27       &&  (isset($_SESSION[$this->app_session_key()]["pass"]))
28       &&  (isset($_SESSION[$this->app_session_key()]["ip"]))
29       &&  (strcmp(md5($user["password"].$_SESSION[$this->app_session_key()]["id"]), $_SESSION[$this->app_session_key()]["pass"]) == 0)
30       &&  ($_SESSION[$this->app_session_key()]["ip"] == $_SERVER["REMOTE_ADDR"]);
31     }
32
33     function password_ok($user, $password){
34       if(!$user) return false;
35       return
36           (isset($_SESSION[$this->app_session_key()]["id"]))
37       &&  (isset($_SESSION[$this->app_session_key()]["ip"]))
38       &&  (strcmp(md5($user["password"].$_SESSION[$this->app_session_key()]["id"]), $password) == 0)
39       &&  ($_SESSION[$this->app_session_key()]["ip"] == $_SERVER["REMOTE_ADDR"]);
40     }
41
42     # ----------------------------------------------------------------------------------------
43     #                                                                                  session
44     #
45
46     function app_session_key(){
47       $env = $this->env();
48       return "mw_".str_replace("/", "_", $env->path("web"));
49     }
50
51     function load_session(){
52       @session_start();
53       if(!isset($_SESSION[$this->app_session_key()]["id"])) $this->clear_session();
54       $user = array();
55       if(isset($_SESSION[$this->app_session_key()]["user"])){
56         $user = $this->user($_SESSION[$this->app_session_key()]["user"]);
57       }
58       elseif(isset($_COOKIE[$this->app_session_key()."_user"]) && isset($_COOKIE[$this->app_session_key()."_pass"])){
59         if($user = $this->user($_COOKIE[$this->app_session_key()."_user"])){
60           $user["password"] = $_COOKIE[$this->app_session_key()."_pass"];
61           $this->set_session($user);
62         }
63       }
64       if($user){
65         if(!$this->user_ok($user)){
66           $this->clear_session();
67           $user = array();
68         }
69       }
70       else $user = array();
71       $this->user = $user;
72       return $user;
73     }
74
75     function set_session($user){
76       if(!isset($_SESSION[$this->app_session_key()])) $this->clear_session();
77       $_SESSION[$this->app_session_key()]["user"] = $user["login"];
78       $_SESSION[$this->app_session_key()]["pass"] = md5($user["password"].$_SESSION[$this->app_session_key()]["id"]);
79       $env = $this->env();
80       return
81           @setcookie($this->app_session_key()."_user", $user["login"], time() + (60 * 60 * 24 * 7), "/")
82       &&  @setcookie($this->app_session_key()."_pass", $user["password"], time() + (60 * 60 * 24 * 7), "/");
83     }
84
85     function clear_session(){
86       unset($_SESSION[$this->app_session_key()]);
87       $_SESSION[$this->app_session_key()] = array(
88         "ip" => $_SERVER["REMOTE_ADDR"],
89         "id" => md5(rand())
90       );
91       return
92           @setcookie($this->app_session_key()."_user", "", 0, "/")
93       &&  @setcookie($this->app_session_key()."_pass", "", 0, "/");
94     }
95
96     function set_session_user($user){
97       $this->set_session($user);
98       $this->user =& $user;
99     }
100
101     function get_session_user(){
102       return $this->user;
103     }
104
105   }
106
107 ?>