/**
  * @test
  */
 public function destroySessionCallsServerSessionRestService()
 {
     $ssoServer = new \Flowpack\SingleSignOn\Client\Domain\Model\SsoServer();
     $ssoServer->setServiceBaseUri('http://ssodemoserver/test/sso');
     $mockRequestEngine = m::mock('TYPO3\\Flow\\Http\\Client\\RequestEngineInterface');
     $this->inject($ssoServer, 'requestEngine', $mockRequestEngine);
     $mockRequestSigner = m::mock('Flowpack\\SingleSignOn\\Client\\Security\\RequestSigner');
     $this->inject($ssoServer, 'requestSigner', $mockRequestSigner);
     $mockRequestSigner->shouldReceive('signRequest')->andReturnUsing(function ($request) {
         return $request;
     });
     $mockRequestEngine->shouldReceive('sendRequest')->with(m::on(function ($request) use(&$lastRequest) {
         $lastRequest = $request;
         return TRUE;
     }))->once()->andReturn(m::mock('TYPO3\\Flow\\Http\\Response', array('getStatusCode' => 200)));
     $mockSsoClient = m::mock('Flowpack\\SingleSignOn\\Client\\Domain\\Model\\SsoClient', array('getPublicKeyFingerprint' => 'ClientPublicKeyFingerprint', 'getServiceBaseUri' => 'http://ssodemoclient/sso'));
     $ssoServer->destroySession($mockSsoClient, 'test-session-id');
     $this->assertStringStartsWith('http://ssodemoserver/test/sso/session/test-session-id/destroy', (string) $lastRequest->getUri());
     $this->assertEquals('DELETE', $lastRequest->getMethod());
 }
 /**
  * Build a SSO server instance from settings
  *
  * @param string $serverIdentifier
  * @return \Flowpack\SingleSignOn\Client\Domain\Model\SsoServer
  */
 public function create($serverIdentifier)
 {
     if (!isset($this->serverConfigurations[$serverIdentifier]) || !is_array($this->serverConfigurations[$serverIdentifier])) {
         throw new Exception('Invalid configuration for server "' . $serverIdentifier . '" in Flowpack.SingleSignOn.Client.server', 1351688340);
     }
     $serverConfiguration = $this->serverConfigurations[$serverIdentifier];
     $ssoServer = new \Flowpack\SingleSignOn\Client\Domain\Model\SsoServer();
     if (!isset($serverConfiguration['serviceBaseUri']) || (string) $serverConfiguration['serviceBaseUri'] === '') {
         throw new Exception('Missing serviceBaseUri setting in Flowpack.SingleSignOn.Client.server.' . $serverIdentifier, 1352719244);
     }
     $serverConfiguration['serviceBaseUri'] = rtrim($serverConfiguration['serviceBaseUri'], '/');
     $ssoServer->setServiceBaseUri($serverConfiguration['serviceBaseUri']);
     $ssoServer->setEndpointUri($serverConfiguration['serviceBaseUri'] . '/authentication');
     if (!isset($serverConfiguration['publicKeyFingerprint']) || (string) $serverConfiguration['publicKeyFingerprint'] === '') {
         throw new Exception('Missing publicKeyFingerprint setting for Flowpack.SingleSignOn.Client.server.' . $serverIdentifier, 1351688420);
     }
     $ssoServer->setPublicKey($serverConfiguration['publicKeyFingerprint']);
     if (!isset($serverConfiguration['publicKeyFingerprint']) || (string) $serverConfiguration['publicKeyFingerprint'] === '') {
         throw new Exception('Missing publicKeyFingerprint setting for Flowpack.SingleSignOn.Client.server.' . $serverIdentifier, 1351688420);
     }
     // TODO Set service base URI
     return $ssoServer;
 }