diff --git a/console/src/app/modules/org-table/org-table.component.ts b/console/src/app/modules/org-table/org-table.component.ts
index 66e2df02a..eb693e0e2 100644
--- a/console/src/app/modules/org-table/org-table.component.ts
+++ b/console/src/app/modules/org-table/org-table.component.ts
@@ -3,6 +3,7 @@ import { Component, Input, ViewChild } from '@angular/core';
import { MatSort, Sort } from '@angular/material/sort';
import { MatTableDataSource } from '@angular/material/table';
import { Router } from '@angular/router';
+import { TranslateService } from '@ngx-translate/core';
import { Timestamp } from 'google-protobuf/google/protobuf/timestamp_pb';
import { BehaviorSubject, catchError, finalize, from, map, Observable, of, Subject, switchMap, take, takeUntil } from 'rxjs';
import { Org, OrgFieldName, OrgQuery, OrgState } from 'src/app/proto/generated/zitadel/org_pb';
@@ -56,6 +57,7 @@ export class OrgTableComponent {
private router: Router,
private toast: ToastService,
private _liveAnnouncer: LiveAnnouncer,
+ private translate: TranslateService,
) {
this.requestOrgs$.next({ limit: this.initialLimit, offset: 0, queries: this.searchQueries });
this.authService.getActiveOrg().then((org) => (this.activeOrg = org));
@@ -134,8 +136,14 @@ export class OrgTableComponent {
}
public setAndNavigateToOrg(org: Org.AsObject): void {
- this.authService.setActiveOrg(org);
- this.router.navigate(['/org']);
+ if (org.state !== OrgState.ORG_STATE_REMOVED) {
+ this.authService.setActiveOrg(org);
+ this.router.navigate(['/org']);
+ } else {
+ this.translate.get('ORG.TOAST.ORG_WAS_DELETED').subscribe((data) => {
+ this.toast.showInfo(data);
+ });
+ }
}
public changePage(): void {
diff --git a/console/src/app/pages/orgs/org-detail/org-detail.component.html b/console/src/app/pages/orgs/org-detail/org-detail.component.html
index c9ff91024..9f7337e8b 100644
--- a/console/src/app/pages/orgs/org-detail/org-detail.component.html
+++ b/console/src/app/pages/orgs/org-detail/org-detail.component.html
@@ -28,6 +28,10 @@
+
+
{
+ if (resp) {
+ this.mgmtService
+ .removeOrg()
+ .then(() => {
+ setTimeout(() => {
+ this.router.navigate(['/orgs']);
+ }, 1000);
+ this.toast.showInfo('ORG.TOAST.DELETED', true);
+ })
+ .catch((error) => {
+ this.toast.showError(error);
+ });
+ }
+ });
+ }
+ }
+
private async getData(): Promise {
this.mgmtService
.getMyOrg()
diff --git a/console/src/app/services/mgmt.service.ts b/console/src/app/services/mgmt.service.ts
index deca518f3..706e9a02e 100644
--- a/console/src/app/services/mgmt.service.ts
+++ b/console/src/app/services/mgmt.service.ts
@@ -312,6 +312,7 @@ import {
RemoveOrgMemberResponse,
RemoveOrgMetadataRequest,
RemoveOrgMetadataResponse,
+ RemoveOrgRequest,
RemovePersonalAccessTokenRequest,
RemovePersonalAccessTokenResponse,
RemoveProjectGrantMemberRequest,
@@ -1469,6 +1470,11 @@ export class ManagementService {
return this.grpcService.mgmt.removeUser(req, null).then((resp) => resp.toObject());
}
+ public removeOrg(): Promise {
+ const req = new RemoveOrgRequest();
+ return this.grpcService.mgmt.removeOrg(req, null).then((resp) => resp.toObject());
+ }
+
public listProjectMembers(
projectId: string,
limit: number,
diff --git a/console/src/assets/i18n/de.json b/console/src/assets/i18n/de.json
index efcf8b940..e47f93a48 100644
--- a/console/src/assets/i18n/de.json
+++ b/console/src/assets/i18n/de.json
@@ -779,6 +779,7 @@
"ORGDETAIL_TITLE": "Gebe den Namen und die Domain für die neue Organisation ein.",
"ORGDETAIL_TITLE_WITHOUT_DOMAIN": "Geben Sie den Namen der neuen Organisation ein.",
"ORGDETAILUSER_TITLE": "Organisationsbesitzer hinzufügen",
+ "DELETE": "Organisation löschen",
"RENAME": {
"ACTION": "Umbenennen",
"TITLE": "Organisation umbenennen",
@@ -845,7 +846,9 @@
"MEMBERADDED": "Manager hinzugefügt.",
"MEMBERREMOVED": "Manager entfernt.",
"MEMBERCHANGED": "Manager geändert.",
- "SETPRIMARY": "Primäre Domain gesetzt."
+ "SETPRIMARY": "Primäre Domain gesetzt.",
+ "DELETED": "Organisation erfolgreich gelöscht",
+ "ORG_WAS_DELETED": "Organisation wurde gelöscht."
},
"DIALOG": {
"DEACTIVATE": {
@@ -855,6 +858,13 @@
"REACTIVATE": {
"TITLE": "Organisation reaktivieren",
"DESCRIPTION": "Sie sind im Begriff Ihre Organisation zu reaktivieren. User können Sich danach wieder anmelden? Wollen Sie fortfahren?"
+ },
+ "DELETE": {
+ "TITLE": "Organisation löschen",
+ "DESCRIPTION": "Sie sind im Begriff Ihre Organisation endgültig zu löschen. Damit wird ein Prozess eingeleitet, bei dem alle organisationsbezogenen Daten gelöscht werden. Diese Aktion kann vorerst nicht rückgängig gemacht werden!",
+ "TYPENAME": "Wiederholen Sie '{{value}}', um den Benutzer zu löschen.",
+ "ORGNAME": "Loginname",
+ "BTN": "Endgültig löschen"
}
}
},
diff --git a/console/src/assets/i18n/en.json b/console/src/assets/i18n/en.json
index 99e0f2392..648ac5c86 100644
--- a/console/src/assets/i18n/en.json
+++ b/console/src/assets/i18n/en.json
@@ -779,6 +779,7 @@
"ORGDETAIL_TITLE": "Enter the name and domain of your new organization.",
"ORGDETAIL_TITLE_WITHOUT_DOMAIN": "Enter the name of your new organization.",
"ORGDETAILUSER_TITLE": "Configure Organization Owner",
+ "DELETE": "Delete organization",
"RENAME": {
"ACTION": "Rename",
"TITLE": "Rename Organization",
@@ -845,7 +846,9 @@
"MEMBERADDED": "Manager added.",
"MEMBERREMOVED": "Manager removed.",
"MEMBERCHANGED": "Manager changed.",
- "SETPRIMARY": "Primary domain set."
+ "SETPRIMARY": "Primary domain set.",
+ "DELETED": "Organisation deleted successfully",
+ "ORG_WAS_DELETED": "Organisation has been deleted."
},
"DIALOG": {
"DEACTIVATE": {
@@ -855,6 +858,13 @@
"REACTIVATE": {
"TITLE": "Reactivate organization",
"DESCRIPTION": "You are about to reactivate your organization. Users will be able to login again. Are you sure to proceed?"
+ },
+ "DELETE": {
+ "TITLE": "Delete organization",
+ "DESCRIPTION": "You are about to delete your organization. This initiates a process where all organization related data will be deleted. You can not revert this action as for now.",
+ "TYPENAME": "Type '{{value}}', to delete your organization.",
+ "ORGNAME": "Name",
+ "BTN": "Delete"
}
}
},
diff --git a/console/src/assets/i18n/fr.json b/console/src/assets/i18n/fr.json
index e9430565b..72141ff84 100644
--- a/console/src/assets/i18n/fr.json
+++ b/console/src/assets/i18n/fr.json
@@ -779,6 +779,7 @@
"ORGDETAIL_TITLE": "Saisissez le nom et le domaine de votre nouvelle organisation.",
"ORGDETAIL_TITLE_WITHOUT_DOMAIN": "Saisissez le nom de votre nouvelle organisation.",
"ORGDETAILUSER_TITLE": "Configurer le propriétaire de l'organisation",
+ "DELETE": "Supprimer l'organisation",
"RENAME": {
"ACTION": "Renommer",
"TITLE": "Renommer l'organisation",
@@ -845,7 +846,9 @@
"MEMBERADDED": "Gestionnaire ajouté.",
"MEMBERREMOVED": "Gestionnaire supprimé.",
"MEMBERCHANGED": "Gestionnaire modifié.",
- "SETPRIMARY": "Domaine primaire défini."
+ "SETPRIMARY": "Domaine primaire défini.",
+ "DELETED": "Organisation supprimée avec succès",
+ "ORG_WAS_DELETED": "L'organisation a été supprimée"
},
"DIALOG": {
"DEACTIVATE": {
@@ -855,6 +858,13 @@
"REACTIVATE": {
"TITLE": "Réactiver l'organisation",
"DESCRIPTION": "Vous êtes sur le point de réactiver votre organisation. Les utilisateurs peuvent ensuite se reconnecter ? Voulez-vous continuer ?"
+ },
+ "DELETE": {
+ "TITLE": "Supprimer l'organisation",
+ "DESCRIPTION": "Vous êtes sur le point de supprimer votre organisation. Cela déclenche un processus au cours duquel toutes les données relatives à l'organisation seront supprimées. Vous ne pouvez pas revenir sur cette action pour le moment.",
+ "TYPENAME": "Tapez '{{value}}', pour supprimer votre organisation.",
+ "ORGNAME": "Nom",
+ "BTN": "Supprimer"
}
}
},
diff --git a/console/src/assets/i18n/it.json b/console/src/assets/i18n/it.json
index 9e79ca2cc..44aeee27e 100644
--- a/console/src/assets/i18n/it.json
+++ b/console/src/assets/i18n/it.json
@@ -757,7 +757,8 @@
"ROLEREMOVED": "Ruolo rimosso.",
"ROLECHANGED": "Ruolo cambiato.",
"REACTIVATED": "Riattivato",
- "DEACTIVATED": "Disattivato"
+ "DEACTIVATED": "Disattivato",
+ "DELETED": "Organizzazione cancellata con successo"
}
},
"ORG": {
@@ -779,6 +780,7 @@
"ORGDETAIL_TITLE": "Inserisci il nome e il dominio della tua nuova organizzazione.",
"ORGDETAIL_TITLE_WITHOUT_DOMAIN": "Inserisci il nome della tua nuova organizzazione.",
"ORGDETAILUSER_TITLE": "Configurare il proprietario dell'organizzazione",
+ "DELETE": "Elimina organizzazione",
"RENAME": {
"ACTION": "Rinomina",
"TITLE": "Rinomina organizzazione",
@@ -845,7 +847,9 @@
"MEMBERADDED": "Manager aggiunto con successo",
"MEMBERREMOVED": "Manager rimosso con successo",
"MEMBERCHANGED": "Manager cambiato con successo",
- "SETPRIMARY": "Dominio primario cambiato con successo"
+ "SETPRIMARY": "Dominio primario cambiato con successo",
+ "DELETED": "Organizzazione eliminata con successo",
+ "ORG_WAS_DELETED": "Organizzazione è stata eliminata"
},
"DIALOG": {
"DEACTIVATE": {
@@ -855,6 +859,13 @@
"REACTIVATE": {
"TITLE": "Riattivare l'organizzazione",
"DESCRIPTION": "Stai per riattivare la tua organizzazione. Utenti dell' organizzazione possono accedere nuovamente dopo l'attivazione. Vuoi procedere?"
+ },
+ "DELETE": {
+ "TITLE": "Elimina organizzazione",
+ "DESCRIPTION": "Si sta per eliminare l'organizzazione. In questo modo si avvia un processo di eliminazione di tutti i dati relativi all'organizzazione. Per il momento non è possibile annullare questa azione.",
+ "TYPENAME": "Inserisci '{{value}}' nel campo, per cancellare l'organizzazione.",
+ "ORGNAME": "Nome",
+ "BTN": "Elimina"
}
}
},
diff --git a/console/src/assets/i18n/zh.json b/console/src/assets/i18n/zh.json
index f20857f41..5f1da216f 100644
--- a/console/src/assets/i18n/zh.json
+++ b/console/src/assets/i18n/zh.json
@@ -779,6 +779,7 @@
"ORGDETAIL_TITLE": "输入新组织的名称和域名。",
"ORGDETAIL_TITLE_WITHOUT_DOMAIN": "输入新组织的名称。",
"ORGDETAILUSER_TITLE": "配置组织所有者",
+ "DELETE": "删除组织",
"RENAME": {
"ACTION": "改名",
"TITLE": "重命名组织",
@@ -845,7 +846,9 @@
"MEMBERADDED": "管理者已添加。",
"MEMBERREMOVED": "管理者已删除。",
"MEMBERCHANGED": "管理者以改变。",
- "SETPRIMARY": "已设为主域名。"
+ "SETPRIMARY": "已设为主域名。",
+ "DELETED": "成功删除的组织",
+ "ORG_WAS_DELETED": "组织被删除"
},
"DIALOG": {
"DEACTIVATE": {
@@ -855,6 +858,13 @@
"REACTIVATE": {
"TITLE": "重新启用组织",
"DESCRIPTION": "您即将重新启用您的组织。用户将能够再次登录。你确定要继续吗?"
+ },
+ "DELETE": {
+ "TITLE": "删除组织",
+ "DESCRIPTION": "你即将删除你的组织。这将启动一个过程,所有与组织有关的数据将被删除。你现在还不能恢复这一行动。",
+ "TYPENAME": "键入'{价值}',以删除您的组织。",
+ "ORGNAME": "组织名称",
+ "BTN": "删除"
}
}
},