Dev SSO: Tables, SAML
This commit is contained in:
@@ -15,12 +15,8 @@ class Configuration {
|
||||
$this->settings = Settings::loadDefaults();
|
||||
|
||||
$className = self::className;
|
||||
$path = getClassPath($className, ".class");
|
||||
if (file_exists($path) && is_readable($path)) {
|
||||
include_once $path;
|
||||
if (class_exists($className)) {
|
||||
$this->database = new $className();
|
||||
}
|
||||
if (isClass($className)) {
|
||||
$this->database = new $className();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +28,7 @@ class Configuration {
|
||||
return $this->settings;
|
||||
}
|
||||
|
||||
public static function create(string $className, $data) {
|
||||
public static function create(string $className, $data): bool {
|
||||
$path = getClassPath($className);
|
||||
$classNameShort = explode("\\", $className);
|
||||
$classNameShort = end($classNameShort);
|
||||
@@ -86,7 +82,7 @@ class Configuration {
|
||||
$code = "<?php";
|
||||
}
|
||||
|
||||
return @file_put_contents($path, $code);
|
||||
return @file_put_contents($path, $code) !== false;
|
||||
}
|
||||
|
||||
public function delete(string $className): bool {
|
||||
|
||||
@@ -4,8 +4,12 @@ namespace Core\Configuration;
|
||||
|
||||
use Core\API\Request;
|
||||
use Core\Driver\Logger\Logger;
|
||||
use Core\Driver\SQL\Column\IntColumn;
|
||||
use Core\Driver\SQL\Query\CreateTable;
|
||||
use Core\Driver\SQL\SQL;
|
||||
use Core\Driver\SQL\Type\CurrentColumn;
|
||||
use Core\Driver\SQL\Type\CurrentTable;
|
||||
use Core\Driver\SQL\Type\Trigger;
|
||||
use Core\Objects\DatabaseEntity\Controller\DatabaseEntity;
|
||||
use PHPUnit\Util\Exception;
|
||||
|
||||
@@ -45,24 +49,11 @@ class CreateDatabase {
|
||||
->primaryKey("method")
|
||||
->addBool("is_core", false);
|
||||
|
||||
self::loadEntityLog($sql, $queries);
|
||||
self::loadDefaultACL($sql, $queries);
|
||||
self::loadPatches($sql, $queries);
|
||||
|
||||
return $queries;
|
||||
}
|
||||
|
||||
private static function loadPatches(SQL $sql, array &$queries): void {
|
||||
$patchFiles = array_merge(
|
||||
glob('Core/Configuration/Patch/*.php'),
|
||||
glob('Site/Configuration/Patch/*.php')
|
||||
);
|
||||
|
||||
sort($patchFiles);
|
||||
foreach ($patchFiles as $file) {
|
||||
@include_once $file;
|
||||
}
|
||||
}
|
||||
|
||||
private static function getCreatedTables(SQL $sql, array $queries): ?array {
|
||||
$createdTables = $sql->listTables();
|
||||
|
||||
@@ -184,4 +175,47 @@ class CreateDatabase {
|
||||
$queries[] = $query;
|
||||
}
|
||||
}
|
||||
|
||||
private static function loadEntityLog(SQL $sql, array &$queries) {
|
||||
$queries[] = $sql->createTable("EntityLog")
|
||||
->addInt("entity_id")
|
||||
->addString("table_name")
|
||||
->addDateTime("last_modified", false, $sql->now())
|
||||
->addInt("lifetime", false, 90);
|
||||
|
||||
$insertProcedure = $sql->createProcedure("InsertEntityLog")
|
||||
->param(new CurrentTable())
|
||||
->param(new IntColumn("id"))
|
||||
->param(new IntColumn("lifetime", false, 90))
|
||||
->returns(new Trigger())
|
||||
->exec(array(
|
||||
$sql->insert("EntityLog", ["entity_id", "table_name", "lifetime"])
|
||||
->addRow(new CurrentColumn("id"), new CurrentTable(), new CurrentColumn("lifetime"))
|
||||
));
|
||||
|
||||
$updateProcedure = $sql->createProcedure("UpdateEntityLog")
|
||||
->param(new CurrentTable())
|
||||
->param(new IntColumn("id"))
|
||||
->returns(new Trigger())
|
||||
->exec(array(
|
||||
$sql->update("EntityLog")
|
||||
->set("last_modified", $sql->now())
|
||||
->whereEq("entity_id", new CurrentColumn("id"))
|
||||
->whereEq("table_name", new CurrentTable())
|
||||
));
|
||||
|
||||
$deleteProcedure = $sql->createProcedure("DeleteEntityLog")
|
||||
->param(new CurrentTable())
|
||||
->param(new IntColumn("id"))
|
||||
->returns(new Trigger())
|
||||
->exec(array(
|
||||
$sql->delete("EntityLog")
|
||||
->whereEq("entity_id", new CurrentColumn("id"))
|
||||
->whereEq("table_name", new CurrentTable())
|
||||
));
|
||||
|
||||
$queries[] = $insertProcedure;
|
||||
$queries[] = $updateProcedure;
|
||||
$queries[] = $deleteProcedure;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Core\Driver\SQL\Column\IntColumn;
|
||||
use Core\Driver\SQL\Type\CurrentColumn;
|
||||
use Core\Driver\SQL\Type\CurrentTable;
|
||||
use Core\Driver\SQL\Type\Trigger;
|
||||
|
||||
$queries[] = $sql->createTable("EntityLog")
|
||||
->addInt("entityId")
|
||||
->addString("tableName")
|
||||
->addDateTime("modified", false, $sql->now())
|
||||
->addInt("lifetime", false, 90);
|
||||
|
||||
$insertProcedure = $sql->createProcedure("InsertEntityLog")
|
||||
->param(new CurrentTable())
|
||||
->param(new IntColumn("id"))
|
||||
->param(new IntColumn("lifetime", false, 90))
|
||||
->returns(new Trigger())
|
||||
->exec(array(
|
||||
$sql->insert("EntityLog", ["entityId", "tableName", "lifetime"])
|
||||
->addRow(new CurrentColumn("id"), new CurrentTable(), new CurrentColumn("lifetime"))
|
||||
));
|
||||
|
||||
$updateProcedure = $sql->createProcedure("UpdateEntityLog")
|
||||
->param(new CurrentTable())
|
||||
->param(new IntColumn("id"))
|
||||
->returns(new Trigger())
|
||||
->exec(array(
|
||||
$sql->update("EntityLog")
|
||||
->set("modified", $sql->now())
|
||||
->whereEq("entityId", new CurrentColumn("id"))
|
||||
->whereEq("tableName", new CurrentTable())
|
||||
));
|
||||
|
||||
$deleteProcedure = $sql->createProcedure("DeleteEntityLog")
|
||||
->param(new CurrentTable())
|
||||
->param(new IntColumn("id"))
|
||||
->returns(new Trigger())
|
||||
->exec(array(
|
||||
$sql->delete("EntityLog")
|
||||
->whereEq("entityId", new CurrentColumn("id"))
|
||||
->whereEq("tableName", new CurrentTable())
|
||||
));
|
||||
|
||||
$queries[] = $insertProcedure;
|
||||
$queries[] = $updateProcedure;
|
||||
$queries[] = $deleteProcedure;
|
||||
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
|
||||
use Core\Configuration\CreateDatabase;
|
||||
use Core\Driver\SQL\Column\Column;
|
||||
use Core\Driver\SQL\Strategy\UpdateStrategy;
|
||||
use Core\Objects\DatabaseEntity\Group;
|
||||
|
||||
$queries[] = $sql->insert("Settings", ["name", "value", "private", "readonly"])
|
||||
->onDuplicateKeyStrategy(new UpdateStrategy(
|
||||
@@ -12,14 +12,7 @@ $queries[] = $sql->insert("Settings", ["name", "value", "private", "readonly"])
|
||||
->addRow("mail_contact_gpg_key_id", null, false, true)
|
||||
->addRow("mail_contact", "''", false, false);
|
||||
|
||||
$queries[] = $sql->insert("ApiPermission", ["method", "groups", "description", "is_core"])
|
||||
->onDuplicateKeyStrategy(new UpdateStrategy(
|
||||
["method"],
|
||||
["method" => new Column("method")])
|
||||
)
|
||||
->addRow("settings/importGPG",
|
||||
json_encode(\Core\API\Settings\ImportGPG::getDefaultPermittedGroups()),
|
||||
\Core\API\Settings\ImportGPG::getDescription(), true)
|
||||
->addRow("settings/removeGPG",
|
||||
json_encode(\Core\API\Settings\RemoveGPG::getDefaultPermittedGroups()),
|
||||
\Core\API\Settings\RemoveGPG::getDescription(), true);
|
||||
CreateDatabase::loadDefaultACL($sql, $queries, [
|
||||
\Core\API\Settings\ImportGPG::class,
|
||||
\Core\API\Settings\RemoveGPG::class
|
||||
]);
|
||||
|
||||
30
Core/Configuration/Patch/2024-12-28_SSO-integration.php
Normal file
30
Core/Configuration/Patch/2024-12-28_SSO-integration.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
use Core\Driver\SQL\Column\IntColumn;
|
||||
use Core\Driver\SQL\Column\StringColumn;
|
||||
use Core\Driver\SQL\Constraint\ForeignKey;
|
||||
use Core\Driver\SQL\Strategy\CascadeStrategy;
|
||||
use Core\Objects\DatabaseEntity\SsoProvider;
|
||||
use Core\Objects\DatabaseEntity\User;
|
||||
|
||||
$userHandler = User::getHandler($sql);
|
||||
$ssoProviderHandler = SsoProvider::getHandler($sql);
|
||||
|
||||
$userTable = $userHandler->getTableName();
|
||||
$ssoProviderTable = $ssoProviderHandler->getTableName();
|
||||
$ssoProviderColumn = $userHandler->getColumnName("ssoProvider", false);
|
||||
$passwordColumn = $userHandler->getColumnName("password");
|
||||
|
||||
$queries = array_merge($queries, $ssoProviderHandler->getCreateQueries($sql));
|
||||
|
||||
$queries[] = $sql->alterTable($userTable)
|
||||
->add(new IntColumn($ssoProviderColumn, true,null));
|
||||
|
||||
// make password nullable for SSO-login
|
||||
$queries[] = $sql->alterTable($userTable)
|
||||
->modify(new StringColumn($passwordColumn, 128,true));
|
||||
|
||||
$constraint = new ForeignKey($ssoProviderColumn, $ssoProviderTable, "id", new CascadeStrategy());
|
||||
$constraint->setName("${userTable}_ibfk_$ssoProviderColumn");
|
||||
$queries[] = $sql->alterTable($userTable)
|
||||
->add($constraint);
|
||||
Reference in New Issue
Block a user