/**
  * Confirm an email address
  * 
  * @param object AuthNTokens $email
  * @param string $confirmationCode
  * @return boolean True on success
  * @access public
  * @since 6/4/08
  */
 public function confirmEmail(AuthNTokens $authNTokens, $confirmationCode)
 {
     $dbc = Services::getService("DatabaseManager");
     $dbId = $this->_configuration->getProperty('database_id');
     $authenticationTable = $this->_configuration->getProperty('authentication_table');
     $usernameField = $this->_configuration->getProperty('username_field');
     $passwordField = $this->_configuration->getProperty('password_field');
     $query = new UpdateQuery();
     $query->setTable($authenticationTable);
     $query->addValue("email_confirmed", "1");
     $query->addWhereEqual($usernameField, $authNTokens->getUsername());
     $query->addWhereEqual('confirmation_code', $confirmationCode);
     $result = $dbc->query($query, $dbId);
     if ($result->getNumberOfRows()) {
         $confirmed = TRUE;
     } else {
         $confirmed = FALSE;
     }
     // Log the success or failure
     if (Services::serviceRunning("Logging")) {
         $loggingManager = Services::getService("Logging");
         $log = $loggingManager->getLogForWriting("Authentication");
         $formatType = new Type("logging", "edu.middlebury", "AgentsAndNodes", "A format in which the acting Agent[s] and the target nodes affected are specified.");
         $priorityType = new Type("logging", "edu.middlebury", "Event_Notice", "Normal events.");
         $properties = $this->getPropertiesForTokens($authNTokens);
         if ($confirmed) {
             $item = new AgentNodeEntryItem("Visitor Registration Confirmed", "Visitor Registration Confirmed: <br/>&nbsp;&nbsp;&nbsp;&nbsp;Name: " . htmlspecialchars($properties->getProperty('name')) . " <br/>&nbsp;&nbsp;&nbsp;&nbsp;Email: " . htmlspecialchars($authNTokens->getIdentifier()));
         } else {
             $priorityType = new Type("logging", "edu.middlebury", "User_Error", "Events that indicate errors in user supplied data.");
             $item = new AgentNodeEntryItem("Visitor Registration Failed", "Visitor Registration email confirmation failed. Confirmation code/email mis-match: <br/>&nbsp;&nbsp;&nbsp;&nbsp;Name: " . htmlspecialchars($properties->getProperty('name')) . " <br/>&nbsp;&nbsp;&nbsp;&nbsp;Email: " . htmlspecialchars($authNTokens->getIdentifier()));
         }
         $log->appendLogWithTypes($item, $formatType, $priorityType);
     }
     return $confirmed;
 }
 /**
  * Return true if a mapping between AuthNTokens and an AgentId exists for this auth
  * Type.
  * 
  * @param object AuthNTokens $authNTokens
  * @param object Type $authenticationType
  * @return boolean
  * @access private
  * @since 3/1/05
  */
 function _mappingExistsForTokens(AuthNTokens $authNTokens, Type $authenticationType)
 {
     $this->_checkConfig();
     $dbc = Services::getService("DatabaseManager");
     $query = new SelectQuery();
     $query->addTable($this->_mappingTable);
     $query->addTable($this->_typeTable, LEFT_JOIN, $this->_mappingTable . '.fk_type=' . $this->_typeTable . '.id');
     $query->addColumn('agent_id');
     $query->addColumn('token_identifier');
     $query->addWhere("token_identifier='" . addslashes($authNTokens->getIdentifier()) . "'", _AND);
     $query->addWhere("domain='" . addslashes($authenticationType->getDomain()) . "'", _AND);
     $query->addWhere("authority='" . addslashes($authenticationType->getAuthority()) . "'", _AND);
     $query->addWhere("keyword='" . addslashes($authenticationType->getKeyword()) . "'", _AND);
     $result = $dbc->query($query, $this->_dbId);
     if ($result->getNumberOfRows() == 1) {
         $result->free();
         return TRUE;
     }
     if ($result->getNumberOfRows() == 0) {
         $result->free();
         return FALSE;
     } else {
         throwError(new Error("Invalid number of results: " . $result->getNumberOfRows(), "AgentTokenMappingManager", true));
     }
 }
 /**
  * Constructor
  *
  * @param object CASAuthNMethod $authNMethod
  * @param object Properties $configuration
  * @param optional string $directoryUrl
  * @return void
  * @access public
  * @since 10/5/09
  */
 public function __construct(CASAuthNMethod $authNMethod, Properties $configuration, $directoryUrl = null)
 {
     $this->_authNMethod = $authNMethod;
     $this->_directoryUrl = $directoryUrl;
     parent::AuthNTokens($configuration);
 }