Changeset 1455

Show
Ignore:
Timestamp:
03/03/10 19:27:35 (2 years ago)
Author:
gbastien
Message:

* Modifs on the token architecture: some corrections to connection and token deletions and garbage collection because token are now reusable

Location:
branches/newtoken/wifidog
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • branches/newtoken/wifidog/auth/index.php

    r1446 r1455  
    118118            } 
    119119            else if ($info['token_status'] == TOKEN_INUSE && 
    120                 $info['gw_id'] && isset($_REQUEST['gw_id']) && $info['gw_id'] == $_REQUEST['gw_id'] && 
    121                 $info['user_mac'] && isset($_REQUEST['mac']) && $info['user_mac'] == $_REQUEST['mac'] && 
    122                 $info['user_ip'] && isset($_REQUEST['ip']) && $info['user_ip'] == $_REQUEST['ip']) 
     120                isset($info['gw_id']) && isset($_REQUEST['gw_id']) && $info['gw_id'] == $_REQUEST['gw_id'] && 
     121                isset($info['user_mac']) && isset($_REQUEST['mac']) && $info['user_mac'] == $_REQUEST['mac'] && 
     122                isset($info['user_ip']) && isset($_REQUEST['ip']) && $info['user_ip'] == $_REQUEST['ip']) 
    123123            { 
    124124                // This solves the bug where the user clicks twice before getting the portal page 
  • branches/newtoken/wifidog/classes/Node.php

    r1446 r1455  
    16661666 
    16671667    private function getOnlineUsersSql() { 
    1668         return "SELECT users.user_id FROM users,connections JOIN tokens USING (token_id) WHERE tokens.token_status='".TOKEN_INUSE."' AND users.user_id=connections.user_id AND connections.node_id='{$this->id}'"; 
     1668        return "SELECT DISTINCT users.user_id FROM users,connections JOIN tokens USING (token_id) WHERE tokens.token_status='".TOKEN_INUSE."' AND users.user_id=connections.user_id AND connections.node_id='{$this->id}'"; 
     1669         
    16691670    } 
    16701671    /** 
  • branches/newtoken/wifidog/classes/Statistics.php

    r1421 r1455  
    376376            throw new Exception(_('Access denied!')); 
    377377        } else 
    378         if ((!$user->DEPRECATEDisSuperAdmin())) { 
    379             throw new Exception(_('Access denied!')); 
    380         } 
     378        //if ((!$user->DEPRECATEDisSuperAdmin())) { 
     379        //    throw new Exception(_('Access denied!')); 
     380        //} 
    381381 
    382382        if ($user->DEPRECATEDisSuperAdmin()) { 
     
    384384        } else { 
    385385            $user_id = $db->escapeString($user->getId()); 
    386             $sql_join = " JOIN node_stakeholders ON (nodes.node_id=node_stakeholders.node_id AND user_id='$user_id') "; 
     386            $sql_join = " JOIN node_stakeholders ON (nodes.node_id=node_stakeholders.object_id AND user_id='$user_id') "; 
    387387        } 
    388388        $selectedNodes = $this->getSelectedNodes(); 
    389389        $sql = "SELECT nodes.node_id, nodes.name from nodes $sql_join WHERE 1=1 ORDER BY lower(nodes.node_id)"; 
    390390        $userData['preSelectedObjects']=$selectedNodes; 
    391                 $userData['sqlJoin']=$sql_join; 
     391                $userData['additionalJoin']=$sql_join; 
    392392                                $userData['typeInterface']="select_multiple"; 
    393393        $html .= Node :: getSelectUI($name, $userData); 
  • branches/newtoken/wifidog/classes/Token.php

    r1446 r1455  
    9696                 * Delete all unused tokens for this user, so we don't fill the database 
    9797                 * with them 
     98                 * But make sure the unused token is not associated with previous successful connections, so when the incoming field is null 
    9899                 */ 
    99                 $sql = "DELETE FROM connections USING tokens "."WHERE tokens.token_id=connections.token_id AND token_status='".TOKEN_UNUSED."' AND user_id = '".$user->getId()."';\n"; 
     100                $sql = "DELETE FROM connections USING tokens "."WHERE tokens.token_id=connections.token_id AND token_status='".TOKEN_UNUSED."' AND incoming is null AND user_id = '".$user->getId()."';\n"; 
    100101                $db->execSqlUpdate($sql, false); 
    101102 
     
    116117                    // look for an existing token that can be reused 
    117118                    // get all unexpired tokens ordered by first used time 
     119                    // TODO: The token may be owned by someone but be unused and have no connection associated with it 
    118120                    $sql =  "SELECT t.token_id, tt.token_max_total_data, tt.token_max_incoming_data, tt.token_max_outgoing_data,  
    119121                                                                LEAST((c.first_used_time + tt.token_max_usage_duration - c.total_connection_duration),  
  • branches/newtoken/wifidog/include/common.php

    r1446 r1455  
    182182    $sql = null; 
    183183    $sql .= "BEGIN;\n";  
    184     $sql .= "UPDATE connections SET logout_reason=" . LOGOUT_REASON_GARBAGE_COLLECTED . ", timestamp_out=(CURRENT_TIMESTAMP - interval '$expiration') FROM tokens WHERE connections.token_id=tokens.token_id AND last_updated < (CURRENT_TIMESTAMP - interval '$expiration') AND token_status = '" . TOKEN_INUSE . "';"; 
    185     $sql .= "UPDATE tokens SET token_status='" . TOKEN_USED . "' FROM connections WHERE connections.token_id=tokens.token_id AND last_updated < (CURRENT_TIMESTAMP - interval '$expiration') AND token_status = '" . TOKEN_INUSE . "';"; 
     184    $sql .= "UPDATE connections SET logout_reason=" . LOGOUT_REASON_GARBAGE_COLLECTED . ", timestamp_out=(CURRENT_TIMESTAMP - interval '$expiration') FROM tokens WHERE connections.token_id=tokens.token_id AND timestamp_out is null AND last_updated < (CURRENT_TIMESTAMP - interval '$expiration') AND token_status = '" . TOKEN_INUSE . "';"; 
     185    $sql .= "UPDATE tokens SET token_status='" . TOKEN_USED . "' FROM (select token_id, max(last_updated) as last_updated from connections group by token_id) conn WHERE conn.token_id=tokens.token_id AND last_updated < (CURRENT_TIMESTAMP - interval '$expiration') AND token_status = '" . TOKEN_INUSE . "';"; 
    186186    $sql .= "COMMIT;\n"; 
    187187    $db->execSqlUpdate($sql, false); 
  • branches/newtoken/wifidog/ws/classes/WifidogWS/V1.php

    r1446 r1455  
    103103                        'NumOnlineUsers' => 'NumOnlineUsers', 
    104104                        'CreationDate' => 'CreationDate', 
    105                         'Status' => 'Status', 
     105                        'Status' => 'DeploymentStatus', 
    106106                        'OpeningDate' => 'CreationDate',  
    107107                                                                        'Connected_users' => 'OnlineUsers'), 
     
    150150        foreach($infields as $field) { 
    151151            if (isset(self::$_allowedFields[$objectClass][$field])) 
    152                 $fields[] = self::$_allowedFields[$objectClass][$field]; 
     152                $fields[$field] = self::$_allowedFields[$objectClass][$field]; 
    153153            else 
    154                 $fields[] = "$field.forbidden"; 
     154                $fields[$field] = "$field.forbidden"; 
    155155        } 
    156156        return $fields; 
     
    298298        $fields = $this->mapFields($objectClass, $fields); 
    299299        if (empty($fields)) { 
    300             $fields = array_keys(self::$_allowedFields[$objectClass]); 
     300            $fields = self::$_allowedFields[$objectClass]; 
    301301        }  
    302302        $allowedFields = self::$_allowedFields[$objectClass]; 
     
    362362        }  
    363363 
     364        if (!isset($objectList)) { 
     365            throw new WSException("Object list for '{$objectClass}' is not supported.", WSException::GENERIC_EXCEPTION); 
     366        } 
    364367        $this->_outputArr = self::filterRet($objectList, $fields); 
    365368    } 
     
    389392                    } 
    390393                    $retFields = array(); 
    391                     foreach ($fields as $field) { 
     394                    foreach ($fields as $fkey => $field) { 
    392395                        $forbiddenfield = explode(".", $field); 
    393396                        if (! (count($forbiddenfield) == 2)) { 
    394397                            $methodName = 'get'.$field; 
    395398                            if (method_exists($value, $methodName)) { 
    396                                  
    397                                 $retFields[$field] = self::filterRet($value->$methodName()); 
     399                                $retFields[is_string($fkey)?$fkey:$field] = self::filterRet($value->$methodName()); 
    398400                            } else { 
    399                                 $retFields[$field] = 'unknown'; 
     401                                $retFields[is_string($fkey)?$fkey:$field] = 'unknown'; 
    400402                            } 
    401403                        } else