public function testProvideSessionInfo()
 {
     $params = ['priority' => 20, 'sessionName' => 'session', 'cookieOptions' => ['prefix' => 'x']];
     $provider = new CookieSessionProvider($params);
     $logger = new \TestLogger(true);
     $provider->setLogger($logger);
     $provider->setConfig($this->getConfig());
     $provider->setManager(new SessionManager());
     $user = static::getTestSysop()->getUser();
     $id = $user->getId();
     $name = $user->getName();
     $token = $user->getToken(true);
     $sessionId = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
     // No data
     $request = new \FauxRequest();
     $info = $provider->provideSessionInfo($request);
     $this->assertNull($info);
     $this->assertSame([], $logger->getBuffer());
     $logger->clearBuffer();
     // Session key only
     $request = new \FauxRequest();
     $request->setCookies(['session' => $sessionId], '');
     $info = $provider->provideSessionInfo($request);
     $this->assertNotNull($info);
     $this->assertSame($params['priority'], $info->getPriority());
     $this->assertSame($sessionId, $info->getId());
     $this->assertNotNull($info->getUserInfo());
     $this->assertSame(0, $info->getUserInfo()->getId());
     $this->assertNull($info->getUserInfo()->getName());
     $this->assertFalse($info->forceHTTPS());
     $this->assertSame([[LogLevel::DEBUG, 'Session "{session}" requested without UserID cookie']], $logger->getBuffer());
     $logger->clearBuffer();
     // User, no session key
     $request = new \FauxRequest();
     $request->setCookies(['xUserID' => $id, 'xToken' => $token], '');
     $info = $provider->provideSessionInfo($request);
     $this->assertNotNull($info);
     $this->assertSame($params['priority'], $info->getPriority());
     $this->assertNotSame($sessionId, $info->getId());
     $this->assertNotNull($info->getUserInfo());
     $this->assertSame($id, $info->getUserInfo()->getId());
     $this->assertSame($name, $info->getUserInfo()->getName());
     $this->assertFalse($info->forceHTTPS());
     $this->assertSame([], $logger->getBuffer());
     $logger->clearBuffer();
     // User and session key
     $request = new \FauxRequest();
     $request->setCookies(['session' => $sessionId, 'xUserID' => $id, 'xToken' => $token], '');
     $info = $provider->provideSessionInfo($request);
     $this->assertNotNull($info);
     $this->assertSame($params['priority'], $info->getPriority());
     $this->assertSame($sessionId, $info->getId());
     $this->assertNotNull($info->getUserInfo());
     $this->assertSame($id, $info->getUserInfo()->getId());
     $this->assertSame($name, $info->getUserInfo()->getName());
     $this->assertFalse($info->forceHTTPS());
     $this->assertSame([], $logger->getBuffer());
     $logger->clearBuffer();
     // User with bad token
     $request = new \FauxRequest();
     $request->setCookies(['session' => $sessionId, 'xUserID' => $id, 'xToken' => 'BADTOKEN'], '');
     $info = $provider->provideSessionInfo($request);
     $this->assertNull($info);
     $this->assertSame([[LogLevel::WARNING, 'Session "{session}" requested with invalid Token cookie.']], $logger->getBuffer());
     $logger->clearBuffer();
     // User id with no token
     $request = new \FauxRequest();
     $request->setCookies(['session' => $sessionId, 'xUserID' => $id], '');
     $info = $provider->provideSessionInfo($request);
     $this->assertNotNull($info);
     $this->assertSame($params['priority'], $info->getPriority());
     $this->assertSame($sessionId, $info->getId());
     $this->assertNotNull($info->getUserInfo());
     $this->assertFalse($info->getUserInfo()->isVerified());
     $this->assertSame($id, $info->getUserInfo()->getId());
     $this->assertSame($name, $info->getUserInfo()->getName());
     $this->assertFalse($info->forceHTTPS());
     $this->assertSame([], $logger->getBuffer());
     $logger->clearBuffer();
     $request = new \FauxRequest();
     $request->setCookies(['xUserID' => $id], '');
     $info = $provider->provideSessionInfo($request);
     $this->assertNull($info);
     $this->assertSame([], $logger->getBuffer());
     $logger->clearBuffer();
     // User and session key, with forceHTTPS flag
     $request = new \FauxRequest();
     $request->setCookies(['session' => $sessionId, 'xUserID' => $id, 'xToken' => $token, 'forceHTTPS' => true], '');
     $info = $provider->provideSessionInfo($request);
     $this->assertNotNull($info);
     $this->assertSame($params['priority'], $info->getPriority());
     $this->assertSame($sessionId, $info->getId());
     $this->assertNotNull($info->getUserInfo());
     $this->assertSame($id, $info->getUserInfo()->getId());
     $this->assertSame($name, $info->getUserInfo()->getName());
     $this->assertTrue($info->forceHTTPS());
     $this->assertSame([], $logger->getBuffer());
     $logger->clearBuffer();
     // Invalid user id
     $request = new \FauxRequest();
     $request->setCookies(['session' => $sessionId, 'xUserID' => '-1'], '');
     $info = $provider->provideSessionInfo($request);
     $this->assertNull($info);
     $this->assertSame([], $logger->getBuffer());
     $logger->clearBuffer();
     // User id with matching name
     $request = new \FauxRequest();
     $request->setCookies(['session' => $sessionId, 'xUserID' => $id, 'xUserName' => $name], '');
     $info = $provider->provideSessionInfo($request);
     $this->assertNotNull($info);
     $this->assertSame($params['priority'], $info->getPriority());
     $this->assertSame($sessionId, $info->getId());
     $this->assertNotNull($info->getUserInfo());
     $this->assertFalse($info->getUserInfo()->isVerified());
     $this->assertSame($id, $info->getUserInfo()->getId());
     $this->assertSame($name, $info->getUserInfo()->getName());
     $this->assertFalse($info->forceHTTPS());
     $this->assertSame([], $logger->getBuffer());
     $logger->clearBuffer();
     // User id with wrong name
     $request = new \FauxRequest();
     $request->setCookies(['session' => $sessionId, 'xUserID' => $id, 'xUserName' => 'Wrong'], '');
     $info = $provider->provideSessionInfo($request);
     $this->assertNull($info);
     $this->assertSame([[LogLevel::WARNING, 'Session "{session}" requested with mismatched UserID and UserName cookies.']], $logger->getBuffer());
     $logger->clearBuffer();
 }
 public function testProvideSessionInfo()
 {
     $params = array('priority' => 20, 'sessionName' => 'session', 'cookieOptions' => array('prefix' => 'x'));
     $provider = new CookieSessionProvider($params);
     $provider->setLogger(new \TestLogger());
     $provider->setConfig($this->getConfig());
     $provider->setManager(new SessionManager());
     $user = User::newFromName('UTSysop');
     $id = $user->getId();
     $name = $user->getName();
     $token = $user->getToken(true);
     $sessionId = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
     // No data
     $request = new \FauxRequest();
     $info = $provider->provideSessionInfo($request);
     $this->assertNull($info);
     // Session key only
     $request = new \FauxRequest();
     $request->setCookies(array('session' => $sessionId), '');
     $info = $provider->provideSessionInfo($request);
     $this->assertNotNull($info);
     $this->assertSame($params['priority'], $info->getPriority());
     $this->assertSame($sessionId, $info->getId());
     $this->assertNull($info->getUserInfo());
     $this->assertFalse($info->forceHTTPS());
     // User, no session key
     $request = new \FauxRequest();
     $request->setCookies(array('xUserID' => $id, 'xToken' => $token), '');
     $info = $provider->provideSessionInfo($request);
     $this->assertNotNull($info);
     $this->assertSame($params['priority'], $info->getPriority());
     $this->assertNotSame($sessionId, $info->getId());
     $this->assertNotNull($info->getUserInfo());
     $this->assertSame($id, $info->getUserInfo()->getId());
     $this->assertSame($name, $info->getUserInfo()->getName());
     $this->assertFalse($info->forceHTTPS());
     // User and session key
     $request = new \FauxRequest();
     $request->setCookies(array('session' => $sessionId, 'xUserID' => $id, 'xToken' => $token), '');
     $info = $provider->provideSessionInfo($request);
     $this->assertNotNull($info);
     $this->assertSame($params['priority'], $info->getPriority());
     $this->assertSame($sessionId, $info->getId());
     $this->assertNotNull($info->getUserInfo());
     $this->assertSame($id, $info->getUserInfo()->getId());
     $this->assertSame($name, $info->getUserInfo()->getName());
     $this->assertFalse($info->forceHTTPS());
     // User with bad token
     $request = new \FauxRequest();
     $request->setCookies(array('session' => $sessionId, 'xUserID' => $id, 'xToken' => 'BADTOKEN'), '');
     $info = $provider->provideSessionInfo($request);
     $this->assertNull($info);
     // User id with no token
     $request = new \FauxRequest();
     $request->setCookies(array('session' => $sessionId, 'xUserID' => $id), '');
     $info = $provider->provideSessionInfo($request);
     $this->assertNotNull($info);
     $this->assertSame($params['priority'], $info->getPriority());
     $this->assertSame($sessionId, $info->getId());
     $this->assertNotNull($info->getUserInfo());
     $this->assertFalse($info->getUserInfo()->isVerified());
     $this->assertSame($id, $info->getUserInfo()->getId());
     $this->assertSame($name, $info->getUserInfo()->getName());
     $this->assertFalse($info->forceHTTPS());
     $request = new \FauxRequest();
     $request->setCookies(array('xUserID' => $id), '');
     $info = $provider->provideSessionInfo($request);
     $this->assertNull($info);
     // User and session key, with forceHTTPS flag
     $request = new \FauxRequest();
     $request->setCookies(array('session' => $sessionId, 'xUserID' => $id, 'xToken' => $token, 'forceHTTPS' => true), '');
     $info = $provider->provideSessionInfo($request);
     $this->assertNotNull($info);
     $this->assertSame($params['priority'], $info->getPriority());
     $this->assertSame($sessionId, $info->getId());
     $this->assertNotNull($info->getUserInfo());
     $this->assertSame($id, $info->getUserInfo()->getId());
     $this->assertSame($name, $info->getUserInfo()->getName());
     $this->assertTrue($info->forceHTTPS());
     // Invalid user id
     $request = new \FauxRequest();
     $request->setCookies(array('session' => $sessionId, 'xUserID' => '-1'), '');
     $info = $provider->provideSessionInfo($request);
     $this->assertNull($info);
     // User id with matching name
     $request = new \FauxRequest();
     $request->setCookies(array('session' => $sessionId, 'xUserID' => $id, 'xUserName' => $name), '');
     $info = $provider->provideSessionInfo($request);
     $this->assertNotNull($info);
     $this->assertSame($params['priority'], $info->getPriority());
     $this->assertSame($sessionId, $info->getId());
     $this->assertNotNull($info->getUserInfo());
     $this->assertFalse($info->getUserInfo()->isVerified());
     $this->assertSame($id, $info->getUserInfo()->getId());
     $this->assertSame($name, $info->getUserInfo()->getName());
     $this->assertFalse($info->forceHTTPS());
     // User id with wrong name
     $request = new \FauxRequest();
     $request->setCookies(array('session' => $sessionId, 'xUserID' => $id, 'xUserName' => 'Wrong'), '');
     $info = $provider->provideSessionInfo($request);
     $this->assertNull($info);
 }