1f64dbc90SAndreas Gohr<?php 2f64dbc90SAndreas Gohr 3*5de3a6a5SAndreas Gohr 4*5de3a6a5SAndreas Gohrclass testable_auth_plugin_authpdo extends auth_plugin_authpdo { 5*5de3a6a5SAndreas Gohr public function getPluginName() { 6*5de3a6a5SAndreas Gohr return 'authpdo'; 7*5de3a6a5SAndreas Gohr } 8*5de3a6a5SAndreas Gohr 9*5de3a6a5SAndreas Gohr public function _selectGroups() { 10*5de3a6a5SAndreas Gohr return parent::_selectGroups(); 11*5de3a6a5SAndreas Gohr } 12*5de3a6a5SAndreas Gohr 13*5de3a6a5SAndreas Gohr public function _insertGroup($group) { 14*5de3a6a5SAndreas Gohr return parent::_insertGroup($group); 15*5de3a6a5SAndreas Gohr } 16*5de3a6a5SAndreas Gohr 17*5de3a6a5SAndreas Gohr} 18*5de3a6a5SAndreas Gohr 19f64dbc90SAndreas Gohr/** 20f64dbc90SAndreas Gohr * General tests for the authpdo plugin 21f64dbc90SAndreas Gohr * 22f64dbc90SAndreas Gohr * @group plugin_authpdo 23f64dbc90SAndreas Gohr * @group plugins 24f64dbc90SAndreas Gohr */ 25f64dbc90SAndreas Gohrclass sqlite_plugin_authpdo_test extends DokuWikiTest { 26f64dbc90SAndreas Gohr 27f64dbc90SAndreas Gohr protected $dbfile; 28f64dbc90SAndreas Gohr 29f64dbc90SAndreas Gohr public function setUp() { 30f64dbc90SAndreas Gohr parent::setUp(); 31f64dbc90SAndreas Gohr $this->dbfile = tempnam('/tmp/', 'pluginpdo_test_'); 32f64dbc90SAndreas Gohr copy(__DIR__ . '/test.sqlite3', $this->dbfile); 33f64dbc90SAndreas Gohr 34f64dbc90SAndreas Gohr global $conf; 35f64dbc90SAndreas Gohr 36f64dbc90SAndreas Gohr $conf['plugin']['authpdo']['debug'] = 1; 37f64dbc90SAndreas Gohr $conf['plugin']['authpdo']['dsn'] = 'sqlite:' . $this->dbfile; 38f64dbc90SAndreas Gohr $conf['plugin']['authpdo']['user'] = ''; 39f64dbc90SAndreas Gohr $conf['plugin']['authpdo']['pass'] = ''; 40f64dbc90SAndreas Gohr 41*5de3a6a5SAndreas Gohr $conf['plugin']['authpdo']['select-user'] = 'SELECT id AS uid, login AS user, name, pass AS clear, mail FROM user WHERE login = :user'; 4270a89417SAndreas Gohr $conf['plugin']['authpdo']['select-user-groups'] = 'SELECT * FROM member AS m, "group" AS g WHERE m.gid = g.id AND m.uid = :uid'; 43*5de3a6a5SAndreas Gohr $conf['plugin']['authpdo']['select-groups'] = 'SELECT id AS gid, "group" FROM "group"'; 44*5de3a6a5SAndreas Gohr $conf['plugin']['authpdo']['insert-user'] = 'INSERT INTO user (login, pass, name, mail) VALUES (:user, :hash, :name, :mail)'; 45*5de3a6a5SAndreas Gohr $conf['plugin']['authpdo']['insert-group'] = 'INSERT INTO "group" ("group") VALUES (:group)'; 46*5de3a6a5SAndreas Gohr $conf['plugin']['authpdo']['join-group'] = 'INSERT INTO member (uid, gid) VALUES (:uid, :gid)'; 47f64dbc90SAndreas Gohr } 48f64dbc90SAndreas Gohr 49f64dbc90SAndreas Gohr public function tearDown() { 50f64dbc90SAndreas Gohr parent::tearDown(); 51f64dbc90SAndreas Gohr unlink($this->dbfile); 52f64dbc90SAndreas Gohr } 53f64dbc90SAndreas Gohr 54*5de3a6a5SAndreas Gohr public function test_internals() { 55*5de3a6a5SAndreas Gohr $auth = new testable_auth_plugin_authpdo(); 56*5de3a6a5SAndreas Gohr 57*5de3a6a5SAndreas Gohr $groups = $auth->_selectGroups(); 58*5de3a6a5SAndreas Gohr $this->assertArrayHasKey('user', $groups); 59*5de3a6a5SAndreas Gohr $this->assertEquals(1, $groups['user']['gid']); 60*5de3a6a5SAndreas Gohr $this->assertArrayHasKey('admin', $groups); 61*5de3a6a5SAndreas Gohr $this->assertEquals(2, $groups['admin']['gid']); 62*5de3a6a5SAndreas Gohr 63*5de3a6a5SAndreas Gohr $ok = $auth->_insertGroup('test'); 64*5de3a6a5SAndreas Gohr $this->assertTrue($ok); 65*5de3a6a5SAndreas Gohr $groups = $auth->_selectGroups(); 66*5de3a6a5SAndreas Gohr $this->assertArrayHasKey('test', $groups); 67*5de3a6a5SAndreas Gohr $this->assertEquals(3, $groups['test']['gid']); 68*5de3a6a5SAndreas Gohr } 69*5de3a6a5SAndreas Gohr 70f64dbc90SAndreas Gohr public function test_userinfo() { 71f64dbc90SAndreas Gohr global $conf; 72f64dbc90SAndreas Gohr $auth = new auth_plugin_authpdo(); 73f64dbc90SAndreas Gohr 74f64dbc90SAndreas Gohr // clear text pasword (with default config above 75f64dbc90SAndreas Gohr $this->assertFalse($auth->checkPass('nobody', 'nope')); 76f64dbc90SAndreas Gohr $this->assertFalse($auth->checkPass('admin', 'nope')); 77f64dbc90SAndreas Gohr $this->assertTrue($auth->checkPass('admin', 'password')); 78f64dbc90SAndreas Gohr 79f64dbc90SAndreas Gohr // now with a hashed password 80*5de3a6a5SAndreas Gohr $conf['plugin']['authpdo']['select-user'] = 'SELECT id AS uid, login AS user, name, pass AS hash, mail FROM user WHERE login = :user'; 81f64dbc90SAndreas Gohr $this->assertFalse($auth->checkPass('admin', 'password')); 82f64dbc90SAndreas Gohr $this->assertFalse($auth->checkPass('user', md5('password'))); 83f64dbc90SAndreas Gohr 8470a89417SAndreas Gohr // access user data 8570a89417SAndreas Gohr $info = $auth->getUserData('admin'); 8670a89417SAndreas Gohr $this->assertEquals('admin', $info['user']); 8770a89417SAndreas Gohr $this->assertEquals('The Admin', $info['name']); 8870a89417SAndreas Gohr $this->assertEquals('admin@example.com', $info['mail']); 8970a89417SAndreas Gohr $this->assertEquals(array('admin', 'user'), $info['grps']); 90*5de3a6a5SAndreas Gohr 91*5de3a6a5SAndreas Gohr // group retrieval 92*5de3a6a5SAndreas Gohr $this->assertEquals(array('admin', 'user'), $auth->retrieveGroups()); 93*5de3a6a5SAndreas Gohr $this->assertEquals(array('user'), $auth->retrieveGroups(1)); 94*5de3a6a5SAndreas Gohr $this->assertEquals(array('admin'), $auth->retrieveGroups(0, 1)); 95*5de3a6a5SAndreas Gohr 96*5de3a6a5SAndreas Gohr // user creation 97*5de3a6a5SAndreas Gohr $auth->createUser('test', 'password', 'A Test user', 'test@example.com', array('newgroup')); 98*5de3a6a5SAndreas Gohr $info = $auth->getUserData('test'); 99*5de3a6a5SAndreas Gohr $this->assertEquals('test', $info['user']); 100*5de3a6a5SAndreas Gohr $this->assertEquals('A Test user', $info['name']); 101*5de3a6a5SAndreas Gohr $this->assertEquals('test@example.com', $info['mail']); 102*5de3a6a5SAndreas Gohr $this->assertEquals(array('newgroup', 'user'), $info['grps']); 103*5de3a6a5SAndreas Gohr $this->assertEquals(array('admin', 'newgroup', 'user'), $auth->retrieveGroups()); 104f64dbc90SAndreas Gohr } 105*5de3a6a5SAndreas Gohr 106f64dbc90SAndreas Gohr} 107