<?php
/**
 * @package datamodul 
 * @copyright (c) Kufer Software GmbH, Loisachstrasse 4, D-84453 Mühldorf
 */




class WebSessionToken extends Datamodul
{
  
  var $id = 0;
  
  var $datum = DEFAULTDATE;
  
  var $token = 0;
  
  
  var $sessionid = 0;
  
  function getTyp($pFieldName) {
    switch ($pFieldName) {
      default:
        return parent::getTyp($pFieldName);
    case 'datum':
      return VARTYP_DATETIME;
    case 'id':
      return VARTYP_INT;
    }
  }
  
  
  function getToken4CurrentSession() {
    $time = time();
    $length = 39-StringOperations::strlen($time); 
    $dbwws = new DBWorkWebSessionToken();
    
    for( $i=0; $i < 10; $i++ ) {
      $rand = substr(md5(random\RandomBytes::getRandomBytes($length)), 0, $length);
      $token = $time.$rand;
      
      if( !$this->existiertWebSessionTokenBereits($token, $dbwws) ) {
        $this->speichereWebSessionMitToken($token, $dbwws);
        return $token;
      }
    }
    
    
    Logger::logg('Es konnte kein eindeutiges Token generiert werden. E-Payment-Anmeldung abgebrochen.', 199);
    $urlparameter = new URLParameterAnmeldungSofort();
    $urlParameter = "kathaupt=4&payOnline=true&message=".(urlencode('Fehler beim Verbinden mit dem E-Payment-Anbieter: Tokengenerierung nicht erfolgreich.'));
    echo '<script type="text/javascript">
    window.parent.location.href="index.php?'.$urlParameter.'";								
    </script>';
    return false;
  }
  
  private function existiertWebSessionTokenBereits($token, $dbwws)
  {
    $websession = $dbwws->getWebSessionByToken($token);
    return ( isset($websession->sessionid) && $websession->id > 0 );
  }
  
  private function speichereWebSessionMitToken($token, $dbwws)
  {
    $this->token = $token;
    $this->datum = DateTimeOperations::getDateTimeNow();
    $this->sessionid = session_id();

    $dbwws->insertSessioninfo($this);
    $dbwws->clearOldEntries();
  }
  
  
  function getSessionIdByToken($pToken) {
    $dbwws = new DBWorkWebSessionToken();
    $websession = $dbwws->getWebSessionByToken($pToken);
    if( isset($websession->sessionid) && $websession->sessionid != '') {
      return $websession->sessionid;
    }
    return '0';
  }

  
  function getTokenBySessionId($pSessionid) {
    $dbwws = new DBWorkWebSessionToken();
    $websession = $dbwws->getWebSessionBySessionid($pSessionid);
    return ($websession->token);
  }
  
}
?>