POST management working, preferences managed (room only)
[brisk.git] / web / Obj / brisk.phh
index 36060d8..803d28b 100644 (file)
@@ -77,6 +77,7 @@ define('DBG_CRIT', 0x0400);
 define('DBG_LMOP', 0x0800);
 define('DBG_TRAC', 0x1000);
 define('DBG_SHME', 0x2000);
+define('DBG_ENGI', 0x4000);
 // NOTE: BRISK DEBUG must be a numerical constant, not the result of operations on symbols 
 define('BRISK_DEBUG', 0x0800);
 
@@ -698,9 +699,60 @@ class Delay_Manager
 class Client_prefs {
     var $listen;
 
-    function Client_prefs($listen)
+    function Client_prefs()
     {
-        $this->listen = $listen;
+    }
+
+    static function from_user($user)
+    {
+        $thiz = new Client_prefs();
+        $thiz->user_load($user);
+
+        return ($thiz);
+    }
+
+    static function from_json($json)
+    {
+        $thiz = new Client_prefs();
+        if ($thiz->json_load($json) == FALSE) {
+            return (FALSE);
+        }
+
+        return ($thiz);
+    }
+
+    function user_load($user)
+    {
+        fprintf(STDERR, "QQ %s: %x\n", __FUNCTION__, $user->flags);
+        $this->listen = ($user->flags & USER_FLAG_MAP_AUTH) >> 2;
+
+        fprintf(STDERR, "QQ %s: LISTEN: %d\n", __FUNCTION__, $this->listen);
+    }
+
+    function json_load($json_s)
+    {
+        if (gettype($json_s) == "string") {
+            if (($json = json_decode($json_s)) == FALSE)
+                return FALSE;
+        }
+        else {
+            $json = $json_s;
+        }
+        $this->listen = $json->listen;
+
+        return TRUE;
+    }
+
+    function store($user, $is_save)
+    {
+        // save into DB
+        fprintf(STDERR, "QQ %s::%s PRE: %x\n", __CLASS__, __FUNCTION__,
+                $user->flags & (~USER_FLAG_S_ALL & ~USER_FLAG_AUTH));
+        $user->flags_set(($this->listen << 2), USER_FLAG_MAP_AUTH);
+        fprintf(STDERR, "QQ %s::%s %x\n", __CLASS__, __FUNCTION__,
+                $user->flags);
+        if ($is_save)
+            $user->store_set();
     }
 }
 
@@ -926,8 +978,7 @@ class Room
     
     $ret = sprintf('gst.st = %d; ',  $user_step);
 
-    // for test: $prefs = new Client_prefs(USER_FLAG_LISTAUTH >> 2);
-    $prefs = new Client_prefs(($user->flags & USER_FLAG_MAP_AUTH) >> 2);
+    $prefs = Client_prefs::from_user($user);
     $ret .= sprintf('prefs_load(\'%s\', false, false);', json_encode($prefs));
 
     if(false) {
@@ -1828,27 +1879,33 @@ class Room
       $this->user[$idx]->flags |= ($authenticate != FALSE ? USER_FLAG_AUTH : 0x00);
       $this->user[$idx]->flags |= ( ($pass != FALSE && $bdb == FALSE) ? USER_FLAG_DBFAILED : 0x00);
       log_auth("XXX", sprintf("FLAGS: [%x]", $this->user[$idx]->flags));
-
       
       if ($authenticate != FALSE) {
-        $this->user[$idx]->code = $authenticate->code_get();
-        $this->user[$idx]->flags |= USER_FLAG_LISTAUTH;
-
-        if (isset($cookie['CO_list'])) {
-          if (strcmp($cookie['CO_list'], "auth") == 0) {
-            $this->user[$idx]->flags &= ~USER_FLAG_MAP_AUTH;
-            $this->user[$idx]->flags |= USER_FLAG_LISTAUTH;
-          }
-          if (strcmp($cookie['CO_list'], "isolation") == 0) {
-            $this->user[$idx]->flags &= ~USER_FLAG_MAP_AUTH;
-            $this->user[$idx]->flags |= USER_FLAG_ISOLAUTH;
+          $this->user[$idx]->code = $authenticate->code_get();
+          if (0 == 1) {
+              // all this part is included in the db server
+              $this->user[$idx]->flags |= USER_FLAG_LISTAUTH;
+
+              if (isset($cookie['CO_list'])) {
+                  fprintf(STDERR, "QQ: %s CO_list: [%s]\n", __FUNCTION__, $cookie['CO_list']);
+                  if (strcmp($cookie['CO_list'], "auth") == 0) {
+                      $this->user[$idx]->flags &= ~USER_FLAG_MAP_AUTH;
+                      $this->user[$idx]->flags |= USER_FLAG_LISTAUTH;
+                  }
+                  if (strcmp($cookie['CO_list'], "isolation") == 0) {
+                      $this->user[$idx]->flags &= ~USER_FLAG_MAP_AUTH;
+                      $this->user[$idx]->flags |= USER_FLAG_ISOLAUTH;
+                  }
+                  else {
+                      $this->user[$idx]->flags &= ~USER_FLAG_MAP_AUTH;
+                  }
+              }
           }
           else {
-            $this->user[$idx]->flags &= ~USER_FLAG_MAP_AUTH;
+              fprintf(STDERR, "QQ: CO_list not set flags: %x\n", __FUNCTION__, $this->user[$idx]->flags);
           }
-        }
       }
-      
+      fprintf(STDERR, "QQ %s: flag %x\n", __FUNCTION__, $this->user[$idx]->flags);
       if ($ghost > -1) {
         log_main("ghost: rename!");
         $ghost_user = $this->user[$ghost];
@@ -2191,7 +2248,7 @@ class Room
 
   function request_mgr(&$s_a_p, $header, &$header_out, &$new_socket, $path, $addr, $get, $post, $cookie)
   {
-      printf("NEW_SOCKET (root): %d\n", intval($new_socket));
+      printf("NEW_SOCKET (root): %d PATH [%s]\n", intval($new_socket), $path);
 
       $enc = get_encoding($header);
       if (isset($header['User-Agent'])) {
@@ -2215,17 +2272,24 @@ class Room
           $content = ob_get_contents();
           ob_end_clean();
 
-          $s_a_p->pendpage_try_addflush($enc, $new_socket, 20, $header_out, $content);
+          // fprintf(STDERR, "\n\nCONTENT [%s]\n\n", $content);
+          $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
           return TRUE;
 
           break;
       case "index_wr.php":
+          //
+          // Enhance required: in the POST case, after the header you must get content
+          //                   from the socket, waiting if necessary
+          //
+
+          fprintf(STDERR, "\n\nDENTRO QUI\n\n");
           ob_start();
           index_wr_main($this, $addr, $get, $post, $cookie);
           $content = ob_get_contents();
           ob_end_clean();
           
-          $s_a_p->pendpage_try_addflush($enc, $new_socket, 20, $header_out, $content);
+          $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
           return TRUE;
 
           break;
@@ -2238,7 +2302,7 @@ class Room
                   
                   $content = User::stream_fini($transp, $s_a_p->rndstr, TRUE);
 
-                  $s_a_p->pendpage_try_addflush($enc, $new_socket, 20, $header_out, $content);
+                  $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
                   return TRUE;
 
                   break;
@@ -2268,7 +2332,7 @@ class Room
               fflush($new_socket);
               
               
-              $s_a_p->socks_set($new_socket, $user);
+              $s_a_p->socks_set($new_socket, $user, NULL);
               $user->rd_socket_set($new_socket);
               printf(" - qui ci siamo - ");
               return TRUE;
@@ -2276,7 +2340,20 @@ class Room
           
           return FALSE;
           break;
-
+      case 'test.php':
+          if (!(BRISK_DEBUG & DBG_ENGI))
+              return (FALSE);
+          fprintf(STDERR, "TEST.PHP running\n");
+          if (isset($post['data'])) {
+              $content = $post['data'];
+          }
+          else {
+              $content = "NO DATA AVAILABLE";
+          }
+          $header_out['Content-Type'] = 'text/plain';
+          $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
+          return TRUE;
+          break;
       default:
           /* FAR TODO: move all into an array of registered sub-apps */
           $subs = "briskin5/";