示例#1
0
 /**
  * Runs the whole logic. It is fajr's main()
  *
  * @returns void
  */
 public function run()
 {
     $this->injector->getInstance('SessionInitializer.class')->startSession();
     $timer = new SystemTimer();
     // TODO(ppershing): use injector here!
     $trace = new NullTrace();
     if (FajrConfig::get('Debug.Trace') === true) {
         $trace = new HtmlTrace($timer, "--Trace--");
     }
     try {
         Input::prepare();
         $this->regenerateSessionOnLogin();
         $connection = $this->provideConnection();
         $this->runLogic($trace, $connection);
     } catch (LoginException $e) {
         if ($connection) {
             FajrUtils::logout($connection);
         }
         DisplayManager::addException($e);
     } catch (Exception $e) {
         DisplayManager::addException($e);
     }
     DisplayManager::setBase(hescape(FajrUtils::basePath()));
     $trace->tlog("everything done, generating html");
     if (FajrConfig::get('Debug.Trace') === true) {
         $traceHtml = $trace->getHtml();
         DisplayManager::addContent('<div class="span-24">' . $traceHtml . '<div> Trace size:' . sprintf("%.2f", strlen($traceHtml) / 1024.0 / 1024.0) . ' MB</div></div>');
     }
     echo DisplayManager::display();
 }
示例#2
0
 public function runLogic(Trace $trace, HttpConnection $connection)
 {
     $session = $this->injector->getInstance('Session.Storage.class');
     $loginManager = new LoginManager($session, $this->context->getRequest());
     $server = $this->getServer();
     $serverConnection = new AIS2ServerConnection($connection, new AIS2ServerUrlMap($server->getServerName()));
     $this->context->setAisConnection($serverConnection);
     $action = $this->context->getRequest()->getParameter('action', 'studium.MojeTerminyHodnotenia');
     $response = $this->context->getResponse();
     if ($action == 'logout') {
         $loginManager->logout($serverConnection);
         // unless there is an error, logout redirects and ends script execution
     } else {
         if ($action == 'termsOfUse') {
             // TODO(anty): refactor this
             $response->setTemplate('termsOfUse');
             return;
         }
     }
     if ($loginManager->shouldLogin()) {
         $factory = $this->injector->getInstance('LoginFactory.class');
         $session->write('server', $server);
         $loginManager->login($trace->addChild("Logging in..."), $server, $factory, $serverConnection);
         $loggedIn = false;
         // login makes redirect on success
         $session->remove('server');
     } else {
         $loggedIn = $loginManager->isLoggedIn($serverConnection);
     }
     if ($loggedIn) {
         $controller = $this->injector->getInstance('Controller.class');
         $response->set("action", $action);
         $controller->invokeAction($trace, $action, $this->context);
         $response->set('statistics', $this->statistics);
     } else {
         $server = $this->getServer();
         switch ($server->getLoginType()) {
             case 'password':
                 $response->setTemplate('welcome');
                 break;
             case 'cosign':
                 $response->setTemplate('welcomeCosign');
                 break;
             case 'cosignproxy':
                 $response->setTemplate('welcomeCosignProxy');
                 break;
             default:
                 throw new Exception("Invalid type of login");
         }
     }
 }
示例#3
0
 public function runLogic(Trace $trace, HttpConnection $connection)
 {
     $response = $this->context->getResponse();
     $response->set('version', new Version());
     $response->set('banner_debug', FajrConfig::get('Debug.Banner'));
     // TODO(anty): toto by chcelo nastavovat nejako lepsie
     $response->set('banner_beta', FajrConfig::get('AIS2.ServerName') == 'ais2-beta.uniba.sk');
     $response->set('google_analytics', FajrConfig::get('GoogleAnalytics.Account'));
     $response->set('serverName', FajrConfig::get('AIS2.ServerName'));
     $response->set('cosignCookieName', FajrConfig::get('Login.Cosign.CookieName'));
     $response->set('instanceName', FajrConfig::get('AIS2.InstanceName'));
     $serverConnection = new AIS2ServerConnection($connection, new AIS2ServerUrlMap(FajrConfig::get('AIS2.ServerName')));
     $this->context->setAisConnection($serverConnection);
     $action = $this->context->getRequest()->getParameter('action', 'studium.MojeTerminyHodnotenia');
     if ($action == 'logout') {
         FajrUtils::logout($serverConnection);
         // TODO(anty): fix this in a better way
         if (FajrConfig::get('Login.Type') == 'cosign') {
             // location header set in CosignProxyLogin
             // but we can't exit there because
             // the session wouldn't get dropped
             exit;
         }
         FajrUtils::redirect(array(), 'index.php');
     } else {
         if ($action == 'termsOfUse') {
             $response->setTemplate('termsOfUse');
             return;
         }
     }
     $loggedIn = FajrUtils::isLoggedIn($serverConnection);
     $cosignLogin = $this->provideLogin();
     if (!$loggedIn && $cosignLogin != null) {
         FajrUtils::login($trace->addChild("logging in"), $cosignLogin, $serverConnection);
         $loggedIn = true;
     }
     if ($loggedIn) {
         $controller = $this->injector->getInstance('Controller.class');
         $response->set("action", $action);
         $controller->invokeAction($trace, $action, $this->context);
         $response->set('statistics', $this->statistics);
     } else {
         if (FajrConfig::get('Login.Type') == 'password') {
             $response->setTemplate('welcome');
         } else {
             $response->setTemplate('welcomeCosign');
         }
     }
 }
示例#4
0
 public function runLogic(Trace $trace, HttpConnection $connection)
 {
     $session = $this->context->getSessionStorage();
     $loginManager = new LoginManager($session, $this->context->getRequest());
     $server = $this->getServer();
     $serverConnection = new AIS2ServerConnection($connection, new AIS2ServerUrlMap($server->getServerName()));
     $action = $this->context->getRequest()->getParameter('action', 'studium.MojeTerminyHodnotenia');
     $response = $this->context->getResponse();
     if ($action == 'logout') {
         $loginManager->logout($serverConnection);
         FajrUtils::redirect(array(), 'index.php');
         exit;
     } else {
         if ($action == 'termsOfUse') {
             // TODO(anty): refactor this
             $response->setTemplate('termsOfUse');
             return;
         }
     }
     if ($loginManager->shouldLogin()) {
         $factory = $this->injector->getInstance('LoginFactory.class');
         $loginManager->login($trace->addChild("Logging in..."), $server, $factory, $serverConnection);
         $loggedIn = false;
         // login makes redirect on success
     } else {
         $loggedIn = $loginManager->isLoggedIn($serverConnection);
     }
     if ($loggedIn) {
         $controllerInjector = new Injector(array(new ControllerInjectorModule($serverConnection, $server, $session)));
         $mainScreen = $controllerInjector->getInstance('AIS2MainScreen.class');
         if (($aisVersion = $session->read('ais/aisVersion')) == null) {
             $aisVersion = $mainScreen->getAisVersion($trace->addChild('Get AIS version'));
             $session->write('ais/aisVersion', $aisVersion);
         }
         if (($aisApps = $session->read('ais/aisApps')) == null) {
             $aisApps = $mainScreen->getAllAvailableApplications($trace->addChild('Get all applications'));
             $session->write('ais/aisApps', $aisApps);
         }
         if (($userName = $session->read('ais/aisUserName')) == null) {
             $userName = $mainScreen->getFullUserName($trace->addChild('Get user name'));
             $session->write('ais/aisUserName', $userName);
         }
         $response->set('aisVersion', $aisVersion);
         $response->set('aisVersionIncompatible', !($aisVersion >= regression\VersionRange::getMinVersion() && $aisVersion <= regression\VersionRange::getMaxVersion()));
         $response->set('aisUserName', $userName);
         $controller = new DispatchController($controllerInjector, $this->injector->getParameter('controller.dispatchMap'));
         $response->set("action", $action);
         $controller->invokeAction($trace, $action, $this->context);
         $response->set('statistics', $this->statistics);
     } else {
         $server = $this->getServer();
         switch ($server->getLoginType()) {
             case 'password':
                 $response->setTemplate('welcome');
                 break;
             case 'cosign':
                 $response->setTemplate('welcomeCosign');
                 break;
             case 'cosignproxy':
                 $response->setTemplate('welcomeCosignProxy');
                 break;
             case 'nologin':
                 $response->setTemplate('welcomeDemo');
                 break;
             default:
                 throw new Exception("Invalid type of login");
         }
     }
 }
示例#5
0
 public function runLogic(Trace $trace)
 {
     $session = $this->context->getSessionStorage();
     $loginManager = new LoginManager($session, $this->context->getRequest(), $this->context->getResponse());
     // we are going to log in and  we need a clean session.
     // This needs to be done before a connection
     // is created, because we pass cookie file name
     // that contains session_id into AIS2CurlConnection
     if ($loginManager->shouldLogin()) {
         $session->regenerate(true);
     }
     $connection = $this->provideConnection();
     $server = $this->getServer();
     $serverConnection = new AIS2ServerConnection($connection, new AIS2ServerUrlMap($server->getServerName()));
     $action = $this->context->getRequest()->getParameter('action', 'studium.MojeTerminyHodnotenia');
     $response = $this->context->getResponse();
     if ($action == 'logout') {
         try {
             $loginManager->logout($serverConnection);
         } catch (LoginException $e) {
             $this->setException($e);
         }
     } else {
         if ($action == 'termsOfUse') {
             // TODO(anty): refactor this
             $response->setTemplate('termsOfUse');
             return;
         } else {
             if ($loginManager->shouldLogin()) {
                 $factory = $this->injector->getInstance('LoginFactory.class');
                 try {
                     $loginManager->login($trace->addChild("Logging in..."), $server, $factory, $serverConnection);
                 } catch (LoginException $e) {
                     $this->setException($e);
                     try {
                         $loginManager->logout($trace, $serverConnection);
                     } catch (LoginException $e) {
                         // do nothing
                     }
                 }
             } else {
                 if ($loginManager->isLoggedIn($serverConnection)) {
                     $response->set('loggedIn', true);
                     $controllerInjector = new Injector(array(new ControllerInjectorModule($serverConnection, $server, $session, $this->config)), $this->config->get(FajrConfigOptions::DEBUG_EXCEPTION_SHOWSTACKTRACE));
                     $mainScreen = $controllerInjector->getInstance('AIS2MainScreen.class');
                     if (($aisVersion = $session->read('ais/aisVersion')) == null) {
                         $aisVersion = $mainScreen->getAisVersion($trace->addChild('Get AIS version'));
                         $session->write('ais/aisVersion', $aisVersion);
                     }
                     if (($aisApps = $session->read('ais/aisApps')) == null) {
                         $aisModules = array('SP', 'LZ', 'ES', 'ST', 'RH', 'UB', 'AS', 'RP');
                         $aisApps = $mainScreen->getAllAvailableApplications($trace->addChild('Get all applications'), $aisModules);
                         $session->write('ais/aisApps', $aisApps);
                     }
                     if (($userName = $session->read('ais/aisUserName')) == null) {
                         $userName = $mainScreen->getFullUserName($trace->addChild('Get user name'));
                         $session->write('ais/aisUserName', $userName);
                     }
                     $response->set('aisVersion', $aisVersion);
                     $response->set('aisVersionIncompatible', !($aisVersion >= regression\VersionRange::getMinVersion() && $aisVersion <= regression\VersionRange::getMaxVersion()));
                     $response->set('aisUserName', $userName);
                     $controller = new DispatchController($controllerInjector, $this->injector->getParameter('controller.dispatchMap'));
                     $response->set("action", $action);
                     $controller->invokeAction($trace, $action, $this->context);
                     $response->set('statistics', $this->statistics);
                 } else {
                     $server = $this->getServer();
                     switch ($server->getLoginType()) {
                         case 'password':
                             $response->setTemplate('welcome');
                             break;
                         case 'cosign':
                             $response->setTemplate('welcomeCosign');
                             break;
                         case 'cosignproxy':
                             $response->setTemplate('welcomeCosignProxy');
                             break;
                         case 'nologin':
                             $response->setTemplate('welcomeDemo');
                             break;
                         default:
                             throw new Exception("Invalid type of login");
                     }
                 }
             }
         }
     }
 }