consolidata gestione del nickname
authorMatteo Nastasi (mop) <nastasi@alternativeoutput.it>
Tue, 30 Jan 2007 08:48:52 +0000 (08:48 +0000)
committerMatteo Nastasi (mop) <nastasi@alternativeoutput.it>
Tue, 30 Jan 2007 08:48:52 +0000 (08:48 +0000)
web/brisk.phh
web/index.php

index 79db2f8..31f0238 100644 (file)
@@ -558,7 +558,13 @@ class brisco {
     if (strncmp($user_mesg, "/nick ", 6) == 0) {
       log_main($user->sess, "chatt_send BEGIN");
 
-      $name_new = str_replace(' ', '_', substr(trim(substr($user_mesg, 6)),0,12));
+      if (($name_new = validate_name(substr($user_mesg, 6))) == FALSE) {
+         $user->comm[$user->step % COMM_N] = "gst.st = ".($user->step+1)."; ";
+         $user->comm[$user->step % COMM_N] .= sprintf('chatt_sub("%s","Il nickname deve contenere almeno una lettera o una cifra.");', $dt.NICKSERV, xcape($name_new));
+         $user->step++;
+
+         return;
+      }
       $user_mesg = "COMMAND ".$user_mesg;
       // Search dup name
       // change
@@ -665,6 +671,7 @@ class brisco {
    *
    * RETURN VALUE:
    *   if ($idx != -1 && ret == FALSE)  =>  duplicated nick
+   *   if ($idx == -2 && ret == FALSE)  =>  invalid name
    *   if ($idx == -1 && ret == FALSE)  =>  no space left
    *   if (ret == TRUE)                 =>  SUCCESS
    */
@@ -673,6 +680,11 @@ class brisco {
     $idx = -1;
     $idfree = -1;
     
+    if (($name_new = validate_name($name)) == FALSE) {
+      $idx = -2;
+      return (FALSE);
+    }
+
     log_auth("XXX", sprintf("ARRIVA: [%s]", $sess));
     if (validate_sess($sess) == FALSE) 
       $sess = "";
@@ -686,7 +698,7 @@ class brisco {
       if ($idfree == -1 && strcmp("", $this->user[$i]->sess) == 0) {
        $idfree = $i;
       }
-      if (strcmp($this->user[$i]->name, $name) == 0) {
+      if (strcmp($this->user[$i]->name, $name_new) == 0) {
        $idx = $i;
        break;
       }
@@ -694,7 +706,7 @@ class brisco {
     if ($idx == -1)
       $idx = $idfree;
 
-    log_auth("XXX", sprintf("TROVATO A QUESTO PUNTO [%d] sess [%s] name [%s]", $idx, $sess, $name));
+    log_auth("XXX", sprintf("TROVATO A QUESTO PUNTO [%d] sess [%s] name [%s]", $idx, $sess, $name_new));
 
     if ($idx != -1 && $i == MAX_PLAYERS) {
       /* SUCCESS */
@@ -706,12 +718,12 @@ class brisco {
       else {
        $this->user[$idx]->sess = $sess;
       }
-      $this->user[$idx]->name = $name;
+      $this->user[$idx]->name = $name_new;
       $this->user[$idx]->stat = "room";
       $this->user[$idx]->subst = "standup";
       $this->user[$idx]->laccwr = time();
       
-      log_main("XXX", sprintf("TROVATO LIBERO A [%d] sess [%s] name [%s]", $idx, $sess, $name));
+      log_main("XXX", sprintf("TROVATO LIBERO A [%d] sess [%s] name [%s]", $idx, $sess, $name_new));
       
       return ($this->user[$idx]);
     }
@@ -1488,10 +1500,25 @@ function calculate_points(&$table)
   $table->mult = 1;
 }
 
-function validate_sess($sess) {
+function validate_sess($sess) 
+{
   if (strlen($sess) == SESS_LEN) 
     return (TRUE);
   else
     return (FALSE);
 }
+
+function validate_name($name) 
+{
+  $name_new = str_replace(' ', '_', substr(trim($name),0,12));
+
+  for ($i = 0 ; $i < strlen($name_new) ; $i++) {
+    $c = $name_new[$i];
+    if (($c >= "a" && $c <= "z") || ($c >= "A" && $c <= "Z") || ($c >= "0" && $c <= "9"))
+      return ($name_new);
+  }
+
+  return (FALSE);
+}
+
 ?>
index 50f7f9f..171f2aa 100644 (file)
@@ -57,8 +57,6 @@ function main()
     if ($ACTION == "login" && isset($name)) {
       $bri->garbage_manager(TRUE);
       /* try login */
-      $name = substr($name, 0, 12);
-      $name = str_replace(" ", "_", $name);
       if (($user = &$bri->add_user(&$sess, &$idx, $name)) != FALSE) {
        $ACTION = "room";
        
@@ -72,7 +70,9 @@ function main()
       }
       else {
        /* Login Rendering */
-       if ($idx == -1) 
+       if ($idx == -2)
+         $body .= '<div class="urgmsg"><b>Il nickname deve contenere almeno una lettera o una cifra.</b></div>';
+       else if ($idx == -1) 
          $body .= '<div class="urgmsg"><b>Spiacenti, non ci sono pi&ugrave; posti liberi. Riprova pi&ugrave; tardi.</b></div>';
        else
          $body .= '<div class="urgmsg"><b>Il tuo nickname &egrave; gi&agrave; in uso.</b></div>';