1f8369d7dSTobias Sarnowski<?php 2f8369d7dSTobias Sarnowski 34bdfdb32SPhyuse dokuwiki\test\mock\AuthCaseInsensitivePlugin; 48d43d15eSAndreas Gohruse dokuwiki\test\mock\AuthPlugin; 5f8369d7dSTobias Sarnowski 68d43d15eSAndreas Gohrclass auth_admin_test extends DokuWikiTest 78d43d15eSAndreas Gohr{ 8f8369d7dSTobias Sarnowski 9f8369d7dSTobias Sarnowski private $oldauth; 10f8369d7dSTobias Sarnowski 11*1c33cec3SAndreas Gohr function setUp() : void 128d43d15eSAndreas Gohr { 13ff576d93SDominik Eckelmann parent::setUp(); 14f8369d7dSTobias Sarnowski global $auth; 15f8369d7dSTobias Sarnowski $this->oldauth = $auth; 16f8369d7dSTobias Sarnowski } 17f8369d7dSTobias Sarnowski 188d43d15eSAndreas Gohr function setSensitive() 198d43d15eSAndreas Gohr { 20f8369d7dSTobias Sarnowski global $auth; 21e1d9dcc8SAndreas Gohr $auth = new AuthPlugin(); 22f8369d7dSTobias Sarnowski } 23f8369d7dSTobias Sarnowski 248d43d15eSAndreas Gohr function setInSensitive() 258d43d15eSAndreas Gohr { 26f8369d7dSTobias Sarnowski global $auth; 274bdfdb32SPhy $auth = new AuthCaseInsensitivePlugin(); 28f8369d7dSTobias Sarnowski } 29f8369d7dSTobias Sarnowski 3066b108d6SAnna Dabrowska public function authenticateAdmin() 3166b108d6SAnna Dabrowska { 3266b108d6SAnna Dabrowska global $USERINFO; 3366b108d6SAnna Dabrowska $_SERVER['REMOTE_USER'] = 'testadmin'; 3466b108d6SAnna Dabrowska $USERINFO['grps'] = ['admin', 'foo', 'bar']; 3566b108d6SAnna Dabrowska 3666b108d6SAnna Dabrowska global $auth; 3766b108d6SAnna Dabrowska $auth = new \auth_plugin_authplain(); 3866b108d6SAnna Dabrowska } 3966b108d6SAnna Dabrowska 4066b108d6SAnna Dabrowska public function authenticateNonadmin() 4166b108d6SAnna Dabrowska { 4266b108d6SAnna Dabrowska global $USERINFO; 4366b108d6SAnna Dabrowska $_SERVER['REMOTE_USER'] = 'testuser'; 4466b108d6SAnna Dabrowska $USERINFO['grps'] = ['foo', 'bar']; 4566b108d6SAnna Dabrowska 4666b108d6SAnna Dabrowska global $auth; 4766b108d6SAnna Dabrowska $auth = new \auth_plugin_authplain(); 4866b108d6SAnna Dabrowska } 4966b108d6SAnna Dabrowska 50*1c33cec3SAndreas Gohr function tearDown() : void 518d43d15eSAndreas Gohr { 52f8369d7dSTobias Sarnowski global $auth; 53f8369d7dSTobias Sarnowski global $AUTH_ACL; 54f8369d7dSTobias Sarnowski unset($AUTH_ACL); 55f8369d7dSTobias Sarnowski $auth = $this->oldauth; 56f8369d7dSTobias Sarnowski } 57f8369d7dSTobias Sarnowski 588d43d15eSAndreas Gohr function test_ismanager_insensitive() 598d43d15eSAndreas Gohr { 60f8369d7dSTobias Sarnowski $this->setInSensitive(); 61f8369d7dSTobias Sarnowski global $conf; 62f8369d7dSTobias Sarnowski $conf['superuser'] = 'john,@admin,@Mötly Görls, Dörte'; 63f8369d7dSTobias Sarnowski $conf['manager'] = 'john,@managers,doe, @Mötly Böys, Dänny'; 64f8369d7dSTobias Sarnowski 65f8369d7dSTobias Sarnowski // anonymous user 668d43d15eSAndreas Gohr $this->assertFalse(auth_ismanager('jill', null, false, true)); 67f8369d7dSTobias Sarnowski 68f8369d7dSTobias Sarnowski // admin or manager users 698d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('john', null, false, true)); 708d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('doe', null, false, true)); 71f8369d7dSTobias Sarnowski 728d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('dörte', null, false, true)); 738d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('dänny', null, false, true)); 74f8369d7dSTobias Sarnowski 75f8369d7dSTobias Sarnowski // admin or manager groups 768d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('jill', array('admin'), false, true)); 778d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('jill', array('managers'), false, true)); 78f8369d7dSTobias Sarnowski 798d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('jill', array('mötly görls'), false, true)); 808d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('jill', array('mötly böys'), false, true)); 81f8369d7dSTobias Sarnowski } 82f8369d7dSTobias Sarnowski 838d43d15eSAndreas Gohr function test_isadmin_insensitive() 848d43d15eSAndreas Gohr { 85f8369d7dSTobias Sarnowski $this->setInSensitive(); 86f8369d7dSTobias Sarnowski global $conf; 87f8369d7dSTobias Sarnowski $conf['superuser'] = 'john,@admin,doe,@roots'; 88f8369d7dSTobias Sarnowski 89f8369d7dSTobias Sarnowski // anonymous user 908d43d15eSAndreas Gohr $this->assertFalse(auth_ismanager('jill', null, true, true)); 91f8369d7dSTobias Sarnowski 92f8369d7dSTobias Sarnowski // admin user 938d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('john', null, true, true)); 948d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('doe', null, true, true)); 95f8369d7dSTobias Sarnowski 96f8369d7dSTobias Sarnowski // admin groups 978d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('jill', array('admin'), true, true)); 988d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('jill', array('roots'), true, true)); 998d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('john', array('admin'), true, true)); 1008d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('doe', array('admin'), true, true)); 101f8369d7dSTobias Sarnowski } 102f8369d7dSTobias Sarnowski 1038d43d15eSAndreas Gohr function test_ismanager_sensitive() 1048d43d15eSAndreas Gohr { 105f8369d7dSTobias Sarnowski $this->setSensitive(); 106f8369d7dSTobias Sarnowski global $conf; 107f8369d7dSTobias Sarnowski $conf['superuser'] = 'john,@admin,@Mötly Görls, Dörte'; 108f8369d7dSTobias Sarnowski $conf['manager'] = 'john,@managers,doe, @Mötly Böys, Dänny'; 109f8369d7dSTobias Sarnowski 110f8369d7dSTobias Sarnowski // anonymous user 1118d43d15eSAndreas Gohr $this->assertFalse(auth_ismanager('jill', null, false, true)); 112f8369d7dSTobias Sarnowski 113f8369d7dSTobias Sarnowski // admin or manager users 1148d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('john', null, false, true)); 1158d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('doe', null, false, true)); 116f8369d7dSTobias Sarnowski 1178d43d15eSAndreas Gohr $this->assertFalse(auth_ismanager('dörte', null, false, true)); 1188d43d15eSAndreas Gohr $this->assertFalse(auth_ismanager('dänny', null, false, true)); 119f8369d7dSTobias Sarnowski 120f8369d7dSTobias Sarnowski // admin or manager groups 1218d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('jill', array('admin'), false, true)); 1228d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('jill', array('managers'), false, true)); 123f8369d7dSTobias Sarnowski 1248d43d15eSAndreas Gohr $this->assertFalse(auth_ismanager('jill', array('mötly görls'), false, true)); 1258d43d15eSAndreas Gohr $this->assertFalse(auth_ismanager('jill', array('mötly böys'), false, true)); 126f8369d7dSTobias Sarnowski } 127f8369d7dSTobias Sarnowski 1288d43d15eSAndreas Gohr function test_isadmin_sensitive() 1298d43d15eSAndreas Gohr { 130f8369d7dSTobias Sarnowski $this->setSensitive(); 131f8369d7dSTobias Sarnowski global $conf; 132f8369d7dSTobias Sarnowski $conf['superuser'] = 'john,@admin,doe,@roots'; 133f8369d7dSTobias Sarnowski 134f8369d7dSTobias Sarnowski // anonymous user 1358d43d15eSAndreas Gohr $this->assertFalse(auth_ismanager('jill', null, true, true)); 136f8369d7dSTobias Sarnowski 137f8369d7dSTobias Sarnowski // admin user 1388d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('john', null, true, true)); 1398d43d15eSAndreas Gohr $this->assertFalse(auth_ismanager('Doe', null, true, true)); 140f8369d7dSTobias Sarnowski 141f8369d7dSTobias Sarnowski // admin groups 1428d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('jill', array('admin'), true, true)); 1438d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('jill', array('roots'), true, true)); 1448d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('john', array('admin'), true, true)); 1458d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('doe', array('admin'), true, true)); 1468d43d15eSAndreas Gohr $this->assertTrue(auth_ismanager('Doe', array('admin'), true, true)); 147f8369d7dSTobias Sarnowski } 148f8369d7dSTobias Sarnowski 14966b108d6SAnna Dabrowska public function test_ismanager_authenticated_admin() 15066b108d6SAnna Dabrowska { 15166b108d6SAnna Dabrowska $this->authenticateAdmin(); 15266b108d6SAnna Dabrowska 15366b108d6SAnna Dabrowska global $conf; 15466b108d6SAnna Dabrowska $conf['superuser'] = '@admin'; 15566b108d6SAnna Dabrowska $conf['manager'] = '@managers'; 15666b108d6SAnna Dabrowska 15766b108d6SAnna Dabrowska global $auth; 15866b108d6SAnna Dabrowska $auth->createUser( 15966b108d6SAnna Dabrowska 'alice', 16066b108d6SAnna Dabrowska '179ad45c6ce2cb97cf1029e212046e81', 16166b108d6SAnna Dabrowska 'Alice', 16266b108d6SAnna Dabrowska 'alice@example.com', 16366b108d6SAnna Dabrowska [ 16466b108d6SAnna Dabrowska 'foo' 16566b108d6SAnna Dabrowska ] 16666b108d6SAnna Dabrowska ); 16766b108d6SAnna Dabrowska $auth->createUser( 16866b108d6SAnna Dabrowska 'bob', 16966b108d6SAnna Dabrowska '179ad45c6ce2cb97cf1029e212046e81', 17066b108d6SAnna Dabrowska 'Robert', 17166b108d6SAnna Dabrowska 'bob@example.com', 17266b108d6SAnna Dabrowska [ 17366b108d6SAnna Dabrowska 'managers' 17466b108d6SAnna Dabrowska ] 17566b108d6SAnna Dabrowska ); 17666b108d6SAnna Dabrowska 17766b108d6SAnna Dabrowska $this->assertFalse(auth_ismanager('alice', null, false, true)); 17866b108d6SAnna Dabrowska $this->assertTrue(auth_ismanager('bob', null, false, true)); 17966b108d6SAnna Dabrowska } 18066b108d6SAnna Dabrowska 18166b108d6SAnna Dabrowska public function test_isadmin_authenticated_nonadmin() 18266b108d6SAnna Dabrowska { 18366b108d6SAnna Dabrowska $this->authenticateNonadmin(); 18466b108d6SAnna Dabrowska 18566b108d6SAnna Dabrowska global $conf; 18666b108d6SAnna Dabrowska $conf['superuser'] = '@admin'; 18766b108d6SAnna Dabrowska 18866b108d6SAnna Dabrowska global $auth; 18966b108d6SAnna Dabrowska $auth->createUser( 19066b108d6SAnna Dabrowska 'camilla', 19166b108d6SAnna Dabrowska '179ad45c6ce2cb97cf1029e212046e81', 19266b108d6SAnna Dabrowska 'Camilla', 19366b108d6SAnna Dabrowska 'camilla@example.com', 19466b108d6SAnna Dabrowska [ 19566b108d6SAnna Dabrowska 'admin' 19666b108d6SAnna Dabrowska ] 19766b108d6SAnna Dabrowska ); 19866b108d6SAnna Dabrowska 19966b108d6SAnna Dabrowska $this->assertTrue(auth_ismanager('camilla', null, true, true)); 20066b108d6SAnna Dabrowska } 201f8369d7dSTobias Sarnowski} 202