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