Completed
Push — adminicons ( 220b8a...d1a314 )
by Andreas
03:46
created

helper_plugin_authplain_escaping_test   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 91
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 0
Metric Value
dl 0
loc 91
rs 10
c 0
b 0
f 0
wmc 9
lcom 1
cbo 1
1
<?php
2
3
/**
4
 * These tests are designed to test the capacity of pluginauth to handle
5
 * correct escaping of colon field delimiters and backslashes in user content.
6
 *
7
 * (Note that these tests set some Real Names, etc. that are may not be
8
 * valid in the broader dokuwiki context, but the tests ensure that
9
 * authplain won't get unexpectedly surprised.)
10
 *
11
 * @group plugin_authplain
12
 * @group auth_plugins
13
 * @group plugins
14
 * @group bundled_plugins
15
 */
16
class helper_plugin_authplain_escaping_test extends DokuWikiTest {
17
18
    protected $pluginsEnabled = array('authplainharness');
19
    /** @var  auth_plugin_authplain|auth_plugin_authplainharness */
20
    protected $auth;
21
22
    protected function reloadUsers() {
23
        /* auth caches data loaded from file, but recreated object forces reload */
24
        $this->auth = new auth_plugin_authplainharness();
25
    }
26
27
    function setUp() {
28
        global $config_cascade;
29
        parent::setUp();
30
        $name = $config_cascade['plainauth.users']['default'];
31
        copy($name, $name.".orig");
32
        $this->reloadUsers();
33
    }
34
35
    function tearDown() {
36
        global $config_cascade;
37
        parent::tearDown();
38
        $name = $config_cascade['plainauth.users']['default'];
39
        copy($name.".orig", $name);
40
    }
41
42
    public function testMediawikiPasswordHash() {
43
        global $conf;
44
        $conf['passcrypt'] = 'mediawiki';
45
        $this->auth->createUser("mwuser", "12345", "Mediawiki User", "[email protected]");
46
        $this->reloadUsers();
47
        $this->assertTrue($this->auth->checkPass("mwuser", "12345"));
48
        $mwuser = $this->auth->getUserData("mwuser");
49
        $this->assertStringStartsWith(":B:",$mwuser['pass']);
50
        $this->assertEquals("Mediawiki User",$mwuser['name']);
51
    }
52
53
    public function testNameWithColons() {
54
        $name = ":Colon: User:";
55
        $this->auth->createUser("colonuser", "password", $name, "[email protected]");
56
        $this->reloadUsers();
57
        $user = $this->auth->getUserData("colonuser");
58
        $this->assertEquals($name,$user['name']);
59
    }
60
61
    public function testNameWithBackslashes() {
62
        $name = "\\Slash\\ User\\";
63
        $this->auth->createUser("slashuser", "password", $name, "[email protected]");
64
        $this->reloadUsers();
65
        $user = $this->auth->getUserData("slashuser");
66
        $this->assertEquals($name,$user['name']);
67
    }
68
69
    public function testModifyUser() {
70
        global $conf;
71
        $conf['passcrypt'] = 'mediawiki';
72
        $user = $this->auth->getUserData("testuser");
73
        $user['name'] = "\\New:Crazy:Name\\";
74
        $user['pass'] = "awesome new password";
75
        $this->auth->modifyUser("testuser", $user);
76
        $this->reloadUsers();
77
78
        $saved = $this->auth->getUserData("testuser");
79
        $this->assertEquals($saved['name'], $user['name']);
80
        $this->assertTrue($this->auth->checkPass("testuser", $user['pass']));
81
    }
82
83
    // really only required for developers to ensure this plugin will
84
    // work with systems running on PCRE 6.6 and lower.
85
    public function testLineSplit(){
86
        $this->auth->setPregsplit_safe(false);
87
88
        $names = array(
89
          'plain',
90
          'ut-fठ8',
91
          'colon:',
92
          'backslash\\',
93
          'alltogether\\ठ:'
94
        );
95
        $userpass = 'user:password_hash:';
96
        $other_user_data = ':email@address:group1,group2';
97
98
        foreach ($names as $testname) {
99
            $escaped = str_replace(array('\\',':'),array('\\\\','\\:'),$testname);   // escape : & \
100
            $test_line = $userpass.$escaped.$other_user_data;
101
            $result = $this->auth->splitUserData($test_line);
102
103
            $this->assertEquals($escaped, $result[2]);
104
        }
105
    }
106
}
107
108
/**
109
 * Class auth_plugin_authplainharness
110
 */
111
class auth_plugin_authplainharness extends auth_plugin_authplain {
112
113
    /**
114
     * @param boolean $bool
115
     */
116
    public function setPregsplit_safe($bool) {
117
        $this->_pregsplit_safe = $bool;
118
    }
119
120
    /**
121
     * @return bool|mixed
122
     */
123
    public function getPregsplit_safe(){
124
        return $this->_pregsplit_safe;
125
    }
126
127
    /**
128
     * @param string $line
129
     * @return array
130
     */
131
    public function splitUserData($line){
132
        return $this->_splitUserData($line);
133
    }
134
}
135