[Web] manage keycloak identity provider

This commit is contained in:
FreddleSpl0it
2023-03-12 19:08:09 +01:00
parent 638a81c58c
commit 0a78c742d7
7 changed files with 170 additions and 0 deletions

View File

@@ -1899,6 +1899,74 @@ function rspamd_ui($action, $data = null) {
break;
}
}
function identity_provider($_action, $_data = null) {
global $pdo;
if ($_SESSION['mailcow_cc_role'] != "admin") {
$_SESSION['return'][] = array(
'type' => 'danger',
'log' => array(__FUNCTION__, $_action, $_data),
'msg' => 'access_denied'
);
return false;
}
switch ($_action) {
case 'get':
$settings = array();
$stmt = $pdo->prepare("SELECT * FROM `identity_provider`;");
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $row){
$settings[$row["key"]] = $row["value"];
}
$_SESSION['return'][] = array(
'type' => 'success',
'log' => array(__FUNCTION__, $_action, $settings),
'msg' => 'admin_api_modified'
);
return $settings;
case 'edit':
$required_settings = array('server_url', 'authsource', 'realm', 'client_id', 'client_secret', 'redirect_url', 'version');
foreach($required_settings as $setting){
if (!$_data[$setting]){
return false;
}
}
try {
$_SESSION['return'][] = array(
'type' => 'success',
'log' => array(__FUNCTION__, $_action, $_data),
'msg' => '2'
);
$stmt = $pdo->prepare("INSERT INTO identity_provider (`key`, `value`) VALUES (:key, :value) ON DUPLICATE KEY UPDATE `value` = VALUES(`value`);");
$_SESSION['return'][] = array(
'type' => 'success',
'log' => array(__FUNCTION__, $_action, $_data),
'msg' => '3'
);
} catch (Exception $e){
$_SESSION['return'][] = array(
'type' => 'success',
'log' => array(__FUNCTION__, $_action, $_data, $e->getMessage()),
'msg' => 'post'
);
return;
}
foreach($_data as $key => $value){
if (!in_array($key, $required_settings)){
continue;
}
$stmt->bindParam(':key', $key);
$stmt->bindParam(':value', $value);
$stmt->execute();
}
return true;
break;
}
}
function get_logs($application, $lines = false) {
if ($lines === false) {