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 118d43d15eSAndreas Gohr function setUp() 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 30*66b108d6SAnna Dabrowska public function authenticateAdmin() 31*66b108d6SAnna Dabrowska { 32*66b108d6SAnna Dabrowska global $USERINFO; 33*66b108d6SAnna Dabrowska $_SERVER['REMOTE_USER'] = 'testadmin'; 34*66b108d6SAnna Dabrowska $USERINFO['grps'] = ['admin', 'foo', 'bar']; 35*66b108d6SAnna Dabrowska 36*66b108d6SAnna Dabrowska global $auth; 37*66b108d6SAnna Dabrowska $auth = new \auth_plugin_authplain(); 38*66b108d6SAnna Dabrowska } 39*66b108d6SAnna Dabrowska 40*66b108d6SAnna Dabrowska public function authenticateNonadmin() 41*66b108d6SAnna Dabrowska { 42*66b108d6SAnna Dabrowska global $USERINFO; 43*66b108d6SAnna Dabrowska $_SERVER['REMOTE_USER'] = 'testuser'; 44*66b108d6SAnna Dabrowska $USERINFO['grps'] = ['foo', 'bar']; 45*66b108d6SAnna Dabrowska 46*66b108d6SAnna Dabrowska global $auth; 47*66b108d6SAnna Dabrowska $auth = new \auth_plugin_authplain(); 48*66b108d6SAnna Dabrowska } 49*66b108d6SAnna Dabrowska 508d43d15eSAndreas Gohr function teardown() 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 149*66b108d6SAnna Dabrowska public function test_ismanager_authenticated_admin() 150*66b108d6SAnna Dabrowska { 151*66b108d6SAnna Dabrowska $this->authenticateAdmin(); 152*66b108d6SAnna Dabrowska 153*66b108d6SAnna Dabrowska global $conf; 154*66b108d6SAnna Dabrowska $conf['superuser'] = '@admin'; 155*66b108d6SAnna Dabrowska $conf['manager'] = '@managers'; 156*66b108d6SAnna Dabrowska 157*66b108d6SAnna Dabrowska global $auth; 158*66b108d6SAnna Dabrowska $auth->createUser( 159*66b108d6SAnna Dabrowska 'alice', 160*66b108d6SAnna Dabrowska '179ad45c6ce2cb97cf1029e212046e81', 161*66b108d6SAnna Dabrowska 'Alice', 162*66b108d6SAnna Dabrowska 'alice@example.com', 163*66b108d6SAnna Dabrowska [ 164*66b108d6SAnna Dabrowska 'foo' 165*66b108d6SAnna Dabrowska ] 166*66b108d6SAnna Dabrowska ); 167*66b108d6SAnna Dabrowska $auth->createUser( 168*66b108d6SAnna Dabrowska 'bob', 169*66b108d6SAnna Dabrowska '179ad45c6ce2cb97cf1029e212046e81', 170*66b108d6SAnna Dabrowska 'Robert', 171*66b108d6SAnna Dabrowska 'bob@example.com', 172*66b108d6SAnna Dabrowska [ 173*66b108d6SAnna Dabrowska 'managers' 174*66b108d6SAnna Dabrowska ] 175*66b108d6SAnna Dabrowska ); 176*66b108d6SAnna Dabrowska 177*66b108d6SAnna Dabrowska $this->assertFalse(auth_ismanager('alice', null, false, true)); 178*66b108d6SAnna Dabrowska $this->assertTrue(auth_ismanager('bob', null, false, true)); 179*66b108d6SAnna Dabrowska } 180*66b108d6SAnna Dabrowska 181*66b108d6SAnna Dabrowska public function test_isadmin_authenticated_nonadmin() 182*66b108d6SAnna Dabrowska { 183*66b108d6SAnna Dabrowska $this->authenticateNonadmin(); 184*66b108d6SAnna Dabrowska 185*66b108d6SAnna Dabrowska global $conf; 186*66b108d6SAnna Dabrowska $conf['superuser'] = '@admin'; 187*66b108d6SAnna Dabrowska 188*66b108d6SAnna Dabrowska global $auth; 189*66b108d6SAnna Dabrowska $auth->createUser( 190*66b108d6SAnna Dabrowska 'camilla', 191*66b108d6SAnna Dabrowska '179ad45c6ce2cb97cf1029e212046e81', 192*66b108d6SAnna Dabrowska 'Camilla', 193*66b108d6SAnna Dabrowska 'camilla@example.com', 194*66b108d6SAnna Dabrowska [ 195*66b108d6SAnna Dabrowska 'admin' 196*66b108d6SAnna Dabrowska ] 197*66b108d6SAnna Dabrowska ); 198*66b108d6SAnna Dabrowska 199*66b108d6SAnna Dabrowska $this->assertTrue(auth_ismanager('camilla', null, true, true)); 200*66b108d6SAnna Dabrowska } 201f8369d7dSTobias Sarnowski} 202