the dbase part is moved to another file to be able to use sql or file (new files)
authorMatteo Nastasi (mop) <nastasi@alternativeoutput.it>
Thu, 27 Jan 2011 07:35:47 +0000 (08:35 +0100)
committerMatteo Nastasi (mop) <nastasi@alternativeoutput.it>
Thu, 27 Jan 2011 07:35:47 +0000 (08:35 +0100)
web/Obj/dbase_base.phh [new file with mode: 0644]
web/Obj/dbase_file.phh [new file with mode: 0644]
web/Obj/dbase_pgsql.phh [new file with mode: 0644]

diff --git a/web/Obj/dbase_base.phh b/web/Obj/dbase_base.phh
new file mode 100644 (file)
index 0000000..2db3934
--- /dev/null
@@ -0,0 +1,77 @@
+<?php
+  /*
+   *  brisk - dbase_base.phh
+   *
+   *  Copyright (C) 2011      Matteo Nastasi
+   *                          mailto: nastasi@alternativeoutput.it 
+   *                                  matteo.nastasi@milug.org
+   *                          web: http://www.alternativeoutput.it
+   *
+   * This program is free software; you can redistribute it and/or modify
+   * it under the terms of the GNU General Public License as published by
+   * the Free Software Foundation; either version 2 of the License, or
+   * (at your option) any later version.
+   *
+   * This program is distributed in the hope that it will be useful, but
+   * WITHOUT ANY WARRANTY; without even the implied warranty of
+   * MERCHANTABLILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+   * General Public License for more details. You should have received a
+   * copy of the GNU General Public License along with this program; if
+   * not, write to the Free Software Foundation, Inc, 59 Temple Place -
+   * Suite 330, Boston, MA 02111-1307, USA.
+   *
+   */
+
+
+class LoginDBItem {
+    var $code;
+    var $login;
+    var $pass;
+    var $email;
+    var $type;
+
+    function LoginDBItem($code, $login, $pass, $email, $type)
+    {
+        $this->code  = $code;
+        $this->login = $login;
+        $this->pass  = $pass;
+        $this->email = $email;
+        $this->type  = $type;
+    }
+
+    static function &LoginDBItemFromRecord($rec)
+    {
+        $ret = & new LoginDBItem($rec->code, $rec->login, $rec->pass, 
+                                 $rec->email, $rec->type);
+
+        return ($ret);
+    }
+
+    function codeget()
+    {
+        return $this->code;
+    }
+
+    function loginget()
+    {
+        return $this->login;
+    }
+    
+    function passget()
+    {
+        return $this->pass;
+    }
+
+    function emailget()
+    {
+        return $this->email;
+    }
+
+    function typeget()
+    {
+        return $this->type;
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/web/Obj/dbase_file.phh b/web/Obj/dbase_file.phh
new file mode 100644 (file)
index 0000000..2fb3178
--- /dev/null
@@ -0,0 +1,174 @@
+<?php
+  /*
+   *  brisk - dbase_file.phh
+   *
+   *  Copyright (C) 2006-2011 Matteo Nastasi
+   *                          mailto: nastasi@alternativeoutput.it 
+   *                                  matteo.nastasi@milug.org
+   *                          web: http://www.alternativeoutput.it
+   *
+   * This program is free software; you can redistribute it and/or modify
+   * it under the terms of the GNU General Public License as published by
+   * the Free Software Foundation; either version 2 of the License, or
+   * (at your option) any later version.
+   *
+   * This program is distributed in the hope that it will be useful, but
+   * WITHOUT ANY WARRANTY; without even the implied warranty of
+   * MERCHANTABLILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+   * General Public License for more details. You should have received a
+   * copy of the GNU General Public License along with this program; if
+   * not, write to the Free Software Foundation, Inc, 59 Temple Place -
+   * Suite 330, Boston, MA 02111-1307, USA.
+   *
+   */
+
+require_once("Obj/dbase_base.phh")
+
+define(BRISK_AUTH_CONF,   "brisk_auth.conf.pho");
+
+class LoginDB {
+    var $item;
+    var $item_n;
+
+  
+    function LoginDB()
+    {
+        GLOBAL $DOCUMENT_ROOT;
+        log_main("LoginDB create:start");
+
+        if (file_exists("$DOCUMENT_ROOT/Etc/".BRISK_AUTH_CONF)) {
+            require("$DOCUMENT_ROOT/Etc/".BRISK_AUTH_CONF);
+        }
+        else {
+            $this->item = array( new LoginDBItem(1, "uno", md5("one"),   "pippo@pluto.com", USER_FLAG_TY_SUPER),
+                                 new LoginDBItem(2, "due", md5("two"),   "pippo@pluto.com", USER_FLAG_TY_NORM),
+                                 new LoginDBItem(3, "a_b", md5("abb"),   "pippo@pluto.com", USER_FLAG_TY_NORM),
+                                 new LoginDBItem(4, "tre", md5("three"), "pippo@pluto.com", USER_FLAG_TY_NORM) );
+        }
+        $this->item_n = count($this->item);
+        log_main("LoginDB create:end");
+    }
+
+    function count()
+    {
+        return ($this->item_n);
+    }
+
+    function login_exists($login)
+    {
+        log_main("login_exists: ".$login);
+    
+        /* check the existence of the nick in the LoginDB */
+        for ($i = 0 ; $i < $this->item_n ; $i++) {
+            if (strcasecmp($this->item[$i]->login, $login) == 0) {
+                log_main("login[".$i."]: ".$this->item[$i]->login);
+                return (TRUE);
+            }
+        }
+        return (FALSE);
+    }
+
+    function getlogin_byidx($idx)
+    {
+        if ($idx >= $this->item_n)
+            return FALSE;
+        return ($this->item[$idx]->login);
+    }
+
+    function &getitem_bylogin($login, &$id)
+        {
+            GLOBAL $G_false;
+
+            log_main("login_exists: ".$login);
+    
+            /* check the existence of the nick in the LoginDB */
+            for ($i = 0 ; $i < $this->item_n ; $i++) {
+                if (strcasecmp($this->item[$i]->login, $login) == 0) {
+                    log_main("login[".$i."]: ".$this->item[$i]->login);
+                    $ret = &$this->item[$i];
+                    $id = $i;
+                    return ($ret);
+                }
+            }
+            $id = -1;
+            return ($G_false);
+        }
+
+    function getmail($login)
+    {
+        log_main("getmail");
+    
+        /* check the existence of the nick in the LoginDB */
+        for ($i = 0 ; $i < $this->item_n ; $i++) {
+            if (strcasecmp($this->item[$i]->login, $login) == 0) {
+                log_main("login[".$i."]: ".$this->item[$i]->login);
+                return ($this->item[$i]->email);
+            }
+        }
+        return (FALSE);
+    }
+
+    function gettype($login)
+    {
+        log_main("getmail");
+    
+        /* check the existence of the nick in the LoginDB */
+        for ($i = 0 ; $i < $this->item_n ; $i++) {
+            if (strcasecmp($this->item[$i]->login, $login) == 0) {
+                log_main("login[".$i."]: ".$this->item[$i]->login);
+                return ($this->item[$i]->type);
+            }
+        }
+        return (FALSE);
+    }
+
+    function &login_verify($login, $pass)
+        {
+            GLOBAL $G_false;
+
+            $ret = &$G_false;
+
+            log_main("login_verify: ".$login);
+        
+            /* check the existence of the nick in the LoginDB */
+            for ($i = 0 ; $i < $this->item_n ; $i++) {
+                log_main("login_verify: LOOP");
+                if (strcasecmp($this->item[$i]->login, $login) == 0) {
+                    log_main("login[".$i."]: ".$this->item[$i]->login);
+
+                    /* if it exists check for a valid challenge */
+                    if (($a_sem = Challenges::lock_data()) != FALSE) { 
+          
+                        if (($chals = &Challenges::load_data()) != FALSE) {
+                            for ($e = 0 ; $e < $chals->item_n ; $e++) {
+              
+                                log_main("challenge[".$i."]: ".$chals->item[$e]->login);
+                                if (strcmp($login, $chals->item[$e]->login) == 0) {
+                                    log_main("login_verify [".$pass."] with [".md5($chals->item[$e]->token.$this->item[$i]->pass)."]");
+                  
+                                    if (strcmp($pass , md5($chals->item[$e]->token.$this->item[$i]->pass)) == 0) {
+                                        log_main("login_verify SUCCESS for ".$login);
+   
+                                        $chals->rem($login);
+                                        $ret = &$this->item[$i];
+                                        break;
+                                    }
+                                }
+                            } // end for ($e = 0 ...
+                        }
+
+                        if ($chals->ismod()) {
+                            Challenges::save_data(&$chals);
+                        }
+          
+                        Challenges::unlock_data($a_sem);
+                    }
+                    break;
+                } //  if (strcasecmp($this->item[$i]->login, ...
+            }
+
+            return ($ret);
+        }
+} // End class LoginDB
+
+?>
\ No newline at end of file
diff --git a/web/Obj/dbase_pgsql.phh b/web/Obj/dbase_pgsql.phh
new file mode 100644 (file)
index 0000000..510987f
--- /dev/null
@@ -0,0 +1,308 @@
+<?php
+  /*
+   *  brisk - dbase_pgsql.phh
+   *
+   *  Copyright (C) 2006-2011 Matteo Nastasi
+   *                          mailto: nastasi@alternativeoutput.it 
+   *                                  matteo.nastasi@milug.org
+   *                          web: http://www.alternativeoutput.it
+   *
+   * This program is free software; you can redistribute it and/or modify
+   * it under the terms of the GNU General Public License as published by
+   * the Free Software Foundation; either version 2 of the License, or
+   * (at your option) any later version.
+   *
+   * This program is distributed in the hope that it will be useful, but
+   * WITHOUT ANY WARRANTY; without even the implied warranty of
+   * MERCHANTABLILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+   * General Public License for more details. You should have received a
+   * copy of the GNU General Public License along with this program; if
+   * not, write to the Free Software Foundation, Inc, 59 Temple Place -
+   * Suite 330, Boston, MA 02111-1307, USA.
+   *
+   */
+
+require_once("Obj/dbase_base.phh");
+
+$escsql_from = array( "\\",   "'"   );
+$escsql_to = array(   "\\\\", "\\'" );
+
+
+function escsql($s)
+{
+    GLOBAL $escsql_from, $escsql_to;
+    
+    return str_replace($escsql_from, $escsql_to, $s);
+}
+
+class DBConn 
+{
+    static $dbcnnx = FALSE;
+    var $db = FALSE;
+    
+    function DBConn()
+    {
+        GLOBAL $G_dbauth;
+        
+        if (DBConn::$dbcnnx == FALSE) {
+            if (!(DBConn::$dbcnnx = @pg_connect ($G_dbauth))) {
+                echo "DB connection failed.";
+                exit;
+            }
+        }
+        $this->db = DBConn::$dbcnnx;
+
+        return;
+    }
+    function db()
+    {
+        return ($this->db);
+    }
+}
+
+class LoginDB
+{
+    var $dbconn;
+    var $item;
+    var $item_n;
+    
+    function LoginDB()
+    {
+        GLOBAL $DOCUMENT_ROOT, $G_dbpfx, $G_false;
+        log_main("LoginDB create:start");
+        
+        $this->dbconn = new DBConn();
+        
+        log_main("LoginDB create:end");
+    }
+    
+    function login_exists($login)
+    {
+        GLOBAL $G_dbpfx;
+
+        /* check the existence of the nick in the LoginDB */
+        log_main("login_exists: ".$login);
+        
+        $user_sql = sprintf("SELECT * FROM %susers WHERE login = lower('%s');",  $G_dbpfx, escsql($login));
+        if (($user_pg  = pg_query($this->dbconn->db(), $user_sql)) != FALSE)
+            if (pg_numrows($user_pg) == 1)
+                return TRUE;
+        
+        return FALSE;
+    }
+
+    function &getrecord_bylogin($login) {
+        GLOBAL $G_false, $G_dbpfx;
+
+        $user_sql = sprintf("SELECT * FROM %susers WHERE login = lower('%s');",  $G_dbpfx, escsql($login));
+        if (($user_pg  = pg_query($this->dbconn->db(), $user_sql)) == FALSE)
+            return $ret;
+        
+        if (pg_numrows($user_pg) != 1)
+            return $ret;
+        
+        $user_obj = pg_fetch_object($user_pg, 0);
+
+        return ($user_obj);
+    }
+
+
+    
+    function &login_verify($login, $pass)
+    {
+        GLOBAL $G_dbpfx, $G_false;
+        
+        $ret = &$G_false;
+        
+        log_main("login_verify: ".$login);
+        
+        
+        //O /* check the existence of the nick in the LoginDB */
+        //O for ($i = 0 ; $i < $this->item_n ; $i++) {
+        //O log_main("login_verify: BEGIN");
+        
+        if (($user_obj = $this->getrecord_bylogin($login)) == FALSE)
+            return $ret;
+
+        log_main("login[".$user_obj->code."]: ".$user_obj->login);
+        
+        /* if it exists check for a valid challenge */
+        if (($a_sem = Challenges::lock_data()) != FALSE) { 
+            if (($chals = &Challenges::load_data()) != FALSE) {
+                for ($e = 0 ; $e < $chals->item_n ; $e++) {
+                    
+                    log_main("challenge[".$e."]: ".$chals->item[$e]->login);
+                    if (strcmp($login, $chals->item[$e]->login) == 0) {
+                        log_main("login_verify [".$pass."] with [".md5($chals->item[$e]->token.$user_obj->pass)."]");
+                        
+                        if (strcmp($pass , md5($chals->item[$e]->token.$user_obj->pass)) == 0) {
+                            log_main("login_verify SUCCESS for ".$login);
+                            
+                            $chals->rem($login);
+                            $ret = LoginDBItem::LoginDBItemFromRecord($user_obj);
+                            return ($ret);
+                            //O break;
+                        }
+                    }
+                } // end for ($e = 0 ...
+            }
+            
+            if ($chals->ismod()) {
+                Challenges::save_data(&$chals);
+            }
+            
+            Challenges::unlock_data($a_sem);
+        }
+        //O break;
+        // O } //  if (strcasecmp($this->item[$i]->login, ...
+        //O }
+    
+        return ($ret);
+    }
+
+    function &getitem_bylogin($login, &$id) {
+        GLOBAL $G_false;
+        
+        $ret = &$G_false;
+        $id = -1;
+        
+        log_main("getitem_bylogin: ".$login);
+        
+        if (($user_obj = $this->getrecord_bylogin($login)) == FALSE)
+            return $ret;
+
+        $id = $user_obj->code;
+        return (LoginDBItem::LoginDBItemFromRecord($user_obj));
+    }
+    
+    // TODO FOR DB
+    function getmail($login)
+    {
+        log_main("getmail");
+
+        if (($ret = $this->getrecord_bylogin($login)) == FALSE)
+            return FALSE;
+        
+        return ($ret->email);
+    }
+} // End class LoginDB
+
+    if (0 == 1) {
+        
+        
+        
+        
+        
+        
+        function count()
+        {
+        // sprintf("select count(code) from %sbrisk");
+        return ($this->item_n);
+    }
+
+    function getlogin_byidx($idx)
+    {
+        if ($idx >= $this->item_n)
+            return FALSE;
+        return ($this->item[$idx]->login);
+    }
+
+    function &getitem_bylogin($login, &$id)
+        {
+            GLOBAL $G_false;
+
+            log_main("login_exists: ".$login);
+    
+            /* check the existence of the nick in the LoginDB */
+            for ($i = 0 ; $i < $this->item_n ; $i++) {
+                if (strcasecmp($this->item[$i]->login, $login) == 0) {
+                    log_main("login[".$i."]: ".$this->item[$i]->login);
+                    $ret = &$this->item[$i];
+                    $id = $i;
+                    return ($ret);
+                }
+            }
+            $id = -1;
+            return ($G_false);
+        }
+
+    function getmail($login)
+    {
+        log_main("getmail");
+    
+        /* check the existence of the nick in the LoginDB */
+        for ($i = 0 ; $i < $this->item_n ; $i++) {
+            if (strcasecmp($this->item[$i]->login, $login) == 0) {
+                log_main("login[".$i."]: ".$this->item[$i]->login);
+                return ($this->item[$i]->email);
+            }
+        }
+        return (FALSE);
+    }
+
+    function gettype($login)
+    {
+        log_main("getmail");
+    
+        /* check the existence of the nick in the LoginDB */
+        for ($i = 0 ; $i < $this->item_n ; $i++) {
+            if (strcasecmp($this->item[$i]->login, $login) == 0) {
+                log_main("login[".$i."]: ".$this->item[$i]->login);
+                return ($this->item[$i]->type);
+            }
+        }
+        return (FALSE);
+    }
+
+    function &login_verify($login, $pass)
+        {
+            GLOBAL $G_false;
+
+            $ret = &$G_false;
+
+            log_main("login_verify: ".$login);
+        
+            /* check the existence of the nick in the LoginDB */
+            for ($i = 0 ; $i < $this->item_n ; $i++) {
+                log_main("login_verify: LOOP");
+                if (strcasecmp($this->item[$i]->login, $login) == 0) {
+                    log_main("login[".$i."]: ".$this->item[$i]->login);
+
+                    /* if it exists check for a valid challenge */
+                    if (($a_sem = Challenges::lock_data()) != FALSE) { 
+          
+                        if (($chals = &Challenges::load_data()) != FALSE) {
+                            for ($e = 0 ; $e < $chals->item_n ; $e++) {
+              
+                                log_main("challenge[".$i."]: ".$chals->item[$e]->login);
+                                if (strcmp($login, $chals->item[$e]->login) == 0) {
+                                    log_main("login_verify [".$pass."] with [".md5($chals->item[$e]->token.$this->item[$i]->pass)."]");
+                  
+                                    if (strcmp($pass , md5($chals->item[$e]->token.$this->item[$i]->pass)) == 0) {
+                                        log_main("login_verify SUCCESS for ".$login);
+   
+                                        $chals->rem($login);
+                                        $ret = &$this->item[$i];
+                                        break;
+                                    }
+                                }
+                            } // end for ($e = 0 ...
+                        }
+
+                        if ($chals->ismod()) {
+                            Challenges::save_data(&$chals);
+                        }
+          
+                        Challenges::unlock_data($a_sem);
+                    }
+                    break;
+                } //  if (strcasecmp($this->item[$i]->login, ...
+            }
+
+            return ($ret);
+        }
+
+ } // if (0 == 1) {
+
+
+?>
\ No newline at end of file