/** * Create a new token (and generate the token) * * @param string $redirectUri * @param TokenOwnerInterface $owner * @param Client $client * @param string|string[]|Scope[] $scopes * @return AuthorizationCode * @throws OAuth2Exception */ public function createToken($redirectUri, $owner, $client, $scopes) : AuthorizationCode { if (empty($scopes)) { $scopes = $this->scopeService->getDefaultScopes(); } else { $this->validateTokenScopes($scopes); } do { $token = AuthorizationCode::createNewAuthorizationCode($this->serverOptions->getAuthorizationCodeTtl(), $redirectUri, $owner, $client, $scopes); } while ($this->tokenRepository->tokenExists($token->getToken())); return $this->tokenRepository->save($token); }
public function testCreateNewTokenUntilOneDoesNotExist() { $this->scopeService->expects($this->once())->method('getDefaultScopes')->will($this->returnValue(['read'])); $this->tokenRepository->expects($this->at(0))->method('tokenExists')->with($this->isType('string'))->willReturn(true); $this->tokenRepository->expects($this->at(1))->method('tokenExists')->with($this->isType('string'))->willReturn(false); $this->tokenRepository->expects($this->once())->method('save')->will($this->returnArgument(0)); $owner = $this->createMock(TokenOwnerInterface::class); $client = $this->createMock(Client::class); $token = $this->tokenService->createToken('http://www.example.com', $owner, $client, []); $this->assertEquals(40, strlen($token->getToken())); }