| [ Index ] |
PHP Cross Reference of DokuWiki |
[Summary view] [Print] [Text view]
1 <?php 2 3 namespace dokuwiki\test; 4 5 use dokuwiki\JWT; 6 use dokuwiki\Logger; 7 8 class JWTTest extends \DokuWikiTest 9 { 10 11 12 public function testCreation() 13 { 14 // no token file yet 15 $file = JWT::getStorageFile('test'); 16 $this->assertFileDoesNotExist($file); 17 18 // initialize a new token 19 $jwt = JWT::fromUser('test'); 20 $this->assertFileExists($file); 21 $this->assertEquals('test', $jwt->getUser()); 22 $token = $jwt->getToken(); 23 $issued = $jwt->getIssued(); 24 25 // validate the token 26 $jwt = JWT::validate($token); 27 $this->assertEquals('test', $jwt->getUser()); 28 $this->assertEquals($issued, $jwt->getIssued()); 29 30 31 // next access should get the same token 32 $jwt = JWT::fromUser('test'); 33 $this->assertEquals($token, $jwt->getToken()); 34 $this->assertEquals($issued, $jwt->getIssued()); 35 36 // saving should create a new token 37 sleep(1); // make sure we have a new timestamp 38 $jwt->save(); 39 $this->assertNotEquals($token, $jwt->getToken()); 40 $this->assertNotEquals($issued, $jwt->getIssued()); 41 } 42 43 public function testValidationFail() 44 { 45 $this->expectException(\Exception::class); 46 $this->expectExceptionMessage('Invalid JWT signature'); 47 JWT::validate('invalid'); 48 } 49 50 public function testLoadFail() 51 { 52 $jwt = JWT::fromUser('test'); 53 $token = $jwt->getToken(); 54 $file = JWT::getStorageFile('test'); 55 unlink($file); 56 57 $this->expectException(\Exception::class); 58 $this->expectExceptionMessage('JWT not found, maybe it expired?'); 59 JWT::validate($token); 60 } 61 62 public function testLoadExpireFail() 63 { 64 $jwt = JWT::fromUser('test'); 65 $token = $jwt->getToken(); 66 sleep(1); // make sure we have a new timestamp 67 $jwt->save(); 68 69 $this->expectException(\Exception::class); 70 $this->expectExceptionMessage('JWT invalid, maybe it expired?'); 71 JWT::validate($token); 72 } 73 74 public function testLogin() 75 { 76 $_SERVER['HTTP_AUTHORIZATION'] = 'Bearer ' . JWT::fromUser('testuser')->getToken(); 77 78 $this->assertArrayNotHasKey('REMOTE_USER', $_SERVER); 79 auth_tokenlogin(); 80 $this->assertEquals('testuser', $_SERVER['REMOTE_USER']); 81 unset($_SERVER['HTTP_AUTHORIZATION']); 82 } 83 84 public function testLoginAlternativeHeader() 85 { 86 // web servers pass dashes in header names as underscores 87 $_SERVER['HTTP_X_DOKUWIKI_TOKEN'] = JWT::fromUser('testuser')->getToken(); 88 89 $this->assertArrayNotHasKey('REMOTE_USER', $_SERVER); 90 auth_tokenlogin(); 91 $this->assertEquals('testuser', $_SERVER['REMOTE_USER']); 92 unset($_SERVER['HTTP_X_DOKUWIKI_TOKEN']); 93 } 94 95 public function testLoginFailureIsLogged() 96 { 97 $logger = Logger::getInstance(Logger::LOG_DEBUG); 98 $logging = self::getInaccessibleProperty($logger, 'isLogging'); 99 self::setInaccessibleProperty($logger, 'isLogging', true); 100 $this->expectLogMessage('Token login failed: Invalid JWT signature', Logger::LOG_DEBUG); 101 102 $_SERVER['HTTP_AUTHORIZATION'] = 'Bearer not-a-token'; 103 try { 104 $this->assertFalse(auth_tokenlogin()); 105 $this->assertStringContainsString( 106 'Token login failed: Invalid JWT signature', 107 file_get_contents($logger->getLogfile()) 108 ); 109 } finally { 110 self::setInaccessibleProperty($logger, 'isLogging', $logging); 111 unset($_SERVER['HTTP_AUTHORIZATION']); 112 } 113 } 114 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body