Merge pull request #6 from pvalsecc/master

Add support for groups
This commit is contained in:
Marcin Łojewski
2017-12-19 12:31:06 +01:00
committed by GitHub
6 changed files with 65 additions and 10 deletions

View File

@@ -75,20 +75,40 @@ if(isset($_POST['appname']) && ($_POST['appname'] === 'user_sql') && isset($_POS
'data' => array('message' => $l -> t('The selected SQL table '.$_POST['sql_table'].' does not exist!'))));
break;
}
if(!empty($_POST['sql_group_table']) && !$helper->verifyTable($parameters, $_POST['sql_driver'], $_POST['sql_group_table']))
{
$response->setData(array('status' => 'error',
'data' => array('message' => $l -> t('The selected SQL table '.$_POST['sql_group_table'].' does not exist!'))));
break;
}
// Retrieve all column settings
$columns = array();
$group_columns = array();
foreach($params as $param)
{
if(strpos($param, 'col_') === 0)
{
if(isset($_POST[$param]) && $_POST[$param] !== '')
$columns[] = $_POST[$param];
{
if(strpos($param, 'col_group_') === 0)
{
$group_columns[] = $_POST[$param];
}
else
{
$columns[] = $_POST[$param];
}
}
}
}
// Check if the columns exist
$status = $helper->verifyColumns($parameters, $_POST['sql_driver'], $_POST['sql_table'], $columns);
if(!empty($_POST['sql_group_table']) && $status === true)
{
$status = $helper->verifyColumns($parameters, $_POST['sql_driver'], $_POST['sql_group_table'], $group_columns);
}
if($status !== true)
{
$response->setData(array('status' => 'error',

View File

@@ -22,10 +22,13 @@
*/
require_once __DIR__ . '/../user_sql.php';
require_once __DIR__ . '/../group_sql.php';
\OCP\App::registerAdmin('user_sql','settings');
$backend = new \OCA\user_sql\OC_USER_SQL;
$group_backend = new \OCA\user_sql\OC_GROUP_SQL;
// register user backend
\OC_User::useBackend($backend);
\OC::$server->getGroupManager()->addBackend($group_backend);

View File

@@ -15,5 +15,6 @@
<category>auth</category>
<dependencies>
<nextcloud min-version="12" max-version="12"/>
<owncloud min-version="10" max-version="10"/>
</dependencies>
</info>

View File

@@ -17,7 +17,7 @@ user_sql.adminSettingsUI = function()
$('#sqlDiv').tabs();
// Attach auto-completion to all column fields
$('#col_username, #col_password, #col_displayname, #col_active, #col_email, #col_gethome').autocomplete({
$('#col_username, #col_password, #col_displayname, #col_active, #col_email, #col_gethome, #col_group_name, #col_group_username').autocomplete({
source: function(request, response)
{
var post = $('#sqlForm').serializeArray();
@@ -56,7 +56,7 @@ user_sql.adminSettingsUI = function()
});
// Attach auto-completion to all table fields
$('#sql_table').autocomplete({
$('#sql_table, #sql_group_table').autocomplete({
source: function(request, response)
{
var post = $('#sqlForm').serializeArray();

View File

@@ -64,7 +64,10 @@ class Helper {
'set_mail_sync_mode',
'set_enable_gethome',
'set_gethome_mode',
'set_gethome'
'set_gethome',
'sql_group_table',
'col_group_username',
'col_group_name'
);
return $params;
@@ -173,6 +176,18 @@ class Helper {
case 'mysqlPassword':
$query = "SELECT PASSWORD(:pw);";
break;
case 'getUserGroups':
$query = "SELECT ".$this->settings['col_group_name']." FROM ".$this->settings['sql_group_table']." WHERE ".$this->settings['col_group_username']." = :uid";
break;
case 'getGroups':
$query = "SELECT distinct ".$this->settings['col_group_name']." FROM ".$this->settings['sql_group_table'];
break;
case 'getGroupUsers':
$query = "SELECT distinct ".$this->settings['col_group_username']." FROM ".$this->settings['sql_group_table']." WHERE ".$this->settings['col_group_name']." = :gid";
break;
}
if(isset($limits['limit']) && $limits['limit'] !== null)
@@ -265,7 +280,7 @@ class Helper {
if(!in_array($col, $columns, true))
{
$res = false;
$err .= $col.' ';
$err .= $table.'.'.$col.' ';
}
}
if($res)
@@ -299,13 +314,19 @@ class Helper {
try {
$conn = $cm -> getConnection($sql_driver, $parameters);
$platform = $conn -> getDatabasePlatform();
$query = $platform -> getListTablesSQL();
$result = $conn -> executeQuery($query);
$queries = array(
'Tables_in_'.$parameters['dbname'] => $platform -> getListTablesSQL(),
'TABLE_NAME' => $platform -> getListViewsSQL($parameters['dbname']));
$ret = array();
while($row = $result -> fetch())
foreach($queries as $field => $query)
{
$name = $row['Tables_in_'.$parameters['dbname']];
$ret[] = $name;
$result = $conn -> executeQuery($query);
while($row = $result -> fetch())
{
$name = $row[$field];
$ret[] = $name;
}
}
return $ret;
}

View File

@@ -20,6 +20,7 @@ $cfgClass = $ocVersion >= 7 ? 'section' : 'personalblock';
<li><a id="sqlEmailSettings" href="#sql-3"><?php p($l -> t('E-Mail Settings')); ?></a></li>
<li><a id="sqlDomainSettings" href="#sql-4"><?php p($l -> t('Domain Settings')); ?></a></li>
<li><a id="sqlGethomeSettings" href="#sql-5"><?php p($l -> t('getHome Settings')); ?></a></li>
<li><a id="sqlGroupsSettings" href="#sql-6"><?php p($l -> t('Groups Settings')); ?></a></li>
</ul>
<fieldset id="sql-1">
@@ -155,6 +156,15 @@ $cfgClass = $ocVersion >= 7 ? 'section' : 'personalblock';
<em><?php p($l -> t('You can use the placeholders %%u to specify the user ID (before appending the default domain), %%ud to specify the user ID (after appending the default domain) and %%d to specify the default domain')); ?></em></p>
</fieldset>
<fieldset id="sql-6">
<p><label for="sql_group_table"><?php p($l -> t('Table')); ?></label><input type="text" id="sql_group_table" name="sql_group_table" value="<?php p($_['sql_group_table']); ?>" /></p>
<p><label for="col_group_username"><?php p($l -> t('Username Column')); ?></label><input type="text" id="col_group_username" name="col_group_username" value="<?php p($_['col_group_username']); ?>" /></p>
<p><label for="col_group_name"><?php p($l -> t('Group Name Column')); ?></label><input type="text" id="col_group_name" name="col_group_name" value="<?php p($_['col_group_name']); ?>" /></p>
</fieldset>
<input type="hidden" name="requesttoken" value="<?php p($_['requesttoken']); ?>" id="requesttoken" />
<input type="hidden" name="appname" value="user_sql" />
<input id="sqlSubmit" type="submit" value="<?php p($l -> t('Save')); ?>" />