diff --git a/src/app/impersonation/impersonation.component.html b/src/app/impersonation/impersonation.component.html
index 070a2a1..02c589f 100644
--- a/src/app/impersonation/impersonation.component.html
+++ b/src/app/impersonation/impersonation.component.html
@@ -9,7 +9,7 @@
User to impersonate
{{getUsername()}}
- @for (user of users; track user) {
+ @for (user of users; track user.id) {
{{ user.name }}
}
diff --git a/src/app/impersonation/impersonation.component.ts b/src/app/impersonation/impersonation.component.ts
index 1ee6107..729b902 100644
--- a/src/app/impersonation/impersonation.component.ts
+++ b/src/app/impersonation/impersonation.component.ts
@@ -36,7 +36,7 @@ export class ImpersonationComponent implements OnInit {
}).subscribe((data: any) => {
this.users = data.filter((d: any) => d.name != this.auth.getUsername());
const id = this.auth.getImpersonatedId();
- if (this.users.find(u => u.id == id)) {
+ if (id && this.users.find(u => u.id == id)) {
this.impersonated = id;
}
});
diff --git a/src/app/policy-table/policy-table.component.html b/src/app/policy-table/policy-table.component.html
index d43dd39..9e5335d 100644
--- a/src/app/policy-table/policy-table.component.html
+++ b/src/app/policy-table/policy-table.component.html
@@ -17,7 +17,7 @@
@if (policy.editing) {
}
- @if (!policy.editing) {
+ @if (!policy.editing && groups[policy.group_id]) {
{{groups[policy.group_id].name}}
}
diff --git a/src/app/policy-table/policy-table.component.ts b/src/app/policy-table/policy-table.component.ts
index 5f6780c..bb5c3e7 100644
--- a/src/app/policy-table/policy-table.component.ts
+++ b/src/app/policy-table/policy-table.component.ts
@@ -1,4 +1,4 @@
-import { Component, ElementRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';
+import { Component, ElementRef, Input, isDevMode, OnDestroy, OnInit, ViewChild } from '@angular/core';
import { MatTable, MatTableModule } from '@angular/material/table';
import { MatIconModule } from '@angular/material/icon';
import EventService from '../shared/services/EventService';
@@ -44,6 +44,8 @@ export class PolicyTableComponent implements OnInit, OnDestroy {
for (let policy of response.data) {
this.policies.push(new Policy(policy.id, policy.group_id, policy.path, policy.usage, policy.span, "", false, false));
}
+ if (isDevMode())
+ console.log('policies', this.policies);
this.table.renderRows();
} else if (response.request.type == "create_policy") {
console.log("create policy", response);
@@ -83,6 +85,7 @@ export class PolicyTableComponent implements OnInit, OnDestroy {
}
} else if (response.request.type == "get_permissions") {
this.groups = Object.assign({}, ...response.data.groups.map((g: any) => ({ [g.id]: g })));
+ console.log('groups', response.data)
}
});
this.hermes.fetchPolicies();
@@ -98,13 +101,21 @@ export class PolicyTableComponent implements OnInit, OnDestroy {
if (!policy.editing)
return;
- policy.path = policy.old_path ?? '';
- policy.usage = policy.old_usage ?? 1;
- policy.span = policy.old_span ?? 5000;
- policy.old_path = undefined;
- policy.old_span = undefined;
- policy.old_usage = undefined;
- policy.editing = false;
+ if (policy.isNew) {
+ const index = this.policies.indexOf(policy);
+ if (index >= 0) {
+ this.policies.splice(index, 1);
+ this.table.renderRows();
+ }
+ } else {
+ policy.path = policy.old_path ?? '';
+ policy.usage = policy.old_usage ?? 1;
+ policy.span = policy.old_span ?? 5000;
+ policy.old_path = undefined;
+ policy.old_span = undefined;
+ policy.old_usage = undefined;
+ policy.editing = false;
+ }
}
delete(policy: Policy) {
@@ -124,12 +135,20 @@ export class PolicyTableComponent implements OnInit, OnDestroy {
console.log('group must be valid.');
return;
}
- const group = Object.values(this.groups).find(g => g.name);
+ const group = Object.values(this.groups).find(g => g.name == policy.temp_group_name);
if (group == null) {
console.log('group does not exist.');
return;
}
+ if (policy.isNew) {
+ const match = this.policies.find(p => p.group_id == group.id && p.path == policy.path);
+ if (match) {
+ console.log('policy already exists');
+ return;
+ }
+ }
+
if (isNaN(policy.usage)) {
console.log('usage must be a whole number.');
return;
@@ -156,18 +175,6 @@ export class PolicyTableComponent implements OnInit, OnDestroy {
return;
}
- let group_id = policy?.group_id;
- for (let groupId in this.groups) {
- if (this.groups[groupId].name == policy?.temp_group_name) {
- group_id = groupId;
- break;
- }
- }
- if (policy?.temp_group_name != this.groups[group_id].name) {
- console.log('no group found.');
- return;
- }
-
if (policy.isNew) {
this.hermes.createPolicy(group.id, policy.path, policy.usage, policy.span);
} else {
diff --git a/src/app/shared/services/api/api-authentication.service.ts b/src/app/shared/services/api/api-authentication.service.ts
index 2836ff3..927da02 100644
--- a/src/app/shared/services/api/api-authentication.service.ts
+++ b/src/app/shared/services/api/api-authentication.service.ts
@@ -25,11 +25,11 @@ export class ApiAuthenticationService {
}
getImpersonatedId() {
- return this.user.impersonation.id;
+ return this.user.impersonation?.id;
}
getUsername() {
- return this.user.name;
+ return this.user?.name;
}
update() {