diff --git a/src/user-federation/UserFederationLdapSettings.tsx b/src/user-federation/UserFederationLdapSettings.tsx
index 45bc47396a..d42bbecbf0 100644
--- a/src/user-federation/UserFederationLdapSettings.tsx
+++ b/src/user-federation/UserFederationLdapSettings.tsx
@@ -48,6 +48,8 @@ const LdapSettingsHeader = ({
}: LdapSettingsHeaderProps) => {
const { t } = useTranslation("user-federation");
const { id } = useParams<{ id: string }>();
+ const adminClient = useAdminClient();
+ const { addAlert } = useAlerts();
const [toggleDisableDialog, DisableConfirm] = useConfirmDialog({
titleKey: "user-federation:userFedDisableConfirmTitle",
messageKey: "user-federation:userFedDisableConfirm",
@@ -57,6 +59,68 @@ const LdapSettingsHeader = ({
save();
},
});
+
+ const syncChangedUsers = async () => {
+ try {
+ if (id) {
+ const response = await adminClient.userStorageProvider.sync({
+ id: id,
+ action: "triggerChangedUsersSync",
+ });
+ if (response.ignored) {
+ addAlert(
+ t("syncUsersSuccess") + ` ${response.status}.`,
+ AlertVariant.success
+ );
+ } else {
+ addAlert(
+ t("syncUsersSuccess") +
+ ` ${response.added} users added, ${response.updated} users updated, ${response.removed} users removed, ${response.failed} users failed.`,
+ AlertVariant.success
+ );
+ }
+ }
+ } catch (error) {
+ addAlert(t("syncUsersError", { error }), AlertVariant.danger);
+ }
+ };
+
+ const syncAllUsers = async () => {
+ try {
+ if (id) {
+ const response = await adminClient.userStorageProvider.sync({
+ id: id,
+ action: "triggerFullSync",
+ });
+ if (response.ignored) {
+ addAlert(
+ t("syncUsersSuccess") + ` ${response.status}.`,
+ AlertVariant.success
+ );
+ } else {
+ addAlert(
+ t("syncUsersSuccess") +
+ ` ${response.added} users added, ${response.updated} users updated, ${response.removed} users removed, ${response.failed} users failed.`,
+ AlertVariant.success
+ );
+ }
+ }
+ } catch (error) {
+ addAlert(t("syncUsersError", { error }), AlertVariant.danger);
+ }
+ };
+
+ const unlinkUsers = async () => {
+ try {
+ if (id) {
+ await adminClient.userStorageProvider.unlinkUsers({ id });
+ }
+ addAlert(t("unlinkUsersSuccess"), AlertVariant.success);
+ } catch (error) {
+ addAlert(t("unlinkUsersError", { error }), AlertVariant.danger);
+ }
+ };
+
return (
<>
@@ -67,22 +131,13 @@ const LdapSettingsHeader = ({
titleKey="LDAP"
subKey=""
dropdownItems={[
- console.log("Sync users TBD")}
- >
+ syncChangedUsers()}>
{t("syncChangedUsers")}
,
- console.log("Sync all users TBD")}
- >
+ syncAllUsers()}>
{t("syncAllUsers")}
,
- console.log("Unlink users TBD")}
- >
+ unlinkUsers()}>
{t("unlinkUsers")}
,
{
});
};
+ const removeImportedUsers = async () => {
+ try {
+ if (id) {
+ await adminClient.userStorageProvider.removeImportedUsers({ id });
+ }
+ addAlert(t("removeImportedUsersSuccess"), AlertVariant.success);
+ } catch (error) {
+ addAlert(t("removeImportedUsersError", { error }), AlertVariant.danger);
+ }
+ };
+
const save = async (component: ComponentRepresentation) => {
try {
if (id) {
@@ -176,8 +242,7 @@ export const UserFederationLdapSettings = () => {
continueButtonLabel: "common:remove",
onConfirm: async () => {
try {
- console.log("Remove imported TBD");
- // TODO await remove imported users command
+ removeImportedUsers();
addAlert(t("removeImportedUsersSuccess"), AlertVariant.success);
} catch (error) {
addAlert(t("removeImportedUsersError", { error }), AlertVariant.danger);
diff --git a/src/user-federation/messages.json b/src/user-federation/messages.json
index 885af7eb5c..13e6580a79 100644
--- a/src/user-federation/messages.json
+++ b/src/user-federation/messages.json
@@ -96,9 +96,15 @@
"removeImportedUsers": "Remove imported users?",
"removeImportedUsersMessage": "Do you really want to remove all imported users? The option \"Unlink users\" makes sense just for the Edit Mode \"Unsynced\" and there should be a warning that \"unlinked\" users without the password in the Keycloak database won't be able to authenticate.",
- "removeImportedUsersSuccess": "Imported users have been removed",
+ "removeImportedUsersSuccess": "Imported users have been removed.",
"removeImportedUsersError": "Could not remove imported users: '{{error}}'",
+ "syncUsersSuccess": "Sync of users finished successfully.",
+ "syncUsersError": "Could not sync users: '{{error}}'",
+
+ "unlinkUsersSuccess": "Unlink of users finished successfully.",
+ "unlinkUsersError": "Could not unlink users: '{{error}}'",
+
"validateName": "You must enter a name",
"validateRealm":"You must enter a realm",
"validateServerPrincipal":"You must enter a server principal",