Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F1820903
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Size
17 KB
Subscribers
None
View Options
diff --git a/appinfo/app.php b/appinfo/app.php
--- a/appinfo/app.php
+++ b/appinfo/app.php
@@ -1,49 +1,50 @@
<?php
/**
* ownCloud - user_sql
*
* @author Andreas Böhler
* @copyright 2012 Andreas Böhler <andreas (at) aboehler (dot) at>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
require_once('apps/user_sql/user_sql.php');
OC_App::registerAdmin('user_sql','settings');
// define IMAP_DEFAULTs
define('OC_USER_BACKEND_SQL_DEFAULT_HOST', 'localhost');
define('OC_USER_BACKEND_SQL_DEFAULT_USER', 'mail_admin');
define('OC_USER_BACKEND_SQL_DEFAULT_DB', 'postfixadmin');
define('OC_USER_BACKEND_SQL_DEFAULT_PASSWORD', 'password');
define('OC_USER_BACKEND_SQL_DEFAULT_TABLE', 'users');
define('OC_USER_BACKEND_SQL_DEFAULT_PW_COLUMN', 'password');
define('OC_USER_BACKEND_SQL_DEFAULT_USER_COLUMN', 'username');
+define('OC_USER_BACKEND_SQL_DEFAULT_DRIVER', 'mysql');
// register user backend
OC_User::registerBackend('SQL');
OC_User::useBackend('SQL');
// add settings page to navigation
$entry = array(
'id' => "user_sql_settings",
'order'=>1,
'href' => OC_Helper::linkTo( "user_sql", "settings.php" ),
'name' => 'SQL'
);
diff --git a/settings.php b/settings.php
--- a/settings.php
+++ b/settings.php
@@ -1,51 +1,52 @@
<?php
/**
* ownCloud - user_sql
*
* @author Andreas Böhler
* @copyright 2012 Andreas Böhler <andreas (at) aboehler (dot) at>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
-$params = array('sql_host', 'sql_user', 'sql_database', 'sql_password', 'sql_table', 'sql_column_username', 'sql_column_password');
+$params = array('sql_host', 'sql_user', 'sql_database', 'sql_password', 'sql_table', 'sql_column_username', 'sql_column_password', 'sql_type');
OCP\Util::addscript('user_sql', 'settings');
if ($_POST) {
foreach($params as $param){
if(isset($_POST[$param])){
OCP\Config::setAppValue('user_sql', $param, $_POST[$param]);
}
}
}
// fill template
$tmpl = new OCP\Template( 'user_sql', 'settings');
foreach($params as $param){
$value = htmlentities(OCP\Config::getAppValue('user_sql', $param,''));
$tmpl->assign($param, $value);
}
// settings with default values
$tmpl->assign( 'sql_host', OCP\Config::getAppValue('user_sql', 'sql_host', OC_USER_BACKEND_SQL_DEFAULT_HOST));
$tmpl->assign( 'sql_user', OCP\Config::getAppValue('user_sql', 'sql_user', OC_USER_BACKEND_SQL_DEFAULT_USER));
$tmpl->assign( 'sql_database', OCP\Config::getAppValue( 'user_sql', 'sql_database', OC_USER_BACKEND_SQL_DEFAULT_DB));
$tmpl->assign( 'sql_password', OCP\Config::getAppValue( 'user_sql', 'sql_password', OC_USER_BACKEND_SQL_DEFAULT_PASSWORD));
$tmpl->assign( 'sql_table', OCP\Config::getAppValue( 'user_sql', 'sql_table', OC_USER_BACKEND_SQL_DEFAULT_TABLE));
$tmpl->assign( 'sql_column_password', OCP\Config::getAppValue( 'user_sql', 'sql_column_password', OC_USER_BACKEND_SQL_DEFAULT_PW_COLUMN));
$tmpl->assign( 'sql_column_username', OCP\Config::getAppValue( 'user_sql', 'sql_column_username', OC_USER_BACKEND_SQL_DEFAULT_USER_COLUMN));
+$tmpl->assign( 'sql_type', OCP\Config::getAppValue( 'user_sql', 'sql_type', OC_USER_BACKEND_SQL_DEFAULT_DRIVER));
return $tmpl->fetchPage();
diff --git a/templates/settings.php b/templates/settings.php
--- a/templates/settings.php
+++ b/templates/settings.php
@@ -1,14 +1,29 @@
<form id="sql" action="#" method="post">
- <fieldset class="personalblock">
- <legend><?php echo $l->t('SQL'); ?></legend>
- <p><label for="sql_host"><?php echo $l->t('Host');?></label><input type="text" id="sql_host" name="sql_host" value="<?php echo $_['sql_host']; ?>"></p>
- <p><label for="sql_user"><?php echo $l->t('Username');?></label><input type="text" id="sql_user" name="sql_user" value="<?php echo $_['sql_user']; ?>" /></p>
- <p><label for="sql_database"><?php echo $l->t('Database');?></label><input type="text" id="sql_database" name="sql_database" value="<?php echo $_['sql_database']; ?>" /></p>
- <p><label for="sql_password"><?php echo $l->t('Password');?></label><input type="password" id="sql_password" name="sql_password" value="<?php echo $_['sql_password']; ?>" /></p>
- <p><label for="sql_table"><?php echo $l->t('Table');?></label><input type="text" id="sql_table" name="sql_table" value="<?php echo $_['sql_table']; ?>" /></p>
- <p><label for="sql_column_username"><?php echo $l->t('Username Column');?></label><input type="text" id="sql_column_username" name="sql_column_username" value="<?php echo $_['sql_column_username']; ?>" /></p>
- <p><label for="sql_column_password"><?php echo $l->t('Password Column');?></label><input type="text" id="sql_column_password" name="sql_column_password" value="<?php echo $_['sql_column_password']; ?>" /></p>
+ <fieldset class="personalblock">
+ <legend><?php echo $l->t('SQL'); ?></legend>
+ <p><label for="sql_type"><?php echo $l->t('SQL Driver');?></label>
+ <?php $db_driver = array('mysql' => 'MySQL', 'pgsql' => 'PostgreSQL');?>
+ <select id="sql_type" name="sql_type">
+ <?php
+ foreach ($db_driver as $driver => $name):
+ echo $_['sql_type'];
+ if($_['sql_type'] == $driver): ?>
+ <option selected="selected" value="<?php echo $driver; ?>"><?php echo $name; ?></option>
+ <?php else: ?>
+ <option value="<?php echo $driver; ?>"><?php echo $name; ?></option>
+ <?php endif;
+ endforeach; ?>
+ </select>
+ </p>
- <input type="submit" value="<?php echo $l->t('Save'); ?>" />
- </fieldset>
+ <p><label for="sql_host"><?php echo $l->t('Host');?></label><input type="text" id="sql_host" name="sql_host" value="<?php echo $_['sql_host']; ?>"></p>
+ <p><label for="sql_user"><?php echo $l->t('Username');?></label><input type="text" id="sql_user" name="sql_user" value="<?php echo $_['sql_user']; ?>" /></p>
+ <p><label for="sql_database"><?php echo $l->t('Database');?></label><input type="text" id="sql_database" name="sql_database" value="<?php echo $_['sql_database']; ?>" /></p>
+ <p><label for="sql_password"><?php echo $l->t('Password');?></label><input type="password" id="sql_password" name="sql_password" value="<?php echo $_['sql_password']; ?>" /></p>
+ <p><label for="sql_table"><?php echo $l->t('Table');?></label><input type="text" id="sql_table" name="sql_table" value="<?php echo $_['sql_table']; ?>" /></p>
+ <p><label for="sql_column_username"><?php echo $l->t('Username Column');?></label><input type="text" id="sql_column_username" name="sql_column_username" value="<?php echo $_['sql_column_username']; ?>" /></p>
+ <p><label for="sql_column_password"><?php echo $l->t('Password Column');?></label><input type="text" id="sql_column_password" name="sql_column_password" value="<?php echo $_['sql_column_password']; ?>" /></p>
+
+ <input type="submit" value="<?php echo $l->t('Save'); ?>" />
+ </fieldset>
</form>
diff --git a/user_sql.php b/user_sql.php
--- a/user_sql.php
+++ b/user_sql.php
@@ -1,194 +1,184 @@
<?php
/**
* ownCloud - user_sql
*
* @author Andreas Böhler
* @copyright 2012 Andreas Böhler <andreas (at) aboehler (dot) at>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
class OC_USER_SQL extends OC_User_Backend implements OC_User_Interface {
// cached settings
protected $sql_host;
protected $sql_username;
protected $sql_database;
protected $sql_password;
protected $sql_table;
protected $sql_column_username;
protected $sql_column_password;
+ protected $sql_type;
+ protected $db_conn;
+ protected $db;
- public function __construct() {
- $this->sql_host = OCP\Config::getAppValue('user_sql', 'sql_host', '');
- $this->sql_username = OCP\Config::getAppValue('user_sql', 'sql_user', '');
- $this->sql_database = OCP\Config::getAppValue('user_sql', 'sql_database', '');
- $this->sql_password = OCP\Config::getAppValue('user_sql', 'sql_password', '');
- $this->sql_table = OCP\Config::getAppValue('user_sql', 'sql_table', '');
- $this->sql_column_username = OCP\Config::getAppValue('user_sql', 'sql_column_username', '');
- $this->sql_column_password = OCP\Config::getAppValue('user_sql', 'sql_column_password', '');
- }
+ public function __construct() {
+ $this->db_conn = false;
+ $this->sql_host = OCP\Config::getAppValue('user_sql', 'sql_host', '');
+ $this->sql_username = OCP\Config::getAppValue('user_sql', 'sql_user', '');
+ $this->sql_database = OCP\Config::getAppValue('user_sql', 'sql_database', '');
+ $this->sql_password = OCP\Config::getAppValue('user_sql', 'sql_password', '');
+ $this->sql_table = OCP\Config::getAppValue('user_sql', 'sql_table', '');
+ $this->sql_column_username = OCP\Config::getAppValue('user_sql', 'sql_column_username', '');
+ $this->sql_column_password = OCP\Config::getAppValue('user_sql', 'sql_column_password', '');
+ $this->sql_type = OCP\Config::getAppValue('user_sql', 'sql_type', '');
+ $dsn = $this->sql_type.":host=".$this->sql_host.";dbname=".$this->sql_database;
+ try
+ {
+ $this->db = new PDO($dsn, $this->sql_username, $this->sql_password);
+ $this->db_conn = true;
+ }
+ catch (PDOException $e)
+ {
+ OC_Log::write('OC_USER_SQL', 'OC_USER_SQL, Failed to connect to the database: ' . $e->getMessage(), OC_Log::ERROR);
+ }
+ return false;
+ }
public function implementsAction($actions) {
return (bool)((OC_USER_BACKEND_CHECK_PASSWORD) & $actions);
}
public function createUser() {
// Can't create user
- OC_Log::write('OC_USER_SQL', 'Not possible to create local users from web frontend using SQL user backend',3);
+ OC_Log::write('OC_USER_SQL', 'Not possible to create local users from web frontend using SQL user backend', OC_Log::Error);
return false;
}
public function deleteUser( $uid ) {
// Can't delete user
- OC_Log::write('OC_USER_SQL', 'Not possible to delete local users from web frontend using SQL user backend',3);
+ OC_Log::write('OC_USER_SQL', 'Not possible to delete local users from web frontend using SQL user backend', OC_Log::Error);
return false;
}
public function setPassword ( $uid, $password ) {
// We can't change user password
- OC_Log::write('OC_USER_SQL', 'Not possible to change password for local users from web frontend using SQL user backend',3);
+ OC_Log::write('OC_USER_SQL', 'Not possible to change password for local users from web frontend using SQL user backend', OC_Log::Error);
return false;
}
/**
* @brief Check if the password is correct
* @param $uid The username
* @param $password The password
* @returns true/false
*
* Check if the password is correct without logging in the user
*/
- public function checkPassword($uid, $password){
- $db = mysqli_connect ($this->sql_host, $this->sql_username, $this->sql_password);
- if ($db)
- {
- $success = mysqli_select_db ($db, $this->sql_database);
- if(!$success)
- {
+ public function checkPassword($uid, $password)
+ {
+ if(!$this->db_conn)
+ {
return false;
- }
- }
- else
- {
- return false;
- }
+ }
+
$query = "SELECT $this->sql_column_username, $this->sql_column_password FROM $this->sql_table WHERE $this->sql_column_username = '$uid';";
- $result = mysqli_query($db, $query);
- if(!$result)
+ $result = $this->db->prepare($query);
+ if(!$result->execute())
{
return false;
}
- if(mysqli_num_rows($result) == 0)
+ $row = $result->fetch();
+ if(!$row)
{
return false;
}
- $row = mysqli_fetch_row($result);
- if(crypt($password, $row[1]) == $row[1])
+ if(crypt($password, $row[$this->sql_column_password]) == $row[$this->sql_column_password])
{
return $uid;
}
else
{
return false;
}
}
/**
* @brief Get a list of all users
* @returns array with all uids
*
* Get a list of all users.
*/
public function getUsers($search = '', $limit = null, $offset = null){
$users = array();
- $db = mysqli_connect ($this->sql_host, $this->sql_username, $this->sql_password);
- if ($db)
- {
- $success = mysqli_select_db ($db, $this->sql_database);
- if(!$success)
- {
- return false;
- }
- }
- else
+ if(!$this->db_conn)
{
return false;
}
$query = "SELECT $this->sql_column_username FROM $this->sql_table";
if($search != '')
$query .= " WHERE $this->sql_column_username LIKE '%$search%'";
if($limit != null)
$query .= " LIMIT $limit";
if($offset != null)
$query .= " OFFSET $offset";
- $result = mysqli_query($db, $query);
- if(!$result)
+ $result = $this->db->prepare($query);
+ if(!$result->execute())
{
return array();
}
- if(mysqli_num_rows($result) == 0)
+ while($row = $result->fetch())
{
- return array();
- }
- while($row = mysqli_fetch_row($result))
- {
- $users[] = $row[0];
+ $users[] = $row[$this->sql_column_username];
}
return $users;
}
/**
* @brief check if a user exists
* @param string $uid the username
* @return boolean
*/
public function userExists($uid)
{
- $db = mysqli_connect ($this->sql_host, $this->sql_username, $this->sql_password);
- if ($db)
- {
- $success = mysqli_select_db ($db, $this->sql_database);
- if(!$success)
- {
+ if(!$this->db_conn)
+ {
return false;
- }
+ }
+
$query = "SELECT $this->sql_column_username FROM $this->sql_table WHERE $this->sql_column_username = '$uid';";
- $result = mysqli_query($db, $query);
- if(!$result)
+ $result = $this->db->prepare($query);
+ if(!$result->execute())
{
return false;
}
- if(mysqli_num_rows($result) == 0)
- {
+ $row = $result->fetch();
+ if(!$row)
+ {
return false;
- }
- return true;
-
-
- }
- else
- {
- return false;
- }
+ }
+ else
+ {
+ return true;
+ }
}
}
?>
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Sun, Dec 22, 9:27 PM (2 d, 10 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
532443
Default Alt Text
(17 KB)
Attached To
rUSQL ownCloud user_sql PlugIn
Event Timeline
Log In to Comment