xref: /dokuwiki/_test/tests/inc/auth_admincheck.test.php (revision 7f2c74793214d19a21bf43bb06786c57d5a92fdc)
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