You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampipes.apache.org by ri...@apache.org on 2021/12/01 09:05:16 UTC

[incubator-streampipes] 02/04: [STREAMPIPES-426] Allow admins to change usernames of existing users

This is an automated email from the ASF dual-hosted git repository.

riemer pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-streampipes.git

commit d47938a8c6771da86432ff133f7c7626dfedf835
Author: Dominik Riemer <do...@gmail.com>
AuthorDate: Wed Dec 1 09:59:02 2021 +0100

    [STREAMPIPES-426] Allow admins to change usernames of existing users
---
 .../edit-user-dialog.component.html                 | 21 ++++++++++++---------
 .../edit-user-dialog.component.scss                 |  6 ++++++
 .../edit-user-dialog/edit-user-dialog.component.ts  | 16 ++++++++++++++--
 3 files changed, 32 insertions(+), 11 deletions(-)

diff --git a/ui/src/app/configuration/security-configuration/edit-user-dialog/edit-user-dialog.component.html b/ui/src/app/configuration/security-configuration/edit-user-dialog/edit-user-dialog.component.html
index 7f3c131..224264a 100644
--- a/ui/src/app/configuration/security-configuration/edit-user-dialog/edit-user-dialog.component.html
+++ b/ui/src/app/configuration/security-configuration/edit-user-dialog/edit-user-dialog.component.html
@@ -37,6 +37,7 @@
                                data-cy="new-user-email">
                         <mat-error>Must be a valid email address.</mat-error>
                     </mat-form-field>
+                    <div class="email-changed" *ngIf="emailChanged">Changing the current user's email will require a re-login.</div>
                     <mat-form-field color="accent" *ngIf="isUserAccount">
                         <mat-label>Full Name</mat-label>
                         <input formControlName="fullName" fxFlex
@@ -110,15 +111,17 @@
     </div>
     <mat-divider></mat-divider>
     <div class="sp-dialog-actions">
-        <div fxLayout="row">
-            <button mat-button mat-raised-button color="accent" (click)="save()" style="margin-right:10px;"
-                    [disabled]="!parentForm.valid"
-                    data-cy="sp-element-edit-user-save">
-                <i class="material-icons">save</i><span>&nbsp;Save</span>
-            </button>
-            <button mat-button mat-raised-button class="mat-basic" (click)="close(false)">
-                Cancel
-            </button>
+        <div fxLayout="column">
+            <div fxLayout="row">
+                <button mat-button mat-raised-button color="accent" (click)="save()" style="margin-right:10px;"
+                        [disabled]="!parentForm.valid"
+                        data-cy="sp-element-edit-user-save">
+                    <i class="material-icons">save</i><span>&nbsp;Save</span>
+                </button>
+                <button mat-button mat-raised-button class="mat-basic" (click)="close(false)">
+                    Cancel
+                </button>
+            </div>
         </div>
     </div>
 </div>
diff --git a/ui/src/app/configuration/security-configuration/edit-user-dialog/edit-user-dialog.component.scss b/ui/src/app/configuration/security-configuration/edit-user-dialog/edit-user-dialog.component.scss
index aad1d42..71c46ee 100644
--- a/ui/src/app/configuration/security-configuration/edit-user-dialog/edit-user-dialog.component.scss
+++ b/ui/src/app/configuration/security-configuration/edit-user-dialog/edit-user-dialog.component.scss
@@ -26,3 +26,9 @@
 .form-field .mat-form-field-infix {
   border-top: 0;
 }
+
+.email-changed {
+  color: var(--color-warn);
+  font-size: small;
+  margin-bottom: 10px;
+}
diff --git a/ui/src/app/configuration/security-configuration/edit-user-dialog/edit-user-dialog.component.ts b/ui/src/app/configuration/security-configuration/edit-user-dialog/edit-user-dialog.component.ts
index 7044766..d29eede 100644
--- a/ui/src/app/configuration/security-configuration/edit-user-dialog/edit-user-dialog.component.ts
+++ b/ui/src/app/configuration/security-configuration/edit-user-dialog/edit-user-dialog.component.ts
@@ -39,6 +39,8 @@ import { UserService } from '../../../platform-services/apis/user.service';
 import { UserGroupService } from '../../../platform-services/apis/user-group.service';
 import { RoleDescription } from '../../../_models/auth.model';
 import { AvailableRolesService } from '../../../services/available-roles.service';
+import {AuthService} from "../../../services/auth.service";
+import {Router} from "@angular/router";
 
 @Component({
   selector: 'sp-edit-user-dialog',
@@ -64,12 +66,15 @@ export class EditUserDialogComponent implements OnInit {
   registrationError: string;
 
   sendPasswordToUser = false;
+  emailChanged = false;
 
   constructor(private dialogRef: DialogRef<EditUserDialogComponent>,
               private availableRolesService: AvailableRolesService,
               private fb: FormBuilder,
               private userService: UserService,
-              private userGroupService: UserGroupService) {
+              private userGroupService: UserGroupService,
+              private authService: AuthService,
+              private router: Router) {
   }
 
   ngOnInit(): void {
@@ -105,6 +110,7 @@ export class EditUserDialogComponent implements OnInit {
       this.clonedUser.accountLocked = v.accountLocked;
       this.clonedUser.accountEnabled = v.accountEnabled;
       if (this.clonedUser instanceof UserAccount) {
+        this.emailChanged = (this.clonedUser.username !== this.user.username) && this.user.username === this.authService.getCurrentUser().username && this.editMode;
         this.clonedUser.fullName = v.fullName;
         if (!this.editMode) {
           this.sendPasswordToUser = v.sendPasswordToUser;
@@ -149,7 +155,13 @@ export class EditUserDialogComponent implements OnInit {
     if (this.editMode) {
       if (this.isUserAccount) {
         this.userService.updateUser(this.clonedUser as UserAccount).subscribe(() => {
-          this.close(true);
+          if (this.emailChanged) {
+            this.authService.logout();
+            this.close(false);
+            this.router.navigate(['login']);
+          } else {
+            this.close(true);
+          }
         });
       } else {
         this.userService.updateService(this.clonedUser as ServiceAccount).subscribe(() => {